twitter4jのOauth認証後アプリケーションに戻らない

536 views
Skip to first unread message

gami

unread,
Aug 29, 2013, 10:21:50 PM8/29/13
to android-g...@googlegroups.com
お世話になっています。なんどか質問させていただいています。
twitter4jのOauth認証なのですが、Oauth認証画面までいき認証ボタンをおしたあと「この操作を実行できるアプリケーションがありません」とダイアルログがでて、アプリケーションに戻ることができず困っております。

どなたか解決方法をご教授おねがします。

下記ソースコード

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build());

twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(CONSUMER_KEY,CONSUMER_SECRET);
try {
requestToken = twitter.getOAuthRequestToken(CALLBACK_URL);
} catch (TwitterException e) {
finish();
}
String authUrl = requestToken.getAuthorizationURL();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl));
startActivity(intent);
}

@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Uri uri = intent.getData();
if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
String verifier = uri.getQueryParameter("oauth_verifier");
if (verifier != null && verifier.length() > 0) {
saveToken(verifier);
}
}
//Preferencesに書き込み後終了。
finish();
}

private void saveToken(String oauthVerifier) {
try {
AccessToken accessToken = twitter.getOAuthAccessToken(requestToken,
oauthVerifier);
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = pref.edit();
editor.putString(getString(R.string.preference_key_token),
accessToken.getToken());
editor.putString(getString(R.string.preference_key_token_secret),
accessToken.getTokenSecret());
editor.commit();
} catch (TwitterException e) {
e.printStackTrace();
}
}


androidmanifest.xml

<activity android:name=".TwiiterLoginActivity" android:launchMode="singleTask">
    
 <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="test" android:host="twitter" />
</intent-filter>
</activity>

gami

unread,
Aug 29, 2013, 10:48:48 PM8/29/13
to android-g...@googlegroups.com
CALLBACK_URL = "test://twitter";

すいません。CALLBACK_URL は上記になります。

gami

unread,
Aug 30, 2013, 1:00:52 AM8/30/13
to android-g...@googlegroups.com
なんどもすいません。認証は出来ましたが、アプリケーションに戻らず。ブラウザを開きtwiiterのtop画面にいってしまいます。
ですので、onNewIntentが呼ばれなくてこまっています。

On Friday, August 30, 2013 11:21:50 AM UTC+9, gami wrote:

さわださとし

unread,
Aug 30, 2013, 2:31:43 AM8/30/13
to android-g...@googlegroups.com
さわだです。

intent-filter でホスト名は消して、スキーマだけの指定にしたらどうでしょう?
自分のアプリではスキーマだけで動いてます。
callback は、myscheme://callback/ という感じで設定しています。
ブログにもまとめてます。Twitterではなく、GoogleのOAuthですが基本は同じです。
http://d.hatena.ne.jp/satoshis/20130119/p1

あとは、プロジェクトをクリーンしてビルドしなおしてみるとか。
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com
> にメールを送信します。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
さわださとし Twitter: @satoshis
技術的な話題いろいろ http://d.hatena.ne.jp/satoshis/
Wordpress入門の書 http://wordpress.satoshis.com/
簡単!Joomla!でサイトを作ろう http://joomla3.satoshis.com/

gami

unread,
Aug 30, 2013, 3:59:45 AM8/30/13
to android-g...@googlegroups.com
さわださん、ありがとうございます。原因はわかりました。

CALLBACK_URL = "test://twitter"; のhostとschemeの逆・・それといろいろいじっているうちに大文字、アンダーバーを入力していました。
これが原因でした。ご迷惑おかけしました。
しかし、またまた問題がでてきました。認証したあと、アプリケーション戻り、mTwitter.setOAuthAccessTokeをgetしてmTwitter.updateStatus("ほげほげ");とつぶやくとエラーで落ちてしまいます。
   
    if(twitter) {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
String token = pref.getString(getString(R.string.preference_key_token),"");
String tokenSecret = pref.getString(getString(R.string.preference_key_token_secret), "");
// AccesToken情報がプリファレンスに登録されているか
Log.d(TAG, "token::" + token);
Log.d(TAG, "tokenSecret::" + tokenSecret);
if (StringUtils.isNotEmpty(token) && StringUtils.isNotEmpty(tokenSecret)) {
// ある場合は,メイン画面を表示
mTwitter.setOAuthAccessToken(new AccessToken(token, tokenSecret));

tweet = true;//tweetする。
} else {// ない場合は,認証画面へ
startLoginActivity();
Log.d(TAG, "認証画面");
}
    }
   
    if(twitter && tweet) {
    Log.d(TAG, "tweet");
    try {
    mTwitter.updateStatus("ほげほげ");
    }catch (TwitterException e){
    e.printStackTrace();
    }
    //edittext.setText("");
    tweet = false;
    }
    }

下記エラー内容

::android:onClickでのつぶやきエラー
java.lang.IllegalStateException: Could not execute method of the activity

::android.view.View.OnClickListenerでのつぶやきエラー
java.lang.IllegalStateException: Authentication credentials are missing. See http://twitter4j.org/configuration.html forthe detail.

さわださとし

unread,
Aug 30, 2013, 7:30:24 AM8/30/13
to android-g...@googlegroups.com
さわだです。

> さわださん、ありがとうございます。原因はわかりました。

おめでとうございますー!

> 下記エラー内容
>
> ::android:onClickでのつぶやきエラー
> java.lang.IllegalStateException: Could not execute method of the activity
>
> ::android.view.View.OnClickListenerでのつぶやきエラー
> java.lang.IllegalStateException: Authentication credentials are missing. See
> http://twitter4j.org/configuration.html forthe detail.

認証エラーが出てますね。
CONSUMER_KEYとCONSUMER_SECRETの設定を忘れていませんか?
mTwitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
Reply all
Reply to author
Forward
0 new messages