13

twitter oauth用に以下のサンプルアプリを試しています。

http://www.androidsdkforum.com/android-sdk-development/3-oauth-twitter.html

private void askOAuth() {
        try {
            consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
            provider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token",
                                                "http://twitter.com/oauth/access_token",
                                                "http://twitter.com/oauth/authorize");
            String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
            Toast.makeText(this, "Please authorize this app!", Toast.LENGTH_LONG).show();
            this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
        } catch (Exception e) {
            Log.e(APP, e.getMessage());
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }

次のコードを実行すると、次のように例外が発生します

「oauth.signpost.exception.OAuthNotAuthorizedException: 認証に失敗しました (サーバーは 401 で応答しました。これは、コンシューマ キーが正しくないか、署名が一致しなかった場合に発生する可能性があります。」

この行で String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);

正しい「キー」と「シークレット」を提供しましたが、Twitter は間違ったキーとシークレットを提供していますか?

4

6 に答える 6

14

私はこれに数時間を費やしました。Twitter アプリケーション開発者パネルの [設定] タブで、コールバック URL に任意の値を設定する必要があるようです。デフォルトの空の値を保持すると、動的コールバック URL が無効になります。

オンラインで見つけたすべてのチュートリアルとすべての情報は無効です。Twitter は長い間 "Client / Website" ラジオ ボタンを削除しました。

さらに、OAuth はクロック スキューをチェックします。

于 2012-05-24T11:37:14.253 に答える
8

私はちょうど同じ問題を抱えていました。私の開発用電話にのみ表示されましたが、エミュレーターと別の電話ではコードが正常に機能しました。関連する質問に対していくつかの解決策を試してみましたが、うまくいきませんでしたが、最終的には、SIM カードが入っていない開発用電話で時刻と日付を設定していないことがわかりました。これにより、SSL 証明書が無効になり、OAuth 要求が失敗するだけでなく、HTTPS を使用する他のすべてのものが発生しました。時間を設定した後、問題はなくなりました。

于 2010-07-26T09:37:52.777 に答える
4

**1) **日付と時刻を正しい値に設定すると、この問題を解決するのに役立ちます。****

2)

private OAuthConsumer consumer;
private OAuthProvider provider;
...
...
...
provider = new CommonsHttpOAuthProvider (
                TWITTER_REQUEST_TOKEN_URL, 
                TWITTER_ACCESS_TOKEN_URL,
                TWITTER_AUTHORIZE_URL);

private void askOAuth() {
        try {
            consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
            provider = new CommonsHttpOAuthProvider("http://twitter.com/oauth/request_token",
                                                "http://twitter.com/oauth/access_token",
                                                "http://twitter.com/oauth/authorize");

            provider.setOAuth10a(true);

            String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
            Toast.makeText(this, "Please authorize this app!", Toast.LENGTH_LONG).show();
            this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
        } catch (Exception e) {
            Log.e(APP, e.getMessage());
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }

3) Twitter アプリはブラウザとして構成されていますか? このキーで試してください:

コンシューマ キー

sdOjEI2cOxzTLHMCCMmuQ

消費者の秘密

biI3oxIBX2QMzUIVaW1wVAXygbynuS80pqSliSDTc

于 2010-07-26T21:18:33.973 に答える
2

プロバイダーで http の代わりに https を使用する

于 2013-03-10T12:52:51.790 に答える
1

はい、totramon は正しいです...認証の問題でのみ問題が発生している場合は、デバイスの時刻を設定する必要がある場合があります。私は同じ問題に直面していて、この解決策だけで解決しました。また、古い twitter api を使用している場合は、安定版の api(2.1.4) に変更する必要があります。次のリンクから見つけることができます。

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

楽しみ..

于 2010-09-08T05:25:58.157 に答える
1

最後に、次の投稿をチェックしてください

android twitter outh チュートリアル コールバックの問題

于 2010-07-29T05:28:05.330 に答える