Hatena::ブログ(Diary)

メモ書き

2011-10-14

【Android】OAuth認証の仕方でハマる

androidアプリにて、Twitterクライアントを作るために

OAuth認証をする必要があった。

つまづいた所もあるので、メモ。

動作環境

motorola Xoom

Android 3.1


http://www.socym.co.jp/book/4883377571.html

ここからサンプルコードをいただく

Twitter クライアントアプリがある

https://dev.twitter.com/

Twitterにてアプリケーションの登録を行う

⇒登録内容

Name: OAuthSampleInterpia

Description: OAuth sample

WebSite:http://www.interpia.ne.jp/

Application type

Access: Read and Write

Callback URL: http://www.interpia.ne.jp/

ライブラリーの用意

(oauth-singpost)

http://code.google.com/p/oauth-signpost/

⇒singpost-commonshttp4-1.2.1.1.jar

singpost-core-1.2.1.1.jar

(twitter4j)

http://twitter4j.org/ja/index.html

⇒twitter4j-async-android-2.2.4.jar

twitter4j-core-android-2.2.4.jar

twitter4j-media-android-2.2.4.jar

twitter4j-stream-android-2.2.4.jar

それぞれ、ライブラリーに登録を行う。

ここから先は、サンプルコードの変更点のみ

OAuth認証のコード

private void doOAuth(String url){

try{

consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);

provider = new CommonsHttpOAuthProvider(

"https://api.twitter.com/oauth/request_token",

"https://api.twitter.com/oauth/access_token",

"https://api.twitter.com/oauth/authorize");

provider.setOAuth10a(true);

//トークンの読込

SharedPreferences pref = getSharedPreferences("token", MODE_PRIVATE);

String token = pref.getString("token", "");

String tokenSecret= pref.getString("tokenSecret", "");

//認証済み

if (token.length()>0 && tokenSecret.length()>0){

Toast.makeText(this, "OK", Toast.LENGTH_LONG).show();

tweet("a");

}

else{

String authUrl = provider.retrieveRequestToken(consumer,CALLBACK_URL);

this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));

}

}catch(Exception e){

Log.e(TAG, e.getMessage());

Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();

}

}

⇒ここではまったのが、

 String authUrl = provider.retrieveRequestToken(consumer,CALLBACK_URL);

の部分

Communication with the service provider failed: null

もしくは

Communication with the service provider failed: https://api.twitter.com/oauth/request_token

,両豺腓蓮httpsへのアクセス自体せずに返ってくるのだが

これは、

Manifest

<uses-sdk android:minSdkVersion="12" />

<uses-sdk android:minSdkVersion="9" />

に修正したら通るようになった・・・。

Android2系と3系の違い・・・?

正直よくわからない(汗

△両豺腓蓮CALLBACK_URLの設定がおかしかったようだ。

Twitter側へのアプリ登録設定(CALLBACK)と

アプリケーション側の設定がおかしいと失敗してしまう。

manifestの設定

<intent-filter>

android:scheme="myapp" android:host="mytwitt"></data>

</intent-filter>

CODEの設定

private final String CALLBACK_URL="myapp://mytwitt";

これをきちんとあわせておいて、

なおかつ、

https://dev.twitter.com/

でのCallback URLへきちんと登録しないとダメみたいだ。

Callback URL: http://www.sample.com/

これでアプリケーションを動作させると

1.OAuth認証用のブラウザが立ち上がる

2.ブラウザで認証登録を行う

3.アプリケーションに戻ってくる

あとはTwitterにつぶやきたい文字列

送るだけでメッセージは飛ぶ。


参考ページ

http://garlicg.blog92.fc2.com/blog-entry-2.html

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/tetsu831/20111014/1318556527