此IP、网站或移动应用程序未被授权使用此API密钥-Android应用程序



我试图将我的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密钥来解决此问题。我需要使用安卓密钥,并希望限制该密钥的用户。

我注意到的要点:

  1. 谷歌确认我使用的是有效的API密钥
  2. 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

最新更新