Google Maps API 密钥在侧面加载时在发布版本中有效,在发布时无效

Posted

技术标签:

【中文标题】Google Maps API 密钥在侧面加载时在发布版本中有效,在发布时无效【英文标题】:Google Maps API Key works in Release version when side loaded, does not work when published 【发布时间】:2019-06-27 12:26:38 【问题描述】:

我有一个使用 Maps API 的应用,我有一个 API 的调试和发布密钥。当侧面加载时,这一切都很好。 Release 密钥与发布版本一起使用。我将 Release APK 上传到 Google Play Console 并推出了内部测试版本。我从商店安装的,它的行为就像 API 密钥不好。

我在网站上遇到了许多类似的问题,甚至尝试在清单中对发布密钥进行硬编码,并且在所有情况下,它在侧面加载时都能正常工作,但在通过 Google Play 商店安装时就不行。

我将手机连接到日志分析器并进行了一些地图操作以尝试查看问题所在,但我在日志中收到的仅有两条消息表明 Map API 正在工作,即使我没有地图显示,就像 API 密钥丢失或无效一样。请注意,当我从标准更改为卫星时出现了弃用警告,我没有直接使用室内支持。 Activity加载时出现API包版本消息。

以下是两个日志条目: 02-03 09:23:07.550 15809-15809/? W/Google Maps android API:弃用通知:在未来的版本中,卫星地图、混合地图或地形类型地图将不再支持室内。即使在不支持室内的情况下,isIndoorEnabled() 也会像现在一样继续返回通过 setIndoorEnabled() 设置的值。默认情况下,setIndoorEnabled 为“真”。 API 发行说明 (https://developers.google.com/maps/documentation/android-api/releases) 将在这些地图类型不提供室内支持时通知您。

02-03 09:30:24.319 15809-15809/? I/Google Maps Android API:Google Play 服务包版本:14799019

我正在使用 Google 签名并已上传签名密钥,我认为它可能会被双重签名并导致问题。我上传了一个未签名的 APK,Google Play 控制台获取了该应用并对其进行了签名。我还上传了签名的 APK,无论哪种情况,地图都是空白的,就像没有密钥或密钥无效一样。在所有情况下,地图在侧面加载时都可以正常工作,即不通过商店,但在通过商店加载时不显示地图。

【问题讨论】:

【参考方案1】:

听起来,您必须将实际“发布密钥”(在所示方案中称为“应用签名密钥”)的指纹添加到使用的 Maps API 密钥的限制中。当涉及到 v2 签名时,“上传密钥”是另一回事(这是侧面加载时最有可能使用的一个密钥指纹)。要让 1 个 Maps API 密钥在任何条件下都能正常工作,它应该添加 3 个密钥指纹。

图片来源:documentation.

【讨论】:

谢谢,这就是我所缺少的。我转到控制台中的屏幕并添加了签名密钥。开发人员使用上传密钥对其进行签名,这就是它在侧面加载时起作用的原因。 各位非常感谢!我一直在抱怨为什么这对我不起作用,遇到了完全相同的问题。该解决方案也适用于 med! 谢谢...我不知道出了什么问题!为了更简单的方法导航到谷歌播放控制台>你的应用程序>设置>应用程序完整性。在那里你会找到你的“应用程序签名密钥证书”和“上传密钥证书”SHA-1 ...将两者都添加到地图 API ;)【参考方案2】:

您是否使用上传密钥注册了 Google Play 应用签名?如果是这样,Google Play 会在将您的 APK 发布给用户之前对其进行重新签名,这可以解释为什么它在本地有效,但在通过 Play 发布时无效。

您可以通过转到 Play 管理中心的应用签名页面来验证您是否已注册。如果是,那么您需要在 Cloud Console 的 Google Maps API 的凭据部分中将应用签名证书列入白名单。

您可以在https://support.google.com/googleplay/android-developer/answer/7384423阅读有关应用签名的更多信息

【讨论】:

你们都得到了正确答案,可惜我只能选择一个作为答案,而另一个答案有更多的细节和更多的选票。 @Scott 他们也几乎同时发布;将投票。

以上是关于Google Maps API 密钥在侧面加载时在发布版本中有效,在发布时无效的主要内容,如果未能解决你的问题,请参考以下文章

本地主机的 Google Maps API 密钥

Google Maps API V3 中的 API 密钥是啥?

查看哪些域使用 Google Maps API 密钥?

我应该采取哪些措施来保护我的Google Maps API密钥?

在 NodeJS 项目中放置 Google Maps API 密钥的位置

Android Manifest 未向 Google Maps 提供 API 密钥