大疆迷你 4 Pro 评测:适合初学者、图像质量好的无人机
3692 2025-06-08 10:15:24
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,大家相互讨论,相互进步