我正在尝试将我的Android API密钥(对于Google Maps Direction API)的使用限制为使用我的SHA-1指纹签名的Android应用。当我在Google Developers Console的凭据下“添加包名称和指纹”时,密钥将完全正常工作。但是当我添加它们时会出现这个错误:
W / System.err:com.google.maps.errors.RequestDeniedException:此IP,网站或移动应用程序无权使用此API密钥。从IP地址XX.XX.XXX.XXX收到的请求,空引用
解决此错误的大部分答案都是针对Places API,并通过切换到Server API密钥来解决。我需要使用Android密钥,并希望限制该密钥的用户。
我注意到的点数:
任何帮助将不胜感激!
答案 0 :(得分:14)
正如您所发现的,任何API密钥都可以在此处使用,只要它不受保护,但安全的Android API密钥不适用于Google Maps Directions API。
很简单,您需要为Directions API(或任何Web服务API)使用服务器API密钥。
Google Maps Directions API仅适用于服务器密钥。
原因是这些网络服务API原本打算用于网站,而不是Android应用程序。
此外,保护服务器密钥的唯一方法是使用IP地址,因此无法在客户端进行此操作。
Google的官方建议是使用应用向其发出请求的代理服务器,并从代理服务器发出Directions API请求。
请参阅此处(这是Places webservice API特有的,但它适用于任何Web服务API):https://groups.google.com/forum/#!topic/google-places-api/SmujrL-pDpU
Google员工的回复:
阿列克谢,
任何存储的客户端都是可妥协的,即使是混淆, 对于一个专门的黑客来说,你只会让它慢一些 访问。
我建议您设置申请以发送您的地方信息 没有API密钥的请求代理服务器接收请求, 将API密钥附加到请求的末尾,发送请求,以及 然后接收并将请求的响应返回给您 应用
干杯,
克里斯