2014-04-01 31 views
6

Şu anda SLComposeViewController kullanıyorum, bir kullanıcının twitter'e veya facebook'a (dokundukları tuşa bağlı olarak) skorunu göndermek için kullanıyorum. Paylaştıklarında, sanal para ile ödüllendirilirler. Karşılaştığım sorun, yalnızca bir kullanıcının Gönder veya İptal'e basıp vurmadığını söylemesi. Tweet'in gerçekten Twitter'da yayınlanıp yayınlanmadığını nasıl kontrol edebilirim? Bu, bir kullanıcının aynı tweet'i iki kez göndermeye çalıştığı durumlarda (twitter'ın izin vermediği durumlarda) mücadele etmeye yardımcı olacaktır.iOS 7 SLComposeViewController: Tweet'in gerçekten gönderilip gönderilmediğini kontrol edin.

Bu şimdi benim kodudur: tweet aslında (Sosyal Framework kullanarak) gönderilmiş ise

//Check if user can send tweet 
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) { 
SLComposeViewController *tweetSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 

tweetSheet.completionHandler = ^(SLComposeViewControllerResult result) { 
switch(result) { 
    //This means the user cancelled without sending the Tweet 
    case SLComposeViewControllerResultCancelled: 
      NSLog(@"User Canceled"); 
      break; 

    //This means the user hit 'Send' 
    case SLComposeViewControllerResultDone: 
    NSLog(@"User Tapped Send"); 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 

    //Show alert & reward user here 

    break; 
    }     
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self dismissViewControllerAnimated:NO completion:^{ 
     NSLog(@"Tweet Sheet has been dismissed."); 
     }]; 
    }); 
    }; 
     [tweetSheet setInitialText:[NSString stringWithFormat:@"Just scored %ld %@! I challenge anyone to try & beat it! ", (long)scene.score, suffix]]; 
     [tweetSheet addURL:[NSURL URLWithString:@"http://appstore.com/appurlhere"]]; 
     [self presentViewController:tweetSheet animated:YES completion:^{ 
     NSLog(@"Tweet sheet has been presented."); 
    }]; 
    } 

else { 

//Something went wrong, aka no network connection 

}; 

nasıl kontrol edebilirim.

+1

Di, bunun mümkün olup olmadığını nasıl anladınız? – DelightedD0D

cevap

2

Bu soru bir yıllık ama ben sadece üzerinde oldu ve sadece (sadece birkaç dakika önce!) Projemde çalışan bir cevap buldu. Projemde, kullanıcının gönderdiği bağlantıyı doğrulamak için kaç tweet gönderildiğini sayıyorum. Kullanıcı tweet'i iptal ederse, sayım artmaz. Umarım bu birisine yardım eder. SLComposeViewControllerResultDone altında [self tweetSuccessful] numaralı telefonu arayın. Bunun "doğru" yol olup olmadığından emin değil, ancak doğru görünüyor.

-(void)twitterImageTouched:(UIGestureRecognizer *)gesture 
{ 
    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) 
    { 
     SLComposeViewController *tweetSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 
     [tweetSheet setInitialText:@"Test"; 
     [tweetSheet addImage:[UIImage imageNamed:@"yourImageName"]; 
     [tweetSheet addURL:[NSURL URLWithString:@"http://yourURL"]]; 
     [self presentViewController:tweetSheet animated:YES completion:nil]; 

     tweetSheet.completionHandler = ^(SLComposeViewControllerResult result) 
     { 
      switch (result) 
      { 
       case SLComposeViewControllerResultCancelled: 
        NSLog(@"tweet cancelled"); 
        break; 
       case SLComposeViewControllerResultDone: 
        NSLog(@"tweet completed"); 

        [self tweetSuccessful]; 
        break; 

       default: 
        break; 
      } 
     }; 
    } 

    NSLog(@"Twitter Button Pressed."); 
} 


-(void)tweetSuccessful 
{ 
    NSInteger i = [[NSUserDefaults standardUserDefaults] integerForKey:@"numberOfTweets"]; 
    [[NSUserDefaults standardUserDefaults] setInteger:i + 1 forKey:@"numberOfTweets"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    NSLog(@"%li tweets have been shared", (long)i + 1); 
} 
İlgili konular