此IP,网站或移动应用程序无权使用此API密钥 - Android App

时间:2015-12-29 18:29:12

标签: android api google-maps

我正在尝试将我的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密钥,并希望限制该密钥的用户。

我注意到的点数:

  1. Google确实知道我使用的是有效的API密钥。
  2. Google确实识别出正确的SHA-1签名,如果我使用无效的API密钥,Google会显示签名错误。
  3. 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:14)

正如您所发现的,任何API密钥都可以在此处使用,只要它不受保护,但安全的Android API密钥不适用于Google Maps Directions API。

很简单,您需要为Directions API(或任何Web服务API)使用服务器API密钥。

来自the documentation:

  

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密钥附加到请求的末尾,发送请求,以及   然后接收并将请求的响应返回给您   应用

     

干杯,

     

克里斯