今回はコードで実例を示しつつ解説したいと思います。
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 件のコメント:
コメントを投稿