Ошибка входа в Twitter
Когда я захожу через твиттер в моем приложении для Android, у меня возникает вопрос. Журнал ошибок выглядит следующим образом:
09-05 15:38:48.492 22119-22119/sg.com.conversant.swiftlive E/Twitter: Failed to get request token com.twitter.sdk.android.core.TwitterApiException: HTTP request failed, Status: 401
at com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5118)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
at dalvik.system.NativeStart.main(Native Method)
09-05 15:38:48.552 22119-22119/sg.com.conversant.swiftlive E/Twitter: Authorization completed with an error com.twitter.sdk.android.core.TwitterAuthException: Failed to get request token
at com.twitter.sdk.android.core.identity.OAuthController$1.failure(OAuthController.java:95)
at com.twitter.sdk.android.core.internal.oauth.OAuth1aService$1.failure(OAuth1aService.java:194)
at com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5118)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
at dalvik.system.NativeStart.main(Native Method)
09-05 15:38:48.552 22119-22119/sg.com.conversant.swiftlive D/TwitterKit: Login with Twitter failure com.twitter.sdk.android.core.TwitterAuthException: Failed to get request token
at com.twitter.sdk.android.core.identity.OAuthController$1.failure(OAuthController.java:95)
at com.twitter.sdk.android.core.internal.oauth.OAuth1aService$1.failure(OAuth1aService.java:194)
at com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5118)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
at dalvik.system.NativeStart.main(Native Method)
Кстати, я уже установил URL обратного вызова на своей странице настроек Twitter.
Можете ли вы помочь мне решить эту проблему? Большое спасибо.
я использовал пользовательскую кнопку для реализации моей функции. Некоторый код выглядит следующим образом:
private static final String TWITTER_KEY = "*******************";
private static final String TWITTER_SECRET = "*************";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric.with(this, new Twitter(authConfig));
ButterKnife.inject(this);
setCallback(new com.twitter.sdk.android.core.Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
AccountService ac = Twitter.getApiClient(result.data).getAccountService();
Call<User> call = ac.verifyCredentials(true,true);
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
User user = response.body();
user_id = Long.toString(user.id);
nickName = user.name;
avatar = user.profileImageUrl ;
if (user_id != null) {
System.out.println(user_id+":"+nickName+":"+avatar);
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
}
});
}
@Override
public void failure(TwitterException exception) {
Log.d("TwitterKit", "Login with Twitter failure", exception);
}
});
}
View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
case R.id.login_twitter_btn:
getTwitterAuthClient().authorize(activity, callback);
break;
}
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == getTwitterAuthClient().getRequestCode()) {
getTwitterAuthClient().onActivityResult(requestCode,resultCode, data);
}
}
public void setCallback(com.twitter.sdk.android.core.Callback<TwitterSession> callback) {
if (callback == null) {
throw new IllegalArgumentException("Callback cannot be null");
}
this.callback = callback;
}
TwitterAuthClient getTwitterAuthClient() {
if (authClient == null) {
synchronized (LoginActivity.class) {
if (authClient == null) {
authClient = new TwitterAuthClient();
}
}
}
return authClient;
}
4 ответа
Заполните поле "URL обратного вызова" в вашей учетной записи разработчика настроек Twitter.
У меня такая же проблема и решена. В моем случае мне нужно установить URL обратного вызова в учетной записи Twitter Dev.
Twitter dev account-> setting-> callBack url (установите любой действительный URL-адрес, например www.google.com)
Замените ваш TWITTER_KEY на CONSUMER KEY (API KEY), предоставляемый фабрикой, а TWITTER_SECRET на CONSUMER Secret (API KEY).
замещать TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
с TwitterAuthConfig authConfig = new TwitterAuthConfig("Insert Consumer key here(CONSUMER KEY (API KEY)) ",Insert consumer secret key here(CONSUMER Secret (API KEY)));
Обратитесь к Quick Tip: Аутентификация с Twitter и Fabric для получения подробных инструкций.
Возникла та же проблема, единственное, что сработало, это перейти на это в build.Gradle:
implementation 'com.twitter.sdk.android:twitter-core:3.1.1'
Использовал последнюю версию твиттер-ядра, и это не сработало.
Вам необходимо правильно его настроить. Пожалуйста, поделитесь некоторыми кодами, чтобы я мог помочь.
Попробуйте следовать указаниям здесь.
https://github.com/codepath/android-rest-client-template/blob/master/README.md