在创建 Google Maps API 密钥时,我们可以应用四个限制:-
- IP 地址(Web 服务器、cron 作业等)。
- HTTP 引用 (Javascript)
- 安卓 (SDK)
- ios (SDK)
现在,如果我们使用它们各自位置的钥匙,一切正常。
当我们想使用 REST 从移动设备(android/ios)访问一些 API 以获取附近的位置以供用户输入时,问题就出现了。现在在这种情况下哪种限制会起作用以及如何处理?
我已经尝试了所有的限制,它不会工作。
提前致谢。
在创建 Google Maps API 密钥时,我们可以应用四个限制:-
现在,如果我们使用它们各自位置的钥匙,一切正常。
当我们想使用 REST 从移动设备(android/ios)访问一些 API 以获取附近的位置以供用户输入时,问题就出现了。现在在这种情况下哪种限制会起作用以及如何处理?
我已经尝试了所有的限制,它不会工作。
提前致谢。
您可以通过在 https 调用的标头中传递 android 包名称和 sha-1 来限制 Android 应用程序的密钥并在我的应用程序中进行 http REST 调用:
"X-Android-Package": "your.androidpackage.id"
"X-Android-Cert": "0000000000000000000000000000000000000000"
*请务必删除 sha 中的冒号 ':'。
您仍然需要将“密钥”作为 url 参数传递和公开,但如果标头中没有凭据,它将被阻止。
如果我理解正确,您想从您的移动应用程序中使用 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 服务。
我希望这有帮助!
在这种情况下,Android/Ios 限制将起作用,将您的 SHA 放在所需的位置,然后将您的包名称放在 Android 上。它会起作用,还可以从控制台启用您正在使用的 api。