2013-05-31 9 views
7

Przez wiele dni przelewałem się przez internet, próbując dowiedzieć się, jak to zaimplementować.iOS Twitter Reverse OAuth

Muszę zażądać tokenu dostępu i tajnego klucza ze strony Twitter, aby przekazać go serwerowi, który przetworzy tweety użytkowników dla mojej aplikacji.

śledzę ten link https://dev.twitter.com/docs/ios/using-reverse-auth

Problemem jest to krok 1. Oni nie podam przykład z kroku 1.

Oto mój kod:

NSURL *url = [NSURL URLWithString:TW_OAUTH_URL_REQUEST_TOKEN]; 
NSDictionary *parameters = @{TW_X_AUTH_MODE_KEY:TW_X_AUTH_MODE_REVERSE_AUTH}; 

SLRequest *getTwitterAuth = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodGET URL:url parameters:parameters]; 


// Assume that we stored the result of Step 1 into a var 'resultOfStep1' 

NSString *S = resultOfStep1; 
NSDictionary *step2Params = [[NSMutableDictionary alloc] init]; 
[step2Params setValue:@"kfLxMJsk7fqIuy8URhleFg" forKey:@"x_reverse_auth_target"]; 
[step2Params setValue:S forKey:@"x_reverse_auth_parameters"]; 

NSURL *url2 = [NSURL URLWithString:@"https://api.twitter.com/oauth/access_token"]; 
SLRequest *stepTwoRequest = 
[SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:url2 parameters:step2Params]; 

// You *MUST* keep the ACAccountStore alive for as long as you need an ACAccount instance 
// See WWDC 2011 Session 124 for more info. 
self.accountStore = [[ACAccountStore alloc] init]; 

// We only want to receive Twitter accounts 
ACAccountType *twitterType = 
[self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; 

// Obtain the user's permission to access the store 
[self.accountStore requestAccessToAccountsWithType:twitterType 
          withCompletionHandler:^(BOOL granted, NSError *error) { 
    if (!granted) { 
     // handle this scenario gracefully 
    } else { 
     // obtain all the local account instances 
     NSArray *accounts = 
     [self.accountStore accountsWithAccountType:twitterType]; 

     // for simplicity, we will choose the first account returned - in your app, 
     // you should ensure that the user chooses the correct Twitter account 
     // to use with your application. DO NOT FORGET THIS STEP. 
     [stepTwoRequest setAccount:[accounts objectAtIndex:0]]; 

     // execute the request 
     [stepTwoRequest performRequestWithHandler: 
      ^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
       NSString *responseStr = 
       [[NSString alloc] initWithData:responseData 
            encoding:NSUTF8StringEncoding]; 

       // see below for an example response 
       NSLog(@"The user's info for your server:\n%@", responseStr); 
      }]; 
    } 
}]; 

byłem próbuje dowiedzieć się, jak przetworzyć SLRequest w oder, aby przejść do kroku 2 z dokumentacji twitter.

Mam również używane to tutaj: https://github.com/seancook/TWReverseAuthExample

Kod ten jest wielki, ale bardzo skomplikowane. Każda pomoc będzie bardzo ceniona! Dzięki!

Odpowiedz

2

Oto klasa, która może pomóc w osiągnięciu tego celu za pomocą pojedynczego wywołania metody, które zwraca słownik z tokenem i tajnym kluczem tokenu.

https://github.com/kbegeman/Twitter-Reverse-Auth

Nadzieja to pomaga innym się!

+2

jej nie działa, chociaż dzieje się, jeśli blok ale o wartości poświadczeń = " \ n \ n Odwrotne poświadczenia uwierzytelniające są nieprawidłowe \ n \ n"; – Abhishek

+0

Nie działa też dla mnie, ten sam błąd –

3

Powodem, dla którego nie ma żadnego kodu, jest założenie, że zrobisz to na swoim serwerze lub przed ręką lub coś podobnego. Zasadniczo musisz wygenerować klucz, którego Twoja aplikacja użyje do konwersji tokenów systemu iOS na zwykłe tokeny.

Istnieje skrypt, który sprawi, że twoja prośba tutaj: http://www.ananseproductions.com/twitter-reverse-auth-headaches/ Jest napisane w rubinie, więc możesz użyć czegoś podobnego, jeśli masz serwer ruby.

