4

これが私のコードです。「認証に失敗しました(サーバーは401で応答しました。これは、コンシューマーキーが正しくなかったか、署名が一致しなかった場合に発生する可能性があります。」この行 'provider.retrieveAccessToken(consumer, verifier);'. コンシューマ キーとシークレットを 3 回チェックし、Twitter アプリケーションをブラウザとして設定し、provider.setOAuth10a(true) を設定しようとしましたが、これで 2 日間苦労しました!! 私は道標 1.2.1.1 (core & commonshttp4) を使用しています。絶望してください

    private static final String CONSUMER_KEY = "MY_CONSUMER_KEY";
    private static final String CONSUMER_SECRET = "MY_CONSUMER_SECRET";

    private static final String CALLBACK_URL = "tweet-mapper://mainactivity";

    private static final String REQUEST_URL = "https://api.twitter.com/oauth/request_token";
    private static final String ACCESS_TOKEN_URL = "https://api.twitter.com/oauth/access_token";
    private static final String AUTH_URL = "https://api.twitter.com/oauth/authorize";

    private static final String PREFERENCE_FILE = "twitter_oauth.prefs";

    private static CommonsHttpOAuthConsumer consumer;
    private static CommonsHttpOAuthProvider provider;

    private static String ACCESS_KEY;
    private static String ACCESS_SECRET;

    private Twitter twitter;


    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        loginViaOAuth();

    }

    private void loginViaOAuth() {
        try {
            consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
            provider.setOAuth10a(true);
            provider = new CommonsHttpOAuthProvider(REQUEST_URL, ACCESS_TOKEN_URL, AUTH_URL);
            String authURL = provider.retrieveRequestToken(consumer, CALLBACK_URL);
            this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authURL)));
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }

    @Override
    protected void onResume() {

        super.onResume();

        Uri uri = this.getIntent().getData();
        if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
            String verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
            Log.d("verifier:", verifier);
            try {

                provider.setOAuth10a(true);
                provider.retrieveAccessToken(consumer, verifier);
                ACCESS_KEY = consumer.getToken();
                ACCESS_SECRET = consumer.getTokenSecret();

                AccessToken a = new AccessToken(ACCESS_KEY, ACCESS_SECRET);

                // initialize Twitter4J
                twitter = new Twitter();
                twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
                twitter.setOAuthAccessToken(a);
                String tweet = "#OAuth working via android app!";

                twitter.updateStatus(tweet);
                Toast.makeText(this, tweet, Toast.LENGTH_LONG).show();

            } catch (Exception e) {
                e.printStackTrace();
                Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }
4

3 に答える 3

1

考えられる解決策を見つけました。Twitter アプリケーション アカウントにコールバック URL を設定する必要があります。

于 2012-03-06T16:06:36.300 に答える
0

API リクエストを確認してください。https: //api.jabbakam.com/network/get_list.jsonまたは http://api.twitter.com/1/account/verify_credentials.xmlのように、.json または .xml でなければなりません。

Twitter API を使用するためのクラスが組み込まれている Scribe ライブラリを使用することをお勧めします。

https://github.com/fernandezpablo85/scribe-java/blob/master/src/test/java/org/scribe/examples/TwitterExample.java

Twitter キーを作成するときに、アクセス レベルを読み取りと書き込みにしましたか?

于 2012-07-24T10:59:35.673 に答える
0

Android アプリケーションでもまったく同じ問題が発生しました。Twitter のログインが完全に機能していたのに、何らかのランダムな理由で署名に失敗し始めたことは、さらに苛立たしいことでした。

多くのテストを実行したところ、OAuth プロセスで使用される Android ブラウザーに問題があることがわかりました。

  • 保存されたログイン/パスワードを使用してログインしている場合、または Twitter セッションに Cookie があり、[同意する] をクリックするだけで、401 エラーで失敗します。
  • パスワードを手動で削除して再入力すると、機能します。

これが API 呼び出しにどのように影響するかはまだ理解できませんが、事前に入力された情報を使用して「同意」フォームを送信すると、ブラウザーで混乱が生じると思います。

私の回避策があなたの問題も解決するかどうか、非常に興味があります。これが適切な解決策ではないことは理解していますが、これは始まりです。

編集: Twitter OAuth URL に https:// の代わりに http:// を使用すると、問題が解決します。私はまだ取り外さず、何が起こっているのか...

于 2011-04-04T13:12:33.177 に答える