我一直在用 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/