Osobiście chciałbym, aby moja aplikacja zażądała tego tokena z mojego serwera, następnie wysłanie żądania do Twittera, a następnie wysłanie nowego tokena na mój serwer.

2

Zgodnie z tym kodem https://github.com/seancook/TWReverseAuthExample jest to dość łatwe do wdrożenia we własnej aplikacji. Wolę tworzyć klasy wielokrotnego użytku, więc nie muszę wielokrotnie wdrażać tego samego kodu. Normalnie utworzysz singleton i będziesz z nim pracował w następnym samouczku. Jednak celem tej instrukcji nie jest nauczenie cię tworzenia singletonów, więc dla uproszczenia użyjemy AppDelegate.h/m, który jest łatwo dostępny z całej aplikacji.

Wszystko co musisz zrobić to:

  1. Otwórz twoje i projekt Sean kucharska (ten, który jest powyżej URL)

  2. Przeciągnij i skopiuj source-> udostępnionej przez dostawcę> ABOauthCore grupie do projektu

  3. Wybierz TWAPIManager.h/m, TWSignedRequest.h/m i skopiować je do projektu

  4. Dodaj poniższy kod do AppDelegate.h plik

    @property (nonatomowy, silny) ACAccountStore * sklep;

    @property (nonatomic, strong) TWAPIManager * apiManager;

    @property (nonatomowy, silny) NSArray * kont;

    - (void) storeAccountWithAccessToken: (NSString *) token secret: (NSString *) secret;

    - (void) performReverseAuth: (id) nadawca inView: (UIView *) viewToDisplaySheet;

    - (void) _refreshTwitterAccounts;

  5. Teraz wklej następujące metody do pliku AppDelegate.m

    - (void) actionSheet: (UIActionSheet *) actionSheet clickedButtonAtIndex: (NSInteger) buttonIndex;

    - (void) _refreshTwitterAccounts;

    - (void) _obtainAccessToAccountsWithBlock: (void (^) (BOOL)) blok;

    - (void) performReverseAuth: (id) nadawca inView: (UIView *) viewToDisplaySheet;

  6. W jakiś sposób inicjalizacji pliku, lub jak w tym przykładzie w: `aplikacji: didFinishLaunchingWithOptions' wklej następujący kod:

    _store = [[ACAccountStore alloc] startowych];

    _apiManager = [[TWAPIManager alloc] init];

    [[NSNotificationCenter defaultCenter] addObserver: selektor własny: @selector (_refreshTwitterAccounts) nazwa: ACAccountStoreDidChangeNotification obiekt: nil];

  7. Pamiętaj, aby usunąć obserwującego za pomocą następującego kodu. Wkleić go w AppDelegate.m:

    - (void) {dealloc

    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    

    }

  8. otworzyć plik app-Info.plist i dodać 2 klucze ciągów. Zabierz swoje wartości od: https://apps.twitter.com/

    TWITTER_CONSUMER_KEY

    TWITTER_CONSUMER_SECRET

  9. w widoku kontrolera, który chcesz użyć, aby realizować funkcje twitter w sposobie viewDidLoad dodaj następujący kod:

    AppDelegate * appDelegate = [UIApplication sharedApplication] .delegate;

    [appDelegate _refreshTwitterAccounts];

  10. OK, w końcu jesteś gotowy do uruchomienia całej maszyny.W kontrolerze View, którego chcesz użyć do zaimplementowania funkcji Twittera, utwórz UIButton o nazwie _reverseAuthBtn i utwórz do niego IBAction. Następnie w swoim IBAction wklej następujący kod:

    AppDelegate * appDelegate = [UIApplication sharedApplication] .delegate;

    [appDelegate performReverseAuth: sender inView: self.view];

Uff, chyba to wszystko! Jeśli nie zapomniałem o niczym, masz implementację odwrotnego Oautha na Twitterze, a jeśli chcesz go używać w wielu kontrolerach widoku, musisz tylko wykonać kroki 1-8, a następnie wkleić kod z kroków 9 i 10 do kontrolera widoku.

Pozdrawiam!