Firebase-Google Auth(login): com.google.android.gms.common.api.ApiException: 10

目录

1、原因情况

2、Firebase 对应应用 SHA-1重新设置Google提供的SHA-1

3、Google 凭据配置不正常

4、登录API所需的客户端ID (web_client_id)问题


原因:SHA-1不正确、凭据设置问题、发送的client_id不正确

1、原因情况

        SHA-1是根据包签名生成的一个字符串数据,你要查看自己的apk的包签名具体是什么,是不是用错了包签名?

        如果你是发布到谷歌平台的,要检查凭据里的信息是不是都用到了Google Console提供的SHA-1,以及firebase的SHA-1也是要用谷歌提供的。

2、Firebase 对应应用 SHA-1重新设置Google提供的SHA-1

(2023年12月7日更新)升级上传证书可能SHA-1会变化,要对应去修改! 

我的情况是上传了Google Console发布(内部测试),这个发布出去后Google自己会生成一个包签名重新签名,所以SHA-1就不正确了(已经不是我们自己的包签名SHA-1了)

https://play.google.com/console

进入google console管理页面,打开你的应用,找到左边的应用完整性

 找到这个上传密钥证书,使用它下面里面的SHA-1和SHA-256,填充回对应firebase管理页面的应用配置SHA-1里。

https://console.firebase.google.com/

如果我们不发布到google console,直接打包出apk文件,此时的包签名就是用我们设置的包签名,而不是google给我们的这个了,所以,正常测试不走google发布那流程的话 就用我们自己的SHA-1,否则要用google提供的~ 

3、Google 凭据配置不正常

(2023年12月7日更新)这个很重要,100%每个人都会漏掉的地方,重新根据下面方法配一下凭证Android应用的SHA-1,使用应用签名密钥证书即可。 

 https://console.cloud.google.com/

具体是这个凭据的地方:https://console.cloud.google.com/apis/credentials 

在第一步获取“上传密钥证书”SHA-1里的上面还有一个应用签名密钥证书

 它的SHA-1证书指纹需要填充到

找到你应用包对应的

​ Android client for xxxxx (auto created by Google Service)​

如果找不到可以自行创建一个Android凭据 

 软件包名称就是包名, com.xxx.xxx 

4、登录API所需的客户端ID (web_client_id)问题 

登录发的web_client_id必须是使用

​ Web client (auto created by Google Service)​

(2023年12月7日1更新)如果没有可以手动创建一个Web应用类型的凭证,它不受应用包名变更影响,只要你这个应用还是使用同样的Google Play工程发布。 

这个的客户端ID,并且要将Firebase Authentication配置Google登录那的Web SDK配置设置成这个ID

 对应填写上去。

做完上述操作后记得要重新导出google-services.json文件。 

### 实现 Google 第三方登录的详细步骤 要在 Android 中实现 Google 的第三方登录功能,开发者可以遵循以下方法来完成集成过程。以下是详细的说明: #### 1. 配置项目环境 为了支持 Google 登录服务,在开发环境中需要配置必要的依赖项和权限设置。 - 添加 `google-services` 插件到项目的根级构建文件 (`build.gradle`) 中: ```gradle classpath 'com.google.gms:google-services:4.3.10' // 版本号可能随时间更新 [^1] ``` - 将插件应用至模块级别的 `build.gradle` 文件中,并引入所需的库: ```gradle apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' dependencies { implementation 'com.google.android.gms:play-services-auth:20.2.0' // 版本号需确认最新版本 } ``` #### 2. 注册应用程序并获取 OAuth 客户端 ID 前往 [Google Cloud Console](https://console.cloud.google.com/) 创建一个新的项目或选择现有项目。启用 **Google Identity Platform** API 并注册您的应用以获得客户端 ID 和密钥。 此过程中会生成两个重要的参数:Web 应用程序的 Client ID 和 Android 应用程序的 SHA-1 密钥指纹。这些信息将在后续步骤中用于验证身份请求的有效性。 #### 3. 初始化 GoogleSignInOptions 对象 创建一个自定义选项实例来指定所需的信息字段(如电子邮件地址)。如果希望访问用户的个人资料,则应包含 Profile 范围。 ```java // Configure sign-in to request the user's ID, email address, and basic profile. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); // 可选范围取决于具体需求 ``` #### 4. 构建 GoogleApiClient 或使用 Firebase Auth 进行简化处理 现代实践推荐通过 FirebaseAuth 来管理账户状态变化事件监听器以及自动签入机制等功能。 ```kotlin val googleSignInClient = GoogleSignIn.getClient(this, gso) fun signIn() { val signInIntent = googleSignInClient.signInIntent startActivityForResult(signInIntent, RC_SIGN_IN) // 启动授权流程 } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == RC_SIGN_IN) { val task = GoogleSignIn.getSignedInAccountFromIntent(data) try { val account = task.getResult(ApiException::class.java) firebaseAuthWithGoogle(account!!) // 使用 Account 数据继续操作 [^1] } catch (e: ApiException) { Log.w(TAG, "signInResult:failed code=" + e.statusCode) } } } ``` #### 注意事项 在设计和实施阶段应注意以下几个方面的问题: - **安全性问题**: 如未加密传输可能导致敏感数据泄露;Cookie 滥用风险使得攻击者能够窃取会话令牌从而冒充合法用户的行为发生可能性增加 [^2]。 - **用户体验优化**: 提供清晰简洁界面引导用户顺利完成认证动作的同时也要考虑异常情况下的反馈提示逻辑设计合理性 [^1]. - **跨平台一致性维护**: 如果存在 Web 或其他移动端版本同步需求的话,则更应该关注不同设备间交互体验的一致性和兼容性表现良好与否 [^3]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值