Не удалось подключиться к твиттеру
В 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)
код подключения twitter.
http://www.androidhive.info/2012/09/android-twitter-oauth-connect-tutorial/, это разработка
Ответы
Ответ 1
Насколько я знаю, ничего не изменилось с реализацией OAuth, которая могла бы вызвать это, однако, после того, как вы проверили подлинность с использованием OAuth, если бы вы использовали запросы без SSL для данных, это, возможно, работало ранее, но не было бы сейчас. Twitter внес изменения ограничение доступа только к соединениям SSL/TLS 14 января 2014 года.
Где-то в вашем Java-коде будет URL-адрес, который используется для извлечения данных с серверов Twitter. Я предлагаю вам выполнить поиск/замену через ваш код, где для любых вхождений http://api.twitter.com/
вы заменяете их на https://api.twitter.com/
, и это может, надеюсь, решить эту проблему. Возможно, есть другие проблемы, которые могут возникнуть после этого, но по крайней мере это ваш первый шаг.
Указав https
, вы убедитесь, что используете протокол SSL, чтобы обеспечить безопасность данных во время передачи между вашим приложением и Twitter.
Если вам нужна дополнительная информация для дополнительной проверки и проверки SSL-сертификата в коде для дополнительной безопасности, прочитайте Подключение к API Twitter через SSL на веб-сайте документации разработчиков Twitter.
Изменить. Чтобы уточнить, чтобы получить это сообщение об ошибке, вы должны успешно пройти аутентификацию с помощью OAuth через URL-адрес SSL, но затем вернулись к URL-адресу без SSL для последующих запросов данных.
Ответ 2
Если вы используете 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;
Ответ 3
У меня была такая же ошибка и обновление до последней версии twitter4j 3.0.5, исправлена проблема.
Получите последние данные http://twitter4j.org/en/index.html#download
Я должен упомянуть, что версия я была запущена twitter4j 3.0.3. переход к версии 3.0.5 или 3.0.6 исправил проблему для меня.