You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android应用SHA1变更后无法更新OAuth客户端,提示指纹已被占用如何解决?

解决Google OAuth客户端SHA1指纹冲突问题

我之前也踩过这个坑,特别挠头——明明自己没创建其他客户端,却提示指纹被占用。咱们一步步来解决:

1. 先搞清楚为啥应用还能正常工作

你提到游戏仍能访问排行榜和成就,大概率是因为当前OAuth客户端里的旧SHA1指纹还没被移除,或者你的应用使用的是发布版签名(比如Google App Signing的官方指纹),而这个指纹早就配置在OAuth里了,和你本地调试的新SHA1无关。所以即使本地SHA1变了,发布版的应用依然能正常调用API。

2. 排查所有可能的客户端(重点!)

Google的提示不会错,你的新SHA1肯定被某个OAuth客户端占用了,只是你没找到而已:

  • 切换所有Google Cloud项目:点击控制台左上角的项目下拉框,选择“所有项目”,逐个检查每个项目里的「OAuth 2.0客户端ID」列表。很多时候我们会创建测试项目,用完就忘,里面的客户端可能用了这个SHA1。
  • 检查自动创建的客户端:有时候Google会自动帮你创建客户端(比如Firebase集成、Google Play Games服务配置时),这些客户端可能藏在你没注意的项目里。
  • 用命令行排查(更准确):如果控制台里找不到,试试用gcloud工具列出所有OAuth客户端:
    # 先确保安装了gcloud并登录
    gcloud auth login
    # 列出所有项目的OAuth客户端(需要启用alpha组件)
    gcloud alpha iam oauth-clients list --format="table(client_id,display_name,project_id)"
    
    搜索输出里的SHA1相关信息,找到占用的客户端。

3. 解决冲突的两种方式

方式一:删除占用的客户端

如果找到了那个占用SHA1的客户端(比如是废弃的测试项目里的),直接删除它,然后回到你的目标项目,把新SHA1添加到对应的Android客户端里(注意是添加,不是替换,这样新旧指纹都能生效)。

方式二:直接添加多个指纹(如果不需要删除旧客户端)

其实每个Android OAuth客户端可以同时配置多个SHA1指纹,你完全不用替换旧的,直接点击客户端编辑页面的「添加指纹」,把新的SHA1加进去就行——这样不管是旧签名还是新签名的应用,都能正常调用API。如果这个操作还是提示冲突,那还是得回到步骤2找那个占用的客户端。

4. 极端情况:联系Google支持

如果以上步骤都找不到占用的客户端,那可能是Google控制台的缓存或者系统问题。你可以在Google Cloud控制台里提交支持工单,提供你的SHA1值、目标项目ID和客户端ID,让官方帮忙排查。

内容的提问来源于stack exchange,提问作者Androidcoder

火山引擎 最新活动