使用 Android AccountManager Twitter 凭据创建 Twitter4J AccessToken

Posted

技术标签:

【中文标题】使用 Android AccountManager Twitter 凭据创建 Twitter4J AccessToken【英文标题】:Using Android AccountManager Twitter credentials to create Twitter4J AccessToken 【发布时间】:2012-11-26 03:03:27 【问题描述】:

我正在使用以下代码从 android AccountManager 获取 Twitter 凭据:

AccountManager am = AccountManager.get(this);
Account account = am.getAccountsByType("com.twitter.android.auth.login")[0];
am.invalidateAuthToken("com.twitter.android.auth.login", null);
am.getAuthToken(account, "com.twitter.android.oauth.token", null, this, createCallback(TOKEN), null);
am.getAuthToken(account, "com.twitter.android.oauth.token.secret", null, this, createCallback(TOKEN_SECRET), null);

我正在使用回调返回的值来设置 Twitter4J Twitter 对象:

Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
twitter.setOAuthAccessToken(new AccessToken(token, tokenSecret));
User user = twitter.verifyCredentials();

但是调用verifyCredentials()时会产生如下异常:

Exception connecting to twitter
    Received authentication challenge is null
    Relevant discussions can be found on the Internet at:
    http://www.google.co.jp/search?q=6f0f59ca or
    http://www.google.co.jp/search?q=200bae40
    TwitterExceptionexceptionCode=[6f0f59ca-200bae40 1de2170b-e16a1586], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.2
    at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:192)
    at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61)
    at twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:89)
    at twitter4j.TwitterBaseImpl.fillInIDAndScreenName(TwitterBaseImpl.java:126)
    at twitter4j.TwitterImpl.verifyCredentials(TwitterImpl.java:578)

在请求令牌之前,我尝试在 AccountManager 上调用 invalidateAuthToken,但这没有任何区别。

在将 token 和 tokenSecret 值设置为 Twitter 为我的应用程序提供的值时,我可以成功调用 verifyCredentials,但我需要能够使用当前设备用户的 Twitter 凭据。

是否需要任何其他步骤才能使用从 AccountManager 返回的令牌和令牌秘密值来设置 AccessToken?

这是在运行 Android 2.3.5 的 HTC Evo 上测试的。

【问题讨论】:

注意:我不认为invalidateAuthToken 不传递当前令牌字符串就可以工作。 我也遇到了同样的问题!不知道怎么解决 【参考方案1】:

检查您手机上的时钟/时间是否正确。

问题是推特服务器时间与您的手机时间不匹配。

【讨论】:

我试过了,我可以确认时钟设置正确。如果我传递现有的 token 和 tokenSecret 值,它也可以工作,只是在使用 AccountManager 中的值时不行。【参考方案2】:

我需要能够使用当前设备用户的 twitter 凭据

对不起,这是not possible。

【讨论】:

以上是关于使用 Android AccountManager Twitter 凭据创建 Twitter4J AccessToken的主要内容,如果未能解决你的问题,请参考以下文章

xml 使用Android上的AccountManager进行OAuth流程

如何使用 Android AccountManager 注销

通过 Zend_Gdata 使用来自 android 的 AccountManager.getAuthToken 的结果(401 未授权)

使用 Android AccountManager Twitter 凭据创建 Twitter4J AccessToken

在 Android 上重命名帐户 (AccountManager)

Android AccountManager 账户同步管理简单介绍