2012-12-18 7 views

risposta

3

La chiamata API che è necessario inviare è:

https://dev.twitter.com/docs/api/1.1/post/statuses/update_with_media

Prima di fare quella chiamata, naturalmente, è necessario per l'autenticazione con Twitter via XAuth/OAuth. A meno che non si ottiene il permesso speciale da Twitter per fare altrimenti, sembra che sarà necessario utilizzare OAuth,

https://dev.twitter.com/docs/oauth/xauth

Per sfondo la richiesta, è probabile che il significato usare Grand Central Dispatch --that è a meno hai molte richieste di Twitter da inviare. In tal caso, preferirei optare per lo NSOperationQueue dove maxConcurrentOperationCount = 1. Si veda il seguente:

http://www.fieryrobot.com/blog/2010/06/27/a-simple-job-queue-with-grand-central-dispatch/

http://www.raywenderlich.com/19788/how-to-use-nsoperations-and-nsoperationqueues

Tuttavia, a causa OAuth è un dolore, è probabile che senso utilizzare una libreria di terze parti. Non ho mai usato prima, ma qui è un esempio usando MGTwitterEngine:

Twitter's statuses/update_with_media on iOS returns 500 error

Se tu fossi in grado di limitare l'uso di iOS 5+, quindi consiglio vivamente utilizzando l'oggetto SLRequest. Il vantaggio di questo approccio è l'integrazione diretta con l'account degli utenti iOS, in modo che non debbano autenticarsi tramite UIWebView o qualcosa di approssimativo.

Per fare ciò, basta inserire l'URL dell'API di Twitter appropriato nella seguente funzione requestForServiceType:requestMethod:URL:parameters: e ottenere l'oggetto SLRequest. Quindi assegnare il Twitter appropriato ACAccount ottenuto da ACAccountStore utilizzando requestAccessToAccountsWithType:options:completion:. Infine, effettua la chiamata allo performRequestWithHandler, che quindi eseguirà la richiesta in modo asincrono.

2

Sì, ma è necessario trovare alcune 1.1 API wrapper (cosa che genera richieste API, singinle ecc.) Per te e autore (motore MGTWitter funziona correttamente). Ho un working solution for sharing (text only) and getting user info for iOS 4+.

E sulla parte relativa allo sfondo, che dipende da come viene implementata (ad esempio notifiche o esecuzione continua in background o callbacs ecc. Ecc.).

2

Il seguente codice non verrà pubblicato in background ma può essere pubblicato in tutte le versioni di ios ... È possibile utilizzare la condizione per le versioni ios come il codice riportato di seguito. Si tratta di codice funzionante che ho implementato e che funziona su entrambi ios 5 e 6. Si prega di controllare in ios 4 per confermare. Penso che dovrebbe funzionare.

#import "Twitter/Twitter.h" 
#import "Social/Social.h" 

-(IBAction)tweetPost:(id)sender 
{ 
if ([self isSocialAvailable]) 
{ 
    SLComposeViewController *tweetComposer=[SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 

    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) { 
    SLComposeViewControllerCompletionHandler __block completionHandler= 
    ^(SLComposeViewControllerResult result){ 

    [tweetComposer dismissViewControllerAnimated:YES completion:nil]; 

    switch(result){ 
    case SLComposeViewControllerResultCancelled: 
    default: 
    { 
     NSLog(@"Cancelled....."); 
    } 
     break; 
    case SLComposeViewControllerResultDone: 
    { 
     NSLog(@"Posted...."); 
     UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Sent" 
                 message:nil 
                 delegate:nil 
              cancelButtonTitle:@"Dismiss" 
              otherButtonTitles: nil]; 
     [alert show]; 
    } 
     break; 
    }}; 
    NSString*message = @"posting to twitter test ios 6"; 
    [tweetComposer setInitialText:message]; 
    [tweetComposer addImage:[UIImage imageNamed:@"2.jpg"]]; 
    [tweetComposer addURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=GoZ2Be2zLq8"]]; 

    [tweetComposer setCompletionHandler:completionHandler]; 
    [self presentViewController:tweetComposer animated:YES completion:nil]; 
    } 
} 
else 
{ 
    TWTweetComposeViewController *twitter= [[TWTweetComposeViewController alloc] init]; 

    [twitter addImage:[UIImage imageNamed:@"2.jpg"]]; 
    [twitter addURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=GoZ2Be2zLq8"]]; 
    [twitter setInitialText:@"Tweet from iOS 5 app using the Twitter framework."]; 

    [self presentModalViewController:twitter animated:YES]; 

    twitter.completionHandler = ^(TWTweetComposeViewControllerResult result) 
    { 
    NSString *title = @"Tweet Status"; 
    NSString *msg; 

    if (result == TWTweetComposeViewControllerResultCancelled) 
    msg = @"Tweet compostion was canceled."; 
    else if (result == TWTweetComposeViewControllerResultDone) 
    msg = @"Tweet composition completed."; 

    // Show alert to see how things went... 
    UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:title message:msg delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil]; 
    [alertView show]; 
    }; 
} 
} 


-(BOOL)isSocialAvailable { 
return NSClassFromString(@"SLComposeViewController") != nil; 
} 

è necessario includere tre quadri denominati sociali, adSupport e Accounts.Check quale non necessari con il post feed Twitter. Spero, questo ti aiuterà.

Problemi correlati