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

借助Twitter Kit 3.1.1在安卓应用中实现Twitter账号登录的问题求助

安卓Twitter登录功能实现修复方案

1 前置配置检查(必填,否则必然连接失败)

  • 首先确认Twitter开发者后台对应应用的回调地址配置正确,安卓端回调格式为twittersdk://<你的API_KEY>,必须和后台配置完全一致
  • 必须在开发者后台「Permissions and features」板块申请用户邮箱权限,提交用途说明通过审核后才可获取用户邮箱信息
  • 在项目res/values/strings.xml中配置官方要求的密钥字段:
<string name="com.twitter.sdk.android.CONSUMER_KEY">替换为你的API Key</string>
<string name="com.twitter.sdk.android.CONSUMER_SECRET">替换为你的API Secret</string>
  • 在AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />

2 现有代码问题修正

你当前代码漏了setContentView加载布局逻辑,会导致无法找到登录按钮、点击无响应。以下是修复后可正常获取用户昵称、邮箱、头像的完整代码:

public class LogginActivity extends AppCompatActivity {

    private TwitterLoginButton login;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 必须先加载布局,再查找控件
        setContentView(R.layout.activity_loggin);
        Twitter.initialize(this);
        login = findViewById(R.id.twitter_login_button);
        
        login.setCallback(new Callback<TwitterSession>() {
            @Override
            public void success(Result<TwitterSession> result) {
                TwitterSession session = result.data;
                // 调用接口获取用户完整信息
                getUserInfo(session);
                Toast.makeText(LogginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void failure(TwitterException exception) {
                // 打印错误日志可直接定位问题原因
                Log.e("TwitterLogin", "登录失败", exception);
                Toast.makeText(LogginActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void getUserInfo(TwitterSession session) {
        TwitterApiClient twitterApiClient = TwitterCore.getInstance().getApiClient(session);
        AccountService accountService = twitterApiClient.getAccountService();
        // include_email设为true才会返回邮箱字段
        Call<User> call = accountService.verifyCredentials(true, true, true);
        call.enqueue(new Callback<User>() {
            @Override
            public void success(Result<User> result) {
                User user = result.data;
                // 提取所需用户信息
                String nickname = user.name; // 用户昵称
                String username = user.screenName; // 账号用户名
                String email = user.email; // 用户邮箱(需权限审核通过才会返回)
                String avatarUrl = user.profileImageUrlHttps; // 头像链接

                // 携带参数跳转到主页
                Intent intent = new Intent(LogginActivity.this, MainActivity.class);
                intent.putExtra("nickname", nickname);
                intent.putExtra("username", username);
                intent.putExtra("email", email);
                intent.putExtra("avatar_url", avatarUrl);
                startActivity(intent);
                finish();
            }

            @Override
            public void failure(TwitterException exception) {
                Log.e("TwitterUserInfo", "获取用户信息失败", exception);
            }
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 将页面结果回调传递给Twitter登录按钮
        login.onActivityResult(requestCode, resultCode, data);
    }
}

3 常见问题排查

  • 持续回调失败时,先检查设备当前网络可正常访问Twitter服务
  • 确认API Key和Secret没有填写错误,密钥大小写敏感
  • 无法获取邮箱时,先确认开发者后台的邮箱权限已经审核通过

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:01