You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用twitter4j 4.0.7实现Twitter登录后跳转回登录页,setupTimeline未执行

问题根因及修复方案
  • token持久化逻辑缺失
    你现有代码仅在onCreate中判断SharedPreferences里的user_token存在时才执行setupTimeline(),但Twitter OAuth授权成功后,你没有将获取到的access token写入到对应存储位置,因此登录完成跳转回Activity时,token判空始终为真,只会重复渲染登录页面。
  • 回调处理逻辑缺失
    你仅实现了请求OAuth request token的逻辑,没有处理授权完成后的回调数据,也没有用回调返回的oauth_verifier参数交换正式的access token,自然没有可读取的有效token。你需要补充以下逻辑:
    1. 首先在AndroidManifest.xml中为当前Activity配置intent-filter,保证和你传入getOAuthRequestToken的TWIT_URL回调地址完全匹配,才能接收到授权回调:
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="你的TWIT_URL对应的scheme" android:host="你的TWIT_URL对应的host" />
        </intent-filter>
    </activity>
    
    1. 在Activity中补充回调处理逻辑,获取access token并存入本地存储:
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if (intent == null || intent.getData() == null || !intent.getData().toString().startsWith(TWIT_URL)) {
            return;
        }
        String verifier = intent.getData().getQueryParameter("oauth_verifier");
        new Thread(() -> {
            try {
                AccessToken accessToken = tweetzTwitter.getOAuthAccessToken(tweetzRequestToken, verifier);
                // 写入token到本地存储
                SharedPreferences.Editor editor = tweetzPrefs.edit();
                editor.putString("user_token", accessToken.getToken());
                editor.putString("user_secret", accessToken.getTokenSecret());
                editor.apply();
                // 切主线程执行初始化逻辑
                runOnUiThread(this::setupTimeline);
            } catch (TwitterException e) {
                e.printStackTrace();
            }
        }).start();
    }
    
  • 注意项

你当前在子线程中请求requestToken,需要确保用户点击登录按钮时tweetzRequestToken已经初始化完成,否则后续交换access token会失败,可在登录点击事件中增加判空逻辑,未拿到requestToken时提示用户稍后重试。
另外需要确认你的Twitter开发者后台应用已开启OAuth 1.0a权限,且配置的回调地址和代码中的TWIT_URL完全一致,否则会导致授权失败。

内容的提问来源于stack exchange,提问作者Nesrene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:39:02