在 Flutter 中限制 Google Directions API 密钥

Pau*_*ben 3 android google-maps google-directions-api flutter

我一直在使用 Flutter 开发移动应用程序,并希望尽快在 Play 商店上发布它。它使用 Google Directions API,现在我想将 API 密钥限制为该特定应用程序。

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

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

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

提前致谢,

保罗

xom*_*ena 6

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

您可以在此处阅读每个 API 支持哪种类型的限制: 对于不同的地图产品,我应该使用哪些密钥或凭据?

对于移动应用程序,Google 强烈建议为 HTTP Web 服务请求创建中间服务器。因此,您的应用程序将向中间服务器发送请求,中间服务器将使用受 IP 地址保护的 API 密钥向 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

希望我的回答能够解答您的疑问。