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 设置 ANY 值。保留默认的空值会禁用动态回调 url。

我在网上找到的所有教程和所有信息都是无效的。Twitter 早就删除了“客户/网站”单选按钮。

此外,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) 你的推特应用程序是否配置为浏览器? 试试这个键:

消费者密钥

sdOjEI2cOxzTLHMCCMmuQ

消费者秘密

biI3oxIBX2QMzUIVaW1wVAXygbynuS80pqSliSDTc

于 2010-07-26T21:18:33.973 回答
2

在提供程序中使用 https 代替 http

于 2013-03-10T12:52:51.790 回答
1

终于搞定了,看看下面的帖子

android twitter outh教程回调问题

于 2010-07-29T05:28:05.330 回答
1

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

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

享受..

于 2010-09-08T05:25:58.157 回答