请求令牌上的android twitter retrieveRequestToken 401

时间:2010-07-23 05:59:20

标签: android twitter4j

我正在为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是否给了我错误的密钥和秘密?

6 个答案:

答案 0 :(得分:14)

我花了几个小时的时间。似乎您必须在Twitter应用程序开发人员面板的“设置”选项卡中为回调URL设置任何值。保持默认的空值会禁用动态回调网址。

我在网上找到的所有教程和所有信息都是空的。 Twitter长期删除了“客户端/网站”单选按钮。

此外,OAuth会检查时钟偏差。

答案 1 :(得分:8)

答案 2 :(得分: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

答案 3 :(得分:2)

使用https代替提供商中的http

答案 4 :(得分:1)

终于完成了,看看以下帖子

android twitter outh tutorial callback problem

答案 5 :(得分:1)

是的totramon是正确的...如果您只在身份验证问题时遇到问题,则可能需要设置设备时间。我遇到了同样的问题,只用这个解决方案解决了。此外,如果您使用旧的twitter api,则需要将其更改为稳定版api(2.1.4)。您可以从以下链接中找到:

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

享受..