2013-05-31 5 views
7

Я уже много дней наливаю через интернет, пытаясь понять, как это реализовать.iOS Twitter Reverse OAuth

Мне нужно запросить токен доступа и секрет из твиттера, чтобы передать это серверу, который обработает пользовательские твиты для моего приложения.

Я по этой ссылке https://dev.twitter.com/docs/ios/using-reverse-auth

Проблема заключается шаг 1. Они не дают вам пример шага 1.

Вот мой код:

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

Я был пытаясь понять, как я обрабатываю SLRequest в другом, чтобы передать его на шаг 2 из документов Twitter.

Я также использовал это здесь: https://github.com/seancook/TWReverseAuthExample

Этот код является большим, но очень сложно. Любая помощь будет принята с благодарностью! Благодаря!

ответ

2

Вот этот класс, который поможет выполнить это с помощью одного вызова метода, который возвращает словарь с секретом токена и токена.

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

Надеется, что это помогает другим из!

+2

ее не работает, хотя происходит, если блок, но с учетными данными значением = " \ n \ n <код ошибки = \" 101 \ "> Неверные аутентификационные данные недействительны \ n \ n"; – Abhishek

+0

Не работает для меня тоже, такая же ошибка –

3

Причина, по которой в первом шаге нет кода, предполагается, что вы сделаете это на своем сервере или перед рукой или что-то в этом роде. В основном вам нужно сгенерировать ключ, который ваше приложение будет использовать для преобразования токенов iOS в обычные токены.

Существует сценарий, который сделает запрос для вас здесь: http://www.ananseproductions.com/twitter-reverse-auth-headaches/ Его написано в рубине, чтобы вы могли использовать что-то подобное, если у вас есть рубиновый сервер.

Лично я хотел бы, чтобы мое приложение запросило этот токен с моего сервера, затем сделайте запрос в твиттер, а затем вывешиваем новый токен обратно на мой сервер.

2

Начиная с этого кода https://github.com/seancook/TWReverseAuthExample, его довольно просто реализовать в вашем собственном приложении. Я предпочитаю создавать классы повторного использования, поэтому мне не нужно реализовывать один и тот же код несколько раз. Обычно вы создаете один синглтон и работаете с ним в следующем учебнике. Однако точка этой инструкции заключается не в том, чтобы научить вас создавать одиночные игры, поэтому для простоты мы будем использовать AppDelegate.h/m, который легко доступен из всего приложения.

Все, что вам нужно сделать, это следующее:

  1. Открыть ваш и проект Шона Кука (тот, который URL выше)

  2. Перетащите и копировать Source-> от поставщика> ABOauthCore группы в проект

  3. Выберите TWAPIManager.h/m, TWSignedRequest.h/m и скопировать их в свой проект

  4. Добавьте приведенный ниже код в свой AppDelegate.ч файл

    @property (неатомный, сильный) ACAccountStore * магазин;

    @property (неатомный, сильный) TWAPIManager * apiManager;

    @property (неатомный, сильный) NSArray * счета;

    - (void) storeAccountWithAccessToken: (NSString *) токен секрет: (NSString *) секрет;

    - (void) performReverseAuth: (id) отправитель inView: (UIView *) viewToDisplaySheet;

    - (void) _refreshTwitterAccounts;

  5. Теперь вставьте следующие методы в файле AppDelegate.m

    - (Недействительными) actionSheet: (UIActionSheet *) actionSheet clickedButtonAtIndex: (NSInteger) buttonIndex;

    - (void) _refreshTwitterAccounts;

    - (void) _obtainAccessToAccountsWithBlock: (void (^) (BOOL)) блок;

    - (void) performReverseAuth: (id) отправитель inView: (UIView *) viewToDisplaySheet;

  6. В некоторых метод инициализации вашего файла, или, как в данном примере в: `приложения: didFinishLaunchingWithOptions' вставьте следующий код:

    _store = [[ACAccountStore Alloc] инициализации];

    _apiManager = [[TWAPIManager alloc] init];

    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector (_refreshTwitterAccounts) имя: ACAccountStoreDidChangeNotification object: nil];

  7. Не забывайте снимать наблюдателя, используя следующий код. Вставьте его в AppDelegate.m:

    - (Недействительными) dealloc {

    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    

    }

  8. Открыть файл app-Info.plist и добавить 2 строковые ключи. Возьмите их значения: https://apps.twitter.com/

    TWITTER_CONSUMER_KEY

    TWITTER_CONSUMER_SECRET

  9. В View Controller, который вы хотите использовать для реализации функции щебета в методе viewDidLoad, добавьте следующий код:

    AppDelegate * appDelegate = [UIApplication sharedApplication] .delegate;

    [appDelegate _refreshTwitterAccounts];

  10. ОК, наконец, вы готовы запустить всю машину.В View Controller, который вы хотите использовать для реализации функций Twitter, создайте UIButton под названием _reverseAuthBtn и создайте для него IBAction. Затем в вашем IBAction вставьте следующий код:

    AppDelegate * appDelegate = [UIApplication sharedApplication] .delegate;

    [appDelegate performReverseAuth: отправитель inView: self.view];

Ну, я думаю, что все! Если я ничего не забыл, у вас есть реализация Twitter Reverse Oauth, и если вы хотите использовать ее в нескольких контроллерах просмотра, все, что вам нужно сделать, это выполнить шаги 1-8, а затем вставить код из шагов 9 и 10 в ваш контроллер.

С уважением!