¿Es posible el intercambio automatizado para Twitter en segundo plano en iOS?

Quería compartir un feed de Twitter en la panetworking de Twitter que contiene una image y algo de text. Quiero soporte de iOS 4.3 a iOS 6.0.1. ¿Es posible compartir en segundo plano sin un button de enviar / compartir? ¿Cómo lo implemento?

La llamada a la API que debe enviar es:

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

Antes de hacer esa llamada, por supuesto, deberá autenticarse con Twitter a través de xAuth / OAuth. A less que obtenga un permiso especial de Twitter para hacer lo contrario, parece que necesitará usar OAuth,

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

Al background de la request, probablemente tenga sentido usar Grand Central Dispatch, es decir, a less que tenga muchas requestes diferentes de Twitter para enviar. En ese caso, preferiría optar por un NSOperationQueue donde maxConcurrentOperationCount = 1 . Vea lo siguiente:

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

Sin embargo, debido a que OAuth es tal dolor, es probable que tenga sentido usar una biblioteca de terceros. Nunca lo he usado antes, pero aquí hay un ejemplo con MGTwitterEngine:

Los estados de Twitter / update_with_media en iOS devuelven 500 errores

Si pudieras limitar el uso a iOS 5+, entonces recomendaría usar el object SLRequest . La ventaja de este enfoque es que se integra directamente con la count de usuarios de iOS, por lo que no tiene que autenticarse a través de una UIWebView o algo cursi.

Para hacerlo, simplemente conecte la URL apropiada de la API de Twitter en la siguiente function requestForServiceType:requestMethod:URL:parameters: y obtenga su object SLRequest . Luego asigne la ACAccount Twitter obtenida de ACAccountStore usando requestAccessToAccountsWithType:options:completion: Por último, haga su llamada para performRequestWithHandler , que luego realizará su request de forma asíncrona.

El siguiente código no se publicará en segundo plano, pero puede publicar en todas las versiones de ios … Puede usar la condición para versiones de ios como el código siguiente. Este código de trabajo que he implementado está funcionando en ios 5 y 6. Por favor, consulte ios 4 para confirmar. Creo que debería funcionar.

 #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; } 

Debe include tres frameworks denominados social, adSupport y Accounts. Compruebe cuál no es necesario con la publicación de feed de Twitter. Espero que esto te ayudará.

Sí, pero necesitará encontrar un contenedor de API 1.1 (cosa que genera requestes API, combinarlos, etc.) para usted y el autorizador (el motor MGTWitter funciona bien). Tengo una solución funcional para compartir (solo text) y get información del usuario para iOS 4+ .

Y sobre la parte de background, eso depende de cómo lo implementes (es decir, las notifications o la ejecución continua de background o gps callbacs, etc …).