我正在使用 Android 版 Places SDK 的“地点自动完成”功能。我已经通过 Google Cloud 凭据控制台设置了 API 密钥,效果很好。
但是,我尝试将 API 密钥的使用限制为我的特定应用程序,但它不再起作用。在logcat中,我可以看到
此 IP、网站或移动应用程序无权使用此 API 密钥。从 IP 地址 xx 收到的请求,引用地址为空
我确信我已在 API 密钥限制页面上正确输入了包名称和 SHA-1 指纹。
我见过很多类似的问题。一些答案涉及设置“服务器”API 密钥而不是“Android”API 密钥,但我认为这不再相关。其他答案声称 Places API 只能通过 IP 地址进行限制。但这肯定是不对的——这应该如何运作???
任何想法或澄清将不胜感激!
该问题可能源于以下事实:您将应用程序作为应用程序包进行分发并使用应用程序的分发证书生成 SHA-1 指纹。实际上,您应该提供应用程序的签名密钥。之所以会出现混乱,是因为 Google Cloud 控制台提供了以下命令来生成指纹:
keytool -list -v -keystore your_keystore_name -alias your_alias_name
。
要查找应用程序的签名密钥,您需要转到
Setup
选项卡,然后转到 Google Play 控制台中的 App signing
。
然后,您将能够复制应用签名密钥的 SHA-1 指纹并将其输入 Google Cloud 控制台。不过,我仍然建议保留分发证书的 SHA-1 指纹,因为其他一些商店仍然通过 APK 分发应用程序。
谷歌关于这个主题的文档显然是一场灾难,我花了一段时间才明白我的错误。感谢 Nishikanto Sarkar Simul 链接了另一个问题的帖子。