借助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
相关产品推荐
相关产品推荐

