我目前正在将Twitter集成到我的android应用程序中。我在一定程度上成功地整合了它。但是,No authentication challenges found
在以下情况下我得到了例外。
App-only authentication
(无需登录Twitter)从Twitter获取公共供稿。我成功地获取了它们。注意:如果我不使用App-only authentication
并选择直接登录(无需获取公共供稿),则可以正常使用,并且可以登录。
以下是堆栈跟踪:
11-14 19:33:03.597: W/System.err(3305): No authentication challenges found
11-14 19:33:03.667: W/System.err(3305): Relevant discussions can be found on the Internet at:
11-14 19:33:03.667: W/System.err(3305): http://www.google.co.jp/search?q=9ddbeb3a or
11-14 19:33:03.727: W/System.err(3305): http://www.google.co.jp/search?q=937eec8d
11-14 19:33:03.747: W/System.err(3305): TwitterException{exceptionCode=[9ddbeb3a-937eec8d c8a7b39b-dc5ea0d9], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.4}
11-14 19:33:03.797: W/System.err(3305): at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:177)
11-14 19:33:03.857: W/System.err(3305): at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61)
11-14 19:33:03.897: W/System.err(3305): at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:98)
11-14 19:33:03.957: W/System.err(3305): at twitter4j.auth.OAuthAuthorization.getOAuthAccessToken(OAuthAuthorization.java:145)
11-14 19:33:04.097: W/System.err(3305): at twitter4j.auth.OAuthAuthorization.getOAuthAccessToken(OAuthAuthorization.java:165)
11-14 19:33:04.107: W/System.err(3305): at twitter4j.TwitterBaseImpl.getOAuthAccessToken(TwitterBaseImpl.java:381)
编辑:
以下是我用于根据用户是否登录来切换配置的代码。
private TwitterInstance(boolean withLoginConfig) {
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder
.setOAuthConsumerKey(STAConstants.TWITTER_CONSUMER_KEY);
configurationBuilder
.setOAuthConsumerSecret(STAConstants.TWITTER_CONSUMER_SECRET);
// configuration required to fetch feeds without login.
if (!withLoginConfig) {
configurationBuilder.setUseSSL(true);
// IMPORTANT: set T4J to use App-only authentication
configurationBuilder.setApplicationOnlyAuthEnabled(true);
configurationBuilder.setOAuth2TokenType(getOAuth2Token()
.getTokenType());
configurationBuilder.setOAuth2AccessToken(getOAuth2Token()
.getAccessToken());
}
Configuration configuration = configurationBuilder.build();
twitterFactory = new TwitterFactory(configuration);
twitter = twitterFactory.getInstance();
requestToken = null;
}
我也在SO和其他站点上搜索了解决方案,但没有得到任何解决方案。
任何帮助都将受到高度赞赏。
我做了几件事,最后发现自己回答了我的问题。因此在这里发布。
问题:未找到身份验证挑战
原因:登录后我没有发送信息AccessToken
并AccessTokenSecret
处于配置状态。因此,它没有获取身份验证数据。
解决方案 :
步骤1:我使用App-only authentication
(无需登录Twitter)从Twitter获取公共供稿。我成功地获取了它们。为此,我BearerToken
在配置中使用如下:
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setOAuthConsumerKey(Constants.TWITTER_CONSUMER_KEY);
configurationBuilder.setOAuthConsumerSecret(Constants.TWITTER_CONSUMER_SECRET);
configurationBuilder.setUseSSL(true);
// IMPORTANT: set T4J to use App-only authentication
configurationBuilder.setApplicationOnlyAuthEnabled(true);
configurationBuilder.setOAuth2TokenType(getOAuth2Token().getTokenType());
configurationBuilder.setOAuth2AccessToken(getOAuth2Token().getAccessToken());
步骤2:当我尝试回复或转发或将其标记为收藏时,我检查用户是否已登录,如果尚未登录,则尝试先登录然后进行回复或转发。为此,我使用以下配置。
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setOAuthConsumerKey(Constants.TWITTER_CONSUMER_KEY);
configurationBuilder.setOAuthConsumerSecret(Constants.TWITTER_CONSUMER_SECRET);
这将给我RequestToken
,反过来又给我AccessToken
和AccessTokenSecret
。
步骤3:此后,我对后续请求使用以下配置,没有任何问题。
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setOAuthConsumerKey(Constants.TWITTER_CONSUMER_KEY);
configurationBuilder.setOAuthConsumerSecret(Constants.TWITTER_CONSUMER_SECRET);
configurationBuilder.setOAuthAccessToken(getAccessToken()); // from sharedPreferences
configurationBuilder.setOAuthAccessTokenSecret(getAccessTokenSecret()); // from sharedPreferences
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句