Android中使用URLConnection调用Google Distance Matrix API返回REQUEST_DENIED问题
解决Google Maps API返回"REQUEST_DENIED"的问题
看起来你踩了Google Maps API授权的常见坑!我帮你一步步排查:
1. 最可能的根源:漏启用了关键API
你要获取两地距离和时间,核心依赖的是Google Maps Distance Matrix API,但你只提到启用了Google Maps Android API、Geocoding API和Places API Web Service——这个关键API不在你的启用列表里!赶紧去Google Cloud控制台,找到Distance Matrix API并启用它,这大概率能解决问题。
2. 检查API密钥的配置限制
即使你说密钥是“无限制”的,也可能不小心设置了隐性限制:
- 打开Google Cloud控制台的API密钥详情页:
- 如果设置了应用限制(比如Android应用绑定),要确保你的APP包名、SHA-1指纹和控制台里的配置完全一致;测试阶段可以暂时把应用限制改成“无”,验证通过后再恢复。
- 如果设置了API限制,要确认列表里包含了Distance Matrix API(以及你用到的其他API),否则请求会直接被拒绝。
3. 核对请求URL的正确性
检查你用URLConnection发起请求的完整URL:
- 确保API端点正确:Distance Matrix API的标准端点是
https://maps.googleapis.com/maps/api/distancematrix/json - 确认必填参数无误:
origin、destination、key这三个参数不能少,且key参数格式必须是key=你的API密钥,别把参数名拼错(比如写成api_key)。 - 可以直接把请求URL复制到浏览器里访问,看看返回的错误信息会不会更具体,方便定位问题。
4. 确认账单账户已激活
现在Google Maps所有API都要求绑定有效的账单账户,哪怕只用免费额度也必须完成账单激活。如果没绑定账单,哪怕启用了API,请求也会被拒绝。去Google Cloud控制台的账单页面检查一下状态。
5. 检查Android端的基础配置
虽然是用URLConnection发起网络请求,但也要确保你的APP配置没问题:
- 确认
AndroidManifest.xml里添加了网络权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- 如果你在Android 9及以上版本开发,要注意明文网络限制——不过Google Maps API都是HTTPS端点,这一点应该没问题,但还是确认你的URL是
https开头的。
你可以先从启用Distance Matrix API开始排查,这是开发者最容易疏漏的点!
内容的提问来源于stack exchange,提问作者avadhoot kulkarni
相关产品推荐
相关产品推荐

