2012-12-18 9 views

Odpowiedz

3

Wywołanie API, które trzeba wysłać to:

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

Przed przystąpieniem do tej rozmowy, oczywiście, trzeba będzie uwierzytelnić z Twittera za pośrednictwem XAUTH/OAuth. Chyba że można dostać specjalne pozwolenie z Twittera, aby postąpić inaczej, wygląda na to trzeba będzie użyć OAuth,

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

Aby tle wniosek, to będzie prawdopodobnie sensu używać Grand Central Dispatch --that jest chyba masz wiele różnych żądań Twittera do wysłania. W takim przypadku zamiast tego zdecydowałbym się na NSOperationQueue gdzie maxConcurrentOperationCount = 1. Zobacz:

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

Niemniej jednak, ponieważ OAuth jest taki ból, to będzie prawdopodobnie sensu korzystać z biblioteki przez stronę trzecią. Nigdy nie używał go wcześniej, ale tutaj jest przykład przy użyciu MGTwitterEngine:

Twitter's statuses/update_with_media on iOS returns 500 error

Jeśli były w stanie ograniczyć stosowanie do iOS 5+, to chciałbym polecić korzystanie z przedmiotu SLRequest. Zaletą tego podejścia jest to, że integrujesz się bezpośrednio z kontem użytkowników iOS, więc nie muszą uwierzytelniać się za pomocą interfejsu UIWebView lub czegoś tandetnego.

Aby to zrobić, wystarczy podłączyć odpowiedni adres URL interfejsu Twitter API w następującej funkcji requestForServiceType:requestMethod:URL:parameters: i uzyskać obiekt SLRequest. Następnie przypisz odpowiedni serwis Twitter ACAccount uzyskany z ACAccountStore przy użyciu adresu requestAccessToAccountsWithType:options:completion:. Na koniec zadzwoń pod numer performRequestWithHandler, który następnie wykona twoje żądanie asynchronicznie.

2

Tak, ale musisz znaleźć opakowanie 1.1 interfejsu API (coś, co generuje żądania interfejsu API, wyświęca je itp.) Dla ciebie i autora (silnik MGTWitter działa bez zarzutu). Mam working solution for sharing (text only) and getting user info for iOS 4+.

Co do części tła - zależy to od tego, jak ją zaimplementujesz (tj. Powiadomienia lub ciągłe wykonywanie tła lub wywołania gps etc ...).

2

Poniższy kod nie będzie publikowany w tle, ale może być publikowany w wersjach ios ... Możesz użyć warunku dla wersji ios, jak poniższy kod. To działa kod, który zaimplementowałem i działa zarówno na ios 5 jak i 6. Proszę sprawdzić w ios 4, aby potwierdzić. Myślę, że to powinno działać.

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

Musisz uwzględnić trzy frakcje o nazwie social, adSupport i Accounts.Sprawdź, które nie są potrzebne w poście na Twitterze. Hope, to ci pomoże.

Powiązane problemy