我试图将我的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会显示签名错误.
任何帮助将非常感激!
如您所见,任何API密钥都可以在此处使用,只要它不受保护,但安全的Android API密钥不适用于Google Maps Directions API.
很简单,您需要为Directions API(或任何Web服务API)使用Server API密钥.
从文档中:
Google Maps Directions API仅适用于服务器密钥.
原因是这些Web服务API最初打算用于网站,而不是Android应用程序.
此外,保护服务器密钥的唯一方法是使用IP地址,因此无法在客户端执行此操作.
Google的官方建议是使用应用向其发出请求的代理服务器,并从代理服务器发出Directions API请求.
请参阅此处(这是Places webservice API特有的,但它适用于任何Web服务API):https://groups.google.com/forum/#!topic / google-places-api/ SmujrL-pDpU
Google员工的回复:
阿列克谢,
存储客户端的任何东西都是可妥协的,即使是混淆,你只会让专用黑客访问它的速度慢一些.
我建议您将应用程序设置为将没有API密钥的Places请求发送到代理服务器以接收请求,将API密钥附加到请求的末尾,发送请求,然后接收并返回来自请求您的申请.
干杯,
克里斯