我试图将我的Android API密钥(用于Google Maps Direction API)的使用限制为使用我的SHA-1指纹签名的Android应用程序。当我不在谷歌开发者控制台的凭据下"添加包名和指纹"时,密钥将完全正常工作。但当我添加它们时,会出现以下错误:
W/System.err:com.google.maps.errors.RequestDeniedException:未授权此IP、站点或移动应用程序使用此API密钥。从IP地址XX.XX.XXX.XXX收到请求,引用为空
解决此错误的大多数答案都是针对Places API的,并通过切换到Server API密钥来解决此问题。我需要使用安卓密钥,并希望限制该密钥的用户。
我注意到的要点:
- 谷歌确认我使用的是有效的API密钥
- Google确实识别正确的SHA-1签名,如果我使用无效的API密钥,Google将显示签名错误
任何帮助都将不胜感激!
正如您所发现的,任何API密钥都可以在这里工作,只要它不安全,但安全的Android API密钥将不适用于Google Maps Directions API。
简单地说,您需要为Directions API(或任何Web服务API)使用一个Server API键。
来自文档::
Google Maps Directions API只能使用服务器密钥。
原因是这些Web服务API最初用于网站,而不是安卓应用程序。
此外,保护服务器密钥的唯一方法是使用IP地址,因此无法在客户端执行此操作。
谷歌的官方建议是使用应用程序向其发出请求的代理服务器,并从代理服务器发出Directions API请求。
请参阅此处(这特定于Places Web Service API,但对任何Web Service API都有效):https://groups.google.com/forum/#!主题/谷歌放置api/SmujrL pDpU
谷歌员工回应:
阿列克谢,
任何存储在客户端的东西都是可兼容的,即使有混淆,你只会让一个专门的黑客变得更慢通道
我建议你设置你的应用程序来发送你的位置在没有API密钥的情况下向代理服务器请求接收请求,将API密钥附加到请求的末尾,发送请求,以及然后接收请求的响应并将其返回给应用
干杯,
Chris