Google登录最新版本接入,保姆级对接流程

admin 9540 2025-08-05 14:48:06

1、谷歌最新登录接入官方文档地址:https://developer.android.com/identity/sign-in/credential-manager-siwg?hl=zh-cn

2、配置远程依赖库:

implementation "androidx.credentials:credentials:1.2.2"

implementation "androidx.credentials:credentials-play-services-auth:1.2.2"

implementation "com.google.android.libraries.identity.googleid:googleid:"

3、安卓x的appCompat库也是必须的,但是文档上面没有讲,看你自己用那个版本吧,我这边用的下方这个:

implementation 'androidx.appcompat:appcompat:1.3.1'

4、去Google API 控制台创建项目:

https://console.cloud.google.com/apis/credentials?invt=Ablu1Q&project=global-doodad-442105-r8

5、点下方这个位置创建:

5.1、继续创建

5.2、点击左侧红圈部分:

5.3、找到刚才创建的项目:

5.4、选择外部,然后创建:

5.5、添加应用名称,邮箱,以及应用icon:

5.6、开发者联系信息写一下,如果公司有自己的用户隐私协议网址也可以在这里填上,我这里测试的就没写了:

5.7、点击保存并继续,点击下方:

5.8、点击保存:

5.9、点击左侧客户端,创建客户端:

5.10、填写应用名称,包名,以及签名证书指纹(不知道怎么获取签名指纹的注意填写那里有提示)

5.11、点击保存,会生成一个ID:

5.12、然后用同样的流程创建一个web应用:

5.13、最终结果如下:

5.14、注意点

不管是授权登录还是一键登录都需要使用Web客户端ID才能成功,因为使用 Android 客户端ID测试(失败),推荐用使用Web方式登入。官方文档在官方文档说明了 必须要用Web客户端ID 才可以

应用上线后(可以先提交一个内部测试应用,不用官方审核)在google play中获取Google生成的SHA-1 再根据这个值在Google Cloud 中创建一个Android Aouth客户端ID 不然google会一直返回 10。

6、接入登录:

6.1、登录初始化,setServerClientId就是上方创建应用的ID:

android.os.CancellationSignal cancellationSignal;

GetCredentialRequest request;

GetGoogleIdOption googleldOption;

CredentialManager credentialManager;

private void initLogin(){

googleldOption = new GetGoogleIdOption.Builder()

//将 setFilterByAuthorizedAccounts 参数设置为 true。如果没有可用的凭据

//,请再次调用该 API 并将 setFilterByAuthorizedAccounts 设置为 false

.setFilterByAuthorizedAccounts(false)

.setAutoSelectEnabled(true)

.setServerClientId(XyConfig.qudao_appid)

.build();

request = new GetCredentialRequest.Builder()

.addCredentialOption(googleldOption)

.build();

cancellationSignal = new android.os.CancellationSignal();

cancellationSignal.setOnCancelListener(new CancellationSignal.OnCancelListener() {

@Override

public void onCancel() {

}

});

}

6.2、拉起登录,callback是自定义的可以忽略:

public void login(Activity mActivity, UserListener mUserListener, YZYCallback callback) {

credentialManager = CredentialManager.Companion.create(mActivity);

credentialManager.getCredentialAsync(

mActivity,

request,

cancellationSignal,

Executors.newSingleThreadExecutor(),

new CredentialManagerCallback() {

@Override

public void onResult(GetCredentialResponse result) {

handleSignIn(result,mUserListener,callback);

}

@Override

public void onError(GetCredentialException e) {

LogUtil.e("Error getting(or preparing)credential:" + e);

}

});

}

6.3:登录返回数据解析:

private void handleSignIn(GetCredentialResponse result,UserListener mUserListener,YZYCallback callback) {

Credential credential = result.getCredential();

if (credential instanceof PublicKeyCredential) {

String responseJson = ((PublicKeyCredential) credential).getAuthenticationResponseJson();

} else if (credential instanceof PasswordCredential) {

String userName = ((PasswordCredential) credential).getId();

String password = ((PasswordCredential) credential).getPassword();

} else if (credential instanceof CustomCredential) {

if (GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL.equals(credential.getType())) {

callback.onSuccess();

GoogleIdTokenCredential googleIdTokenCredential = GoogleIdTokenCredential.Companion.createFrom(((CustomCredential) credential).getData());

String idToken = googleIdTokenCredential.getIdToken();

try {

JSONObject googleloginInfoReturn = new JSONObject();

uid=googleIdTokenCredential.getId();

String name=googleIdTokenCredential.getDisplayName();

googleloginInfoReturn.put("id",uid);

googleloginInfoReturn.put("name", name);

googleloginInfoReturn.put("phto", googleIdTokenCredential.getProfilePictureUri());

googleloginInfoReturn.put("token", idToken);

LogUtil.e("google handleSignIn googleloginInfoReturn:"+googleloginInfoReturn.toString());

XYUserInfo userInfo = new com.xy.mid_common.bean.XYUserInfo(uid, name, "",

"", idToken, "");

mUserListener.loginSuccess(userInfo);

} catch (JSONException e) {

e.printStackTrace();

}

} else {

LogUtil.e("google Unexpected type of credentia 111");

}

} else {

LogUtil.e("google Unexpected type of credentia 222");

}

}

7、登出:

public void loginOut(){

ClearCredentialStateRequest clearCredentialStateRequest= new ClearCredentialStateRequest();

android.os.CancellationSignal cancellationSignal=new CancellationSignal();

cancellationSignal.setOnCancelListener(new CancellationSignal.OnCancelListener() {

@Override

public void onCancel() {

LogUtil.e("GoogleLoginOut onCancel");

}

});

if(credentialManager!=null) {

credentialManager.clearCredentialStateAsync(

clearCredentialStateRequest,

cancellationSignal,

Executors.newSingleThreadExecutor(),

new CredentialManagerCallback() {

@Override

public void onResult(Void result) {

LogUtil.e("GoogleLoginOut onSuccess");

}

@Override

public void onError(ClearCredentialException e) {

}

});

}

}

8. 大家后面有 SDK问题可以加QQ群: 623257187,大家相互讨论,相互进步

上一篇
下一篇
相关文章