Android Java应用中能否通过Credential Manager仅获取serverAuthCode?
Android Java应用中能否通过Credential Manager仅获取serverAuthCode?
当然可以!你只需要在获取到Credential响应后,从返回的Google ID凭证中提取serverAuthCode即可——这正是你的后端需要用来向Google发起请求、获取用户信息的关键值。
下面是调整后的实现代码,重点关注onResult方法里的处理逻辑:
CredentialManager manager = CredentialManager.create(getApplicationContext()); GetGoogleIdOption googleIdOption = new GetGoogleIdOption.Builder() .setFilterByAuthorizedAccounts(true) // 仅显示已授权的Google账号,不展示"创建新账号"界面 .setAutoSelectEnabled(true) .setServerClientId("web_client_id") // 这里要填你的Web客户端ID,必须和后端使用的一致 .build(); GetCredentialRequest request = new GetCredentialRequest.Builder() .addCredentialOption(googleIdOption) .build(); CredentialManagerCallback<GetCredentialResponse, GetCredentialException> credentialManagerCallback = new CredentialManagerCallback<GetCredentialResponse, GetCredentialException>() { @Override public void onResult(GetCredentialResponse result) { // 将凭证强转为GoogleIdCredential,从中提取serverAuthCode if (result.getCredential() instanceof GoogleIdCredential googleIdCredential) { String serverAuthCode = googleIdCredential.getServerAuthCode(); // 拿到这个code之后,就可以传给后端啦 if (serverAuthCode != null) { // 这里写你的逻辑:把serverAuthCode发送到后端 } else { // 处理未获取到serverAuthCode的情况 } } } @Override public void onError(@NonNull GetCredentialException error) { // 按你的需求处理错误,比如提示用户登录失败等 } }; manager.getCredentialAsync( _activity_instance, request, null, Executors.newSingleThreadExecutor(), credentialManagerCallback );
需要注意的几个关键点:
- 务必确保你设置的
serverClientId是Web应用的客户端ID(不是Android应用的),这个ID需要在Google Cloud控制台中配置,并且和后端用来验证的客户端ID完全一致。 - 如果
getServerAuthCode()返回null,大概率是客户端ID配置有误,或者账号没有对应的授权权限,这时候需要检查控制台的OAuth 2.0配置,确保已启用对应的API并正确设置了重定向URI等信息。
备注:内容来源于stack exchange,提问作者paskl
相关产品推荐
相关产品推荐

