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 包或其他东西来解决这个问题吗?
提前致谢,
保罗
问题在于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
希望我的回答能够解答您的疑问。
| 归档时间: |
|
| 查看次数: |
3262 次 |
| 最近记录: |