登录 Twitter 失败

3

当我在我的Android应用程序中使用Twitter登录时,遇到了一些问题。错误日志如下:

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)

顺便说一下,我已经在我的Twitter设置页面中设置了回调URL。

你能帮我解决这个问题吗?非常感谢。

我使用自定义按钮实现了我的功能。以下是一些代码:

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;
}

请添加您的代码。 - Alexey Subach
我添加了我的代码,请帮我看看~ - Leo Han
5个回答

5

在您的 Twitter 开发者帐户设置中填写“回调URL”字段。


我已经在我的 Twitter 设置页面中设置了回调 URL。但它没有起作用。 - Leo Han

1

https://dev59.com/LlwX5IYBdhLWcg3w6jEE#41756828

我有同样的问题并解决了。在我的情况下,我需要在 Twitter 开发者帐户中设置回调 URL。
Twitter 开发者帐户->设置->回调 URL(设置任何有效的 URL,例如www.google.com)。

1
请将 TWITTER_KEY 替换为 fabric 提供的 CONSUMER KEY (API KEY),将 TWITTER_SECRET 替换为 CONSUMER Secret (API KEY)。
TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET); 替换为 TwitterAuthConfig authConfig = new TwitterAuthConfig("在此处插入 Consumer key(CONSUMER KEY (API KEY)) ", "在此处插入 consumer secret key(CONSUMER Secret (API KEY))"); 请参考 快速提示:使用 Twitter 和 Fabric 进行身份验证 获取详细的操作步骤。

0

感谢您的回答,我使用自定义按钮来实现我的功能。以下是一些代码: - Leo Han

0

遇到了同样的问题,唯一有效的方法是在build.Gradle中进行如下更改:

implementation 'com.twitter.sdk.android:twitter-core:3.1.1'

使用了最新版本的twitter-core,但仍然无法正常工作。


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