2013-05-31 10 views
7

これを実装する方法を理解しようとしている間、私は数日間インターネットに注いできました。iOS Twitter Reverse OAuth

私のアプリケーションのユーザーのツイートを処理するサーバーにこれを渡すために、アクセストークンとシークレットをTwitterから要求する必要があります。

私は、このリンクに従っている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をどのように処理してtwitter文書からステップ2に渡すかを調べようとしています。

また、私はこのここで使用しています:https://github.com/seancook/TWReverseAuthExample

このコードは素晴らしいが、非常に複雑です。どんな助けでも大歓迎です!ありがとう!

答えて

2

トークンとトークンシークレットを持つ辞書を返す単一のメソッド呼び出しでこれを達成するのに役立つクラスです。

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

、これは他の人を役に立てば幸い!

+2

をその動作していない、けれどもで行くかのブロックが、資格値= "ます。<?xml version" = "\" 1.0 \ "encoding = \" UTF-8 \ "?> \ n \ n <エラーコード= \" 101 \ ">逆認証の資格が無効です \ n \ n"; – Abhishek

+0

私のために働いていない、同じエラー –

3

ステップ1にはコードがありません。なぜなら、ステップ1では、サーバー上で、または手作業などでこれを行うと仮定しているからです。基本的には、iOSトークンを通常のトークンに変換するためにアプリケーションが使用する鍵を生成する必要があります。

ここにあなたに要求するスクリプトがあります:http://www.ananseproductions.com/twitter-reverse-auth-headaches/ルビーで書かれているので、あなたはルビーサーバを持っていれば似たようなものを使うことができます。

個人的に私のアプリは私のサーバーからこのトークンをリクエストしてから、Twitterにリクエストして、新しいトークンを自分のサーバーにポストバックします。

2

このコードのhttps://github.com/seancook/TWReverseAuthExampleでは、自分のアプリケーションで実装するのはかなり簡単です。私は再利用可能なクラスを作成することを好むので、同じコードを複数回実装する必要はありません。通常は、シングルトンをいくつか作成し、次のチュートリアルでそれを使用します。しかし、この指導のポイントはシングルトンの作り方を教えることではないので、シンプルさのために、アプリケーション全体から簡単にアクセスできるAppDelegate.h/mを使用します。

あなたがしなければならないのは、以下の通りである。

  1. 開き、あなたとショーン・クックのプロジェクト(URLは上記である1)

  2. ドラッグしてコピーソース - >ベンダー> ABOauthCoreグループプロジェクトに

  3. TWAPIManager.h/mTWSignedRequest.h/mを選択し、プロジェクトにコピー

  4. AppDelegateに以下のコードを追加してください。hファイル

    @property(nonatomic、strong)ACAccountStore * store;

    @property(nonatomic、strong)TWAPIManager * apiManager;

    @property(nonatomic、strong)NSArray * accounts;

    - (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] INIT]。

    _apiManager = [[TWAPIManager alloc] init];

    [[NSNotificationCenter defaultCenter] addObserver:セルフセレクタ:@セレクタ(_refreshTwitterAccounts)名:ACAccountStoreDidChangeNotificationオブジェクト:なし];

  7. 次のコードを使用してオブザーバーを削除することを忘れないでください。 AppDelegate.mでそれを貼り付けます。

    - (無効)にdealloc {

    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    

    }

  8. あなたapp-Info.plistファイルを開いて、2列のキーを追加します。次のコードを追加し、viewDidLoad方法では、Twitterの機能を実装するために使用するビューコントローラでhttps://apps.twitter.com/

    TWITTER_CONSUMER_KEY

    TWITTER_CONSUMER_SECRET

  9. AppDelegateから値を取ります* appDelegate = [UIApplication sharedApplication] .delegate;

    [appDelegate _refreshTwitterAccounts];

  10. OK、最後に、マシン全体を起動する準備が整いました。twitter機能を実装するために使用するView Controllerで、_reverseAuthBtnと呼ばれるUIButtonを作成し、IBActionを作成します。次にIBActionに次のコードを貼り付けます:

    AppDelegate * appDelegate = [UIApplication sharedApplication] .delegate;

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

すごいですね。私が何かを忘れていないなら、あなたはTwitter Reverse Oauthの実装を持っています。複数のView Controllerで使いたいのであれば、ステップ1-8を実行し、ステップ9からコードを貼り付けてくださいおよび10をビューコントローラに追加します。

よろしくお願いいたします。