使用Android AccountManager Twitter凭据创建Twitter4J AccessToken

5

我正在使用以下代码从Android账户管理器获取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
    TwitterException{exceptionCode=[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返回的token和token secret值设置AccessToken是否需要其他步骤?

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


一个注意事项:我认为invalidateAuthToken函数在没有传递当前令牌字符串的情况下是无法工作的。 - devnate
我也遇到了同样的问题!不知道该如何解决它。 - Ajith M A
2个回答

0

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

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


我已经尝试过了,我可以确认时钟已正确设置。如果我传递现有的token和tokenSecret值,它也可以工作,但是当使用AccountManager中的这些值时却不行。 - Andy Swan

0
我需要能够使用当前设备用户的 Twitter 凭据。
抱歉,这是不可能的

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接