2

在创建 Google Maps API 密钥时,我们可以应用四个限制:-

  1. IP 地址(Web 服务器、cron 作业等)。
  2. HTTP 引用 (Javascript)
  3. 安卓 (SDK)
  4. ios (SDK)

现在,如果我们使用它们各自位置的钥匙,一切正常。

当我们想使用 REST 从移动设备(android/ios)访问一些 API 以获取附近的位置以供用户输入时,问题就出现了。现在在这种情况下哪种限制会起作用以及如何处理?

我已经尝试了所有的限制,它不会工作。

提前致谢。

4

3 回答 3

4

您可以通过在 https 调用的标头中传递 android 包名称和 sha-1 来限制 Android 应用程序的密钥并在我的应用程序中进行 http REST 调用:

  "X-Android-Package": "your.androidpackage.id"
  "X-Android-Cert": "0000000000000000000000000000000000000000"

*请务必删除 sha 中的冒号 ':'。

您仍然需要将“密钥”作为 url 参数传递和公开,但如果标头中没有凭据,它将被阻止。

于 2020-10-22T16:55:38.557 回答
2

如果我理解正确,您想从您的移动应用程序中使用 Places API 网络服务。通常应该从后端服务器调用 Google Maps API 网络服务,并且它们仅支持 IP 地址限制。

我建议查看以下有关可以为不同 API 设置的限制的文章

https://developers.google.com/maps/faq#keysystem

如您所见,Places API Web 服务只能使用 IP 地址限制。直接从移动设备发送 Places API 请求没有多大意义,因为每个设备都有自己的 IP 地址,而您不知道用户设备的 IP 地址。因此,保护​​ API 密钥的唯一可行解决方法是创建中间后端服务器。

应用程序应向您的中间服务器发送请求,中间后端服务器应向 Google 发送 Places API 请求,其中受保护的 API 密钥仅限于您服务器的 IP 地址,并将代理结果返回您的应用程序。

在这种情况下,您需要两个 API 密钥。一种用于具有 Android 应用程序限制的 Google Maps Android SDK,另一种用于具有 IP 地址限制的 Places API Web 服务。

我希望这有帮助!

于 2020-04-30T19:05:24.897 回答
0

在这种情况下,Android/Ios 限制将起作用,将您的 SHA 放在所需的位置,然后将您的包名称放在 Android 上。它会起作用,还可以从控制台启用您正在使用的 api。

于 2020-04-30T14:54:06.480 回答