我有一个Android应用程序,我正在使用Google地理编码API来获取地址的GPS坐标。目前我正在使用以下正常工作的 URL:
http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=1600+Amphitheatre+Parkway,+Mountain+View,+CA
问题是,在 2018 年 7 月 16 日开始的 Google "新定价更改"之后,上述 API 会继续工作吗?根据此处的 Google API 文档,https://developers.google.com/maps/documentation/geocoding/intro#GeocodingResponses,执行地理编码的正确方法是使用以下格式:
https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=YOUR_API_KEY
我尝试使用建议的格式(创建项目、启用计费、启用地点和地图 API、创建 API 密钥、为密钥添加安全性,以便只有我的应用程序可以访问密钥(,但是当我使用建议的格式时,我收到错误,
此 IP、网站或移动应用程序无权使用此 API 钥匙
阅读有关StackOverflow的其他问题,我发现了以下建议,其中包括:
- 创建服务器密钥并使用它代替 API 密钥
- 不向 API 密钥添加限制
- 使用 API 请求的第一种格式(不带API_KEY(
- 等待 10 分钟,直到新密钥变为活动状态
我尝试了除 1 之外的所有方法,但没有一个有效。关于解决方案#1,根据文档,API需要一个API密钥,所以我看不出为什么服务器密钥会起作用。
解决方案2 有风险,解决方案 3 不确定它是否会继续处理定价更改,解决方案 4 也不起作用(我等了几个小时都没有成功(。
我什至创建了一个新的 API KEY,并且没有添加任何限制,并且出现超出限制的错误。
任何人都可以提供任何帮助吗?
根据您上面的评论,最快的方法是使用地理编码器对地址进行反向地理编码:
if(Geocoder.isPresentt()){
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses;
addresses = geocoder.getFromLocationName(addressName, 3);
for(Address address : addresses){
Log.d(TAG,"Lat:" + address.getLatitude() +", Lng: " + address.getLongitude());
}
}
如果您仅限于使用谷歌地理编码 API,则使用代理服务(解决方案 #1(是可行的方法。
您的应用被拒绝,因为 Google 无法知道哪个应用仅使用 API 密钥发出请求。如果你看一下可用的API,有人说"适用于Android"和"适用于iOS",这些是你可以限制和本机使用的API。
使用代理将起作用(你的假设不会是错误的(,因为您可以将 API 密钥限制为服务的 IP,然后要求应用授权才能使用代理终结点。这将保护您的 API 密钥免遭窃取和滥用。