Google 地图 API 侧面加载时关键在发布版本中有效,在发布时不起作用

Google Maps API Key works in Release version when side loaded, does not work when published

我有一个使用地图 API 的应用程序,我有 API 的调试和发布密钥。这一切在侧面加载时都很好用。 Release 密钥适用于发布版本。我将发布 APK 上传到 Google Play 控制台并推出了内部测试版本。我是从商店安装的,但好像 API 密钥不好。

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

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

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

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

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

听起来,您必须将 actual "release key"(在所示方案中称为 "app signing key")的指纹添加到使用 Maps API 键。 "upload key" 是另外一回事,当涉及到 v2 签名时(这是侧面加载时最有可能使用的唯一密钥指纹)。要让 1 个地图 API 键在任何条件下都能正常工作,它应该添加 3 个键指纹。

图片来源:documentation.

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

您可以前往 Play 管理中心的“应用签名”页面验证您是否已注册。如果是,则需要在 Cloud Console 的 Google 地图 API 的凭据部分将应用签名证书列入白名单。

您可以在 https://support.google.com/googleplay/android-developer/answer/7384423

阅读有关应用程序签名的更多信息