2014-04-01 7 views
6

Attualmente sto utilizzando SLComposeViewController per pubblicare il punteggio di un utente su Twitter o Facebook (a seconda del pulsante che toccano). Quando condividono, vengono ricompensati con valuta virtuale. Il problema che sto affrontando è che mi dirà solo se un utente ha premuto Invia o Annulla. Come posso verificare se il tweet è effettivamente pubblicato su Twitter? Ciò aiuterà a combattere i casi in cui un utente tenta di inviare lo stesso tweet due volte (cosa che Twitter non consente).iOS 7 SLComposeViewController: Controlla se il tweet è stato effettivamente pubblicato?

Questo è il mio codice per ora:

//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 

}; 

Come posso controllare se il tweet è stato effettivamente pubblicato (Usando il quadro sociale).

+1

Hai mai scoperto se fosse possibile? – DelightedD0D

risposta

2

Questa domanda è vecchia di un anno ma mi è appena capitato e ho appena capito (solo pochi minuti fa!) Una risposta che funziona nel mio progetto. Nel mio progetto, sto contando quanti tweet sono stati inviati per verificare che l'utente abbia toccato l'invio. Se l'utente annulla il tweet, il conteggio non aumenta. Speriamo che questo possa aiutare qualcuno. Chiama [self tweetSuccessful] in SLComposeViewControllerResultDone. Non sono sicuro se questo è il modo "giusto", ma sembra essere preciso.

-(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); 
}