在Flutter中限制Google Directions API密钥

时间:2019-06-02 12:54:00

标签: android google-maps flutter google-maps-direction-api

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

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

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

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

预先感谢

保罗

1 个答案:

答案 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

希望我的回答能澄清您的疑问。