在Android中,
Twitter连接失败。需要SSL吗?
我的代码运行正常,目前是一个实时应用程序。但是,自2014年以来它一直没有运作,我听说Twitter已经应用了https或使用SSL概念。
帮我解决了这个问题。
这是我的日志。
03-14 15:00:02.838: D/TwitterApp(697): Error getting access token
03-14 15:00:02.878: W/System.err(697): 403:The request is understood, but it has been refused. An accompanying error message will explain why. This code is used when requests are being denied due to update limits (https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following).
03-14 15:00:02.878: W/System.err(697): message - SSL is required
03-14 15:00:02.878: W/System.err(697): code - 92
03-14 15:00:02.878: W/System.err(697): Relevant discussions can be found on the Internet at:
03-14 15:00:02.878: W/System.err(697): http://www.google.co.jp/search?q=6f0f59ca or
03-14 15:00:02.888: W/System.err(697): http://www.google.co.jp/search?q=20d0f73f
03-14 15:00:02.888: W/System.err(697): TwitterException{exceptionCode=[6f0f59ca-20d0f73f], statusCode=403, message=SSL is required, code=92, retryAfter=-1, rateLimitStatus=RateLimitStatusJSONImpl{remaining=14, limit=15, resetTimeInSeconds=1394790328, secondsUntilReset=-18874}, version=3.0.3}
03-14 15:00:02.888: W/System.err(697): at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:177)
03-14 15:00:02.888: W/System.err(697): at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61)
03-14 15:00:02.888: W/System.err(697): at twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:89)
03-14 15:00:02.888: W/System.err(697): at twitter4j.TwitterBaseImpl.fillInIDAndScreenName(TwitterBaseImpl.java:126)
03-14 15:00:02.888: W/System.err(697): at twitter4j.TwitterImpl.verifyCredentials(TwitterImpl.java:592)
03-14 15:00:02.908: W/System.err(697): at com.twitter.android.TwitterApp$3.run(TwitterApp.java:150)
推特连接代码。 http://www.androidhive.info/2012/09/android-twitter-oauth-connect-tutorial/这是一个发展
答案 0 :(得分:5)
据我所知,OAuth实现可能会导致这种情况没有太大变化,但是,在使用OAuth进行身份验证之后,如果您之前使用非SSL请求数据,这可能以前有效,但现在不行。 Twitter在2014年1月14日引入了变更restricting access to SSL/TLS connections only。
在Java代码的某处,将会有用于从Twitter服务器检索数据的URL。我建议您通过代码进行搜索/替换,对于http://api.twitter.com/
出现https://api.twitter.com/
的任何情况,您可以用https
替换它们,这可能有望解决此问题。可能之后可能会出现其他问题,但至少这是您迈出的第一步。
通过指定{{1}},这可确保您使用SSL协议,以确保在您的应用程序和Twitter之间传输时数据保持安全。
如果您需要更多信息以选择性地验证和验证代码中的SSL证书以获得更高的安全性,请阅读Twitter开发人员文档网站上的Connecting to Twitter API via SSL。
编辑:为了进一步澄清,为了收到此错误消息,您必须已通过SSL URL使用OAuth成功进行身份验证,但之后还原为非SSL网址以进行后续数据请求
答案 1 :(得分:1)
如果您使用的是sign-post + Twitter4j,则可以按如下方式定义OAuth提供商:
private DefaultOAuthConsumer mOAuthConsumer = null;
private DefaultOAuthProvider httpOauthprovider = new DefaultOAuthProvider("https://api.twitter.com/oauth/request_token",
"https://api.twitter.com/oauth/access_token",
"https://api.twitter.com/oauth/authorize");
然后执行用户身份验证:
private void getTwitterAuthorisation() {
if (backend.hasNetworkConnection(this, true)) {
new Thread(new Runnable() {
public void run() {
try {
mOAuthConsumer = newOAuthConsumer();
String authUrl = httpOauthprovider.retrieveRequestToken(mOAuthConsumer, CALLBACK);
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
} catch (Exception e) {
Log.e(TAG, "getTwitterAuthorisation()", e);
}
}
}).start();
}
}
然后获得令牌:
TwitterCredentials creds = null;
try {
httpOauthprovider.retrieveAccessToken(mOAuthConsumer, verifier);
final String token = mOAuthConsumer.getToken();
final String secret = mOAuthConsumer.getTokenSecret();
final AccessToken accessToken = new AccessToken(token, secret);
final Twitter twitter = TwitterFactory.getSingleton();
twitter.setOAuthConsumer(mOAuthConsumer.getConsumerKey(), mOAuthConsumer.getConsumerSecret());
twitter.setOAuthAccessToken(accessToken);
final long twitterId = twitter.getId();
final String twitterScreenName = twitter.getScreenName();
creds = new TwitterCredentials();
creds.oauthToken = token;
creds.oauthSecret = secret;
creds.twitterId = twitterId;
creds.screenName = twitterScreenName;
} catch (Exception e) {
Log.e(TAG, "doTwitterConnect", e);
}
return creds;
答案 2 :(得分:1)
我遇到同样的错误并升级到最新版本的twitter4j 3.0.5,解决了这个问题。
在此处获取最新信息http://twitter4j.org/en/index.html#download
我应该提到我运行的版本是twitter4j 3.0.3。转到版本3.0.5或3.0.6为我解决了这个问题。