android - 在 Flutter 中限制 Google Directions API key

标签 android google-maps flutter google-directions-api

我一直在用 Flutter 开发一个移动应用程序,并希望尽快在 Play Store 上发布它。它使用 Google Directions API,现在我想将 API key 限制在这个特定的应用程序中。

我能够签署该应用程序,并且我已将 API key 限制为 Android 应用程序,并使用我的应用程序的包名称和 key 的 SH1A 指纹,这两者都经过了双重检查。

无论如何,无论是在 Debug模式(我认为这是故意的)还是在 Release模式下,该请求都会被拒绝。
我通过 dart HTTP 包访问 API。

我的理论是这样一来,Directions API 就无法识别应用程序的包名称或指纹。那是对的吗?我可以通过使用 google_maps_webview 包或其他东西来解决这个问题吗?

提前致谢,

保罗

最佳答案

问题是 Directions API是一个网络服务。 Google 假设 Web 服务是从后端代码调用的,而不是直接从前端调用的。因此,Directions API、Geocoding API 等 Web 服务支持的唯一限制是 IP 地址限制。假设您从后端服务器向 Google 发送请求,并通过服务器的 IP 地址保护您的 API key 。 Android 应用限制不适用于 Web 服务。

您可以在此处阅读每个 API 支持的限制类型:
Which keys or credentials should I use for different Maps products?

对于移动应用程序,Google 强烈建议为 HTTP Web 服务请求创建一个中间服务器。因此,您的应用程序将向中间服务器发送请求,中间服务器将使用受 IP 地址保护的 API key 向 Google 发送 Directions API 请求,并将响应返回给您的应用程序。

我可以建议为 Google Maps API Web Services 使用 Java 客户端库来实现中间代理:

https://github.com/googlemaps/google-maps-services-java

还有可用于其他后端语言(Python、Go、NodeJs)的客户端库:

https://github.com/googlemaps/google-maps-services-python

https://github.com/googlemaps/google-maps-services-go

https://github.com/googlemaps/google-maps-services-js

希望我的回答能澄清你的疑惑。

关于android - 在 Flutter 中限制 Google Directions API key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56415252/

相关文章:

google-maps - 使用 Google HeatMap 覆盖时,IE8 会抛出长时间运行的脚本错误

android-studio - adb.exe 已停止使用 Android Studio 4.3.1 和 Android 9.+

facebook - 将带有条件的Fb登录按钮放在容器中的位置

android - 如何覆盖 @ContextSingletons 以使用 RoboGuice 进行测试?

java - 如何在android中检查日期在10天内

android - 更改纬度和经度时,地理编码器无法使用更新地址

ios - 点击时删除 GMSMarker

android - 使用多个 Firebase 项目终止应用程序时未收到 FCM 通知

android - 从本地蓝牙打印机上的 php 应用程序打印

flutter - 如何在 flutter 中构建