今回はコードで実例を示しつつ解説したいと思います。
TwitterAPIをAndroidで使用するには、signpostのSDKを使用します。
まずは、
signpost-core-1.2.1.1.jar
signpost-commonshttp4-1.2.1.1.jar
をダウンロードし、ビルドパスを通してください。
今回のメインはconsumerとproviderのオブジェクト作成の解説になります。
まずはオブジェクトをprivateで定義しておきます。
private CommonsHttpOAuthConsumer consumer; private OAuthProvider provider;consumerとproviderは使いまわすので、
こんな感じで宣言しておいてください。
次に、onCreateでtokenとtoken_secretが保存されているかを確認しつつ、
無ければTwitterログイン画面をブラウザで開く部分を実装します。
// get old tokens SharedPreferences prefs = getPreferences(MODE_PRIVATE); String token = prefs.getString("token", null); String tokenSecret = prefs.getString("tokenSecret", null); // create oauth consumer and provider consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); if(token != null && tokenSecret != null){ consumer.setTokenWithSecret(token, tokenSecret); }else{ try { provider = new DefaultOAuthProvider( "https://api.twitter.com/oauth/request_token", "https://api.twitter.com/oauth/access_token", "https://api.twitter.com/oauth/authorize"); String authUrl = provider.retrieveRequestToken(consumer,CALLBACKURL); this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl))); } catch (Exception e) { Log.e(TAG, e.getMessage(), e); } }tokenとtokenSecretがあればconsumer作成、無ければINTENTを発行するという部分です。
次に、ログイン後にアプリに戻ってくる部分です。
まずはAndroidManifest.xml
<activity android:label="@string/app_name" android:name=".ActivityMain" <!-- add this here --> android:launchMode="singleInstance" > <!-- add this here --> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="myapp" android:host="callback" /> </intent-filter>こんな感じで足してください。
android:schemeとandroid:hostは
CALLBACKURLで"myapp://callback"と指定しているものと同じものを使ってください。
最後にActivityMain.javaのonNewIntentでIntentを受け取って解析します。
@Override protected void onNewIntent(final Intent intent){ super.onNewIntent(intent); final Uri uri = intent.getData(); // return from Twitter OAuth if(uri != null && uri.toString().startsWith(CALLBACKURL)){ try { String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER); provider.retrieveAccessToken(consumer, verifier); // set prefs SharedPreferences prefs = getPreferences(MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); editor.putString("token", consumer.getToken()); editor.putString("tokenSecret", consumer.getTokenSecret()); editor.commit(); } catch (Exception e) { Log.e(TAG, e.getMessage(), e); Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); } } }
tokenとtoken_secretは保存しておきます。
これで次回からもアクセス可能になります。
次回はconsumerとproviderを使ったAPIアクセスになります。
0 件のコメント:
コメントを投稿