我一直在用Flutter开发一个移动应用程序,并希望很快在Play Store上发布它。它使用Google Directions API,现在我想将API密钥限制在这个特定的应用程序中。
我可以对应用程序进行签名,并且我已经将API密钥限制在我的应用程序的包名和密钥的SH1A指纹上,这两个都经过了双重检查。
无论如何,在调试模式(我假设这是故意的)和释放模式下,请求都会被拒绝。我通过dart HTTP包访问API。
我的理论是,通过这种方式,Directions API无法识别应用程序的包名或指纹。对吗?我可以通过使用google_maps_webview包或其他工具来修复它吗?
提前谢谢你,
保罗
发布于 2019-06-03 02:16:17
问题在于Directions API是一种web服务。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密钥的方向API请求发送到Google,并将响应传递回您的应用程序。
我可以建议使用Google Maps API Web服务的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
我希望我的回答能澄清你的疑问。
https://stackoverflow.com/questions/56415252
复制相似问题