admin管理员组文章数量:1530845
背景:之前一直做国内的项目,最近公司要做一款国外上架的app,因为海外和国内的文档,账号注册,demo测试等流程和国内大有不同,中间遇到了不少坑,在这里总结一下,有用到的小伙伴,可以借鉴下;
1.先撸官方文档
https://developers.google/identity/sign-in/android/sign-in
2.Google的Demo;
GitHub - googlesamples/google-services: A collection of quickstart samples demonstrating the Google APIs for Android and iOS
3.(1):注册Firebase账号 (https://console.firebase.google/)
(2):添加新应用
这里的json文件注意下载保存;
因为用到登录功能,SHA1还是需要的,
C:\Users\Alan>keytool -list -v -keystore <jks存放的路径>
SHA1填写的位置有那么几个,如果只是为了测试google登录,在刚才添加应用的那加上就可以了。如图这样:
但是在后面又遇到了坑, 由于需要google play上架,所以先提交了测试版,加入了测试账号,可以在商店下载,下载后发现google登录不了。于是,各种撸代码找坑。。。最终的原因是,Google Play当应用上传后,一是应用本身的SHA1(应用签名),二是Google Play会为应用重新生成一个SHA1(商店的签名); 所以最终的解决方案如下:
然后,打开Google应用凭据官网 (https://console.developers.google/apis/credentials),将两个签名分别添加进去,测试,商店下载的app可以正常三方登录了。
然后撸代码:
1. init初始化:
//google login setting
GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions
.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestId()
.requestProfile()
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail() //可以获取到邮箱信息【这一步还挺有必要,不光可以获取到邮箱信息,还会影响到下面获取性别信息】
.build();
mGoogleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions);
R.String.default_web_client_id 客户端ID (很多朋友遇到 code返回10的问题,是因为下面的Web Client没有创建或者代码中google_client_id 使用的不是WebClient,代码一定要用WebClient 对应的客户端ID
)
2.点击登录
Intent intent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(intent, CODE_SIGN_IN);
3.注册回调
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CODE_SIGN_IN && resultCode != 0) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
} else if(requestCode == CODE_SIGN_IN) {
// ToastUtils.showShort(getResources().getString(R.string_error));
assert data != null;
ToastUtils.showShort( data.toString() );
}
}
4.登录成功数据回调
/**
* Google登录成功返回数据
* @param completedTask
*/
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
// Signed in successfully, show authenticated UI.
GgOrFbUserInfo ggOrFbUserInfo = new GgOrFbUserInfo();
ggOrFbUserInfo.setAvatar(account.getPhotoUrl() == null ? "": account.getPhotoUrl().toString());
ggOrFbUserInfo.setLtype(1);
ggOrFbUserInfo.setUserId(account.getId());
ggOrFbUserInfo.setEmail(account.getEmail());
ggOrFbUserInfo.setEmailVerified(1);
ggOrFbUserInfo.setName(account.getDisplayName());
ggOrFbUserInfo.setLanguage(CommonPramsUtil.getSystemLanguage());
ggOrFbUserInfo.setFamilyName(account.getFamilyName() == null ? "" : account.getFamilyName());
ggOrFbUserInfo.setGivenName(account.getGivenName());
ggOrFbUserInfo.setRegion("zn");
login(ggOrFbUserInfo); //在这走自己后台接口
if (account.getPhotoUrl() != null) {
// Glide.with(LoginActivity.this).load(account.getPhotoUrl()).into(imgHead);
}
Log.e(TAG, "account--------------->>>" + new Gson().toJson(account));
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information.
// failedCode.setText("获取登录信息失败" + e.getMessage());
Log.e(TAG, "signInResult:failed code=" + e.getStatusCode());
ToastUtils.showShort(e.getMessage());
}
}
5.退出登录
mGoogleSignInClient.signOut()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.d(TAG, "signOut: -----------------------------");
// ...登出的逻辑
}
});
------------------以上就是Google登录和登出的所有步骤了-----------------------
版权声明:本文标题:(出海必备)Android三方登录之Google登录 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1725994332a1051856.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论