我一直在用Flutter开发移动应用程序,并希望很快在Play商店中发布它。它使用Google Directions API,现在我想将API密钥限制为该特定应用程序。
我能够对应用程序进行签名,并且我将API密钥限制为Android应用程序,其应用程序的程序包名称和密钥的SH1A指纹都经过了两次检查。
无论如何,无论是在调试模式(我认为是有意的)还是在释放模式下,请求都被拒绝。 我通过dart HTTP包访问API。
我的理论是,Directions API无法通过这种方式识别应用程序的程序包名称或指纹。那是对的吗?我可以使用google_maps_webview软件包或其他软件包来解决此问题吗?
预先感谢
保罗
答案 0 :(得分:0)
问题在于Directions API是一个Web服务。 Google假定Web服务是从后端代码而不是从前端直接调用的。因此,Web服务(如Directions API,Geocoding API等)所支持的唯一限制是IP地址限制。假定您从后端服务器向Google发送请求,并通过服务器的IP地址保护API密钥。 Android应用程序限制不适用于Web服务。
您可以在此处阅读每种API支持的限制类型: Which keys or credentials should I use for different Maps products?
对于移动应用程序,Google强烈建议为HTTP Web服务请求创建一个中间服务器。因此,您的应用程序会将请求发送到中间服务器,中间服务器会将带有受IP地址保护的API密钥的Directions 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
希望我的回答能澄清您的疑问。