在 Flutter 中限制 Google 方向 API 键

Restrict Google Directions API key in Flutter

我一直在使用 Flutter 开发移动应用程序,并希望尽快在 Play 商店中发布它。它使用 Google 方向 API,现在我想将 API 键限制到这个特定的应用程序。

我能够对应用程序进行签名,并且我已将 API 密钥限制为 Android 应用程序,其中包含我的应用程序的包名和密钥的 SH1A 指纹,这两者进行了双重检查。

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

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

提前致谢,

保罗

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

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

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

我可以建议使用 Java 客户端库 Google 地图 API Web 服务来实现中间代理:

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

希望我的回答能解开你的疑惑。