android - Google 登录:仅在 Play 商店中出现登录 API 异常 10
问题描述
首先,我已经尝试过这个解决方案:Patrik's Solution。不工作!
如果我直接从 Android Studio 运行它可以完美运行,但是当我创建并安装签名 APK 时会发生异常。会发生什么?
我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
...
btnGoogleLogin.setOnClickListener(V -> singinGoogle());
...
}
void singinGoogle(){
Intent singinIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(singinIntent,GOOGLE_SIGN);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==GOOGLE_SIGN){
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try{
GoogleSignInAccount account = task.getResult(ApiException.class);
if(account!=null) {
firebaseAuthWithGoogle(account);
}
}catch (ApiException e){
Toast.makeText(this, "ERROR: "+e.getMessage(), Toast.LENGTH_LONG).show();
DialogError de = new DialogError();
FragmentManager fm = this.getSupportFragmentManager();
dec.show(fm, "");
}
}
}
private void firebaseAuthWithGoogle(GoogleSignInAccount account){
AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(),null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this,task -> {
if(task.isSuccessful()){
FirebaseUser user = mAuth.getCurrentUser();
}else {
Toast.makeText(this, "The Login as Failed", Toast.LENGTH_SHORT).show();
}
});
}
解决方案
我发现了问题,当我生成签名的应用程序时,Play 商店为该应用程序生成了一个新的 SHA1 和 MD5 密钥。所以解决问题的方法就是将 Play Store 密钥复制到 Firebase。
分步解决方案:
- 在 Google Play 控制台上打开应用程序。
- 转到版本管理 -> 应用签名
- 复制你想要的密钥
- 在 Firebase 控制台中将新密钥添加到您的项目。
注意:您也可以保留 Android Studio 生成的密钥,因此该应用程序可以在调试和 Google Play 上运行。
希望这可以帮助!
推荐阅读
- c# - 发送多个抄送地址的电子邮件
- c# - File.WriteAllBytes() 可以在不引发异常的情况下失败吗?
- android - 将小位图(公司徽标)绘制到另一个大位图(全屏图像)并放置在右侧
- c# - 用户首次使用 OpenId Connect 登录后将新的 UserId 放入数据库的位置在哪里?
- node.js - NPM 在相同的 docker 映像上的工作方式不同
- javascript - Node.js 和浏览器中对“this”的不同处理
- sql - MS SQL - 如何按通配符排序结果?
- powerapps - Powerapps 在一个屏幕上创建和编辑
- pandas - 从一系列字典中获取第一个值
- solr - Solr 过滤器查询 - 不适用于多个字段