Google 地理编码 API 拒绝了我的请求
Google Geocoding API rejects my requests
我有一个带有地图和编辑文本的屏幕,用户可以在其中输入位置。这些地图来自 Mapbox,但它的地理编码不够好,所以我想使用 Google 中的一张。
当用户输入时,他应该会看到基于他输入的地址的建议地点列表。当他点击其中任何一个时,地图上应该会掉落一个图钉。
我在开发人员的控制台中创建了一个项目,生成了一个 api 密钥限制它 Android 设备。发送请求时使用密钥。
我像这样定义了一个 Retrofit 接口
public interface GeocodingApi {
String PATH = "maps/api/geocode/json";
String KEY_ADDRESS = "address";
String KEY_KEY = "key";
String KEY_LANGUAGE = "language";
@GET(PATH)
Single<GeocodingResponse> getPlaces(
@Query(value = KEY_ADDRESS, encoded = true) String address,
@Query(KEY_KEY) String apiKey,
@Query(KEY_LANGUAGE) String language
);
}
然后我像这样提出请求
disposable = getGeocodingApi()
.getPlaces(addressName, getApiKey(), getLanguage())
.subscribeOn(Schedulers.io())
.subscribe(
response -> {
if (!"OK".equals(response.getStatus())) {
final String errorMessage = response.getErrorMessage();
if (errorMessage != null) {
Log.i(TAG, errorMessage);
}
return;
}
final List<AddressResponse> addresses = response.getAddresses();
for (final AddressResponse address : addresses) {
final String formattedAddress = address.getFormattedAddress();
if (formattedAddress != null) {
Log.i(TAG, formattedAddress);
}
final GeometryResponse geometry = address.getGeometry();
final double lat = geometry.getLocation().getLat();
final double lon = geometry.getLocation().getLon();
Log.i(TAG, "Lat: " + lat + ", lon: " + lon + "\n");
}
},
error -> Log.e(TAG, error.toString())
);
但我得到的是一条错误消息,指出我的 IP 地址、站点或设备无权使用此 API 密钥。这是为什么?在生成 api 密钥时,我使用其 SHA1 指纹指定了我的应用程序包名称。
谁能帮我解决这个问题?
通过删除开发者控制台中的 api 键限制解决了这个问题。您可以创建一个没有任何限制的新密钥,也可以更改当前密钥的限制并等待最多 5 分钟以使设置生效。
我有一个带有地图和编辑文本的屏幕,用户可以在其中输入位置。这些地图来自 Mapbox,但它的地理编码不够好,所以我想使用 Google 中的一张。 当用户输入时,他应该会看到基于他输入的地址的建议地点列表。当他点击其中任何一个时,地图上应该会掉落一个图钉。 我在开发人员的控制台中创建了一个项目,生成了一个 api 密钥限制它 Android 设备。发送请求时使用密钥。 我像这样定义了一个 Retrofit 接口
public interface GeocodingApi {
String PATH = "maps/api/geocode/json";
String KEY_ADDRESS = "address";
String KEY_KEY = "key";
String KEY_LANGUAGE = "language";
@GET(PATH)
Single<GeocodingResponse> getPlaces(
@Query(value = KEY_ADDRESS, encoded = true) String address,
@Query(KEY_KEY) String apiKey,
@Query(KEY_LANGUAGE) String language
);
}
然后我像这样提出请求
disposable = getGeocodingApi()
.getPlaces(addressName, getApiKey(), getLanguage())
.subscribeOn(Schedulers.io())
.subscribe(
response -> {
if (!"OK".equals(response.getStatus())) {
final String errorMessage = response.getErrorMessage();
if (errorMessage != null) {
Log.i(TAG, errorMessage);
}
return;
}
final List<AddressResponse> addresses = response.getAddresses();
for (final AddressResponse address : addresses) {
final String formattedAddress = address.getFormattedAddress();
if (formattedAddress != null) {
Log.i(TAG, formattedAddress);
}
final GeometryResponse geometry = address.getGeometry();
final double lat = geometry.getLocation().getLat();
final double lon = geometry.getLocation().getLon();
Log.i(TAG, "Lat: " + lat + ", lon: " + lon + "\n");
}
},
error -> Log.e(TAG, error.toString())
);
但我得到的是一条错误消息,指出我的 IP 地址、站点或设备无权使用此 API 密钥。这是为什么?在生成 api 密钥时,我使用其 SHA1 指纹指定了我的应用程序包名称。 谁能帮我解决这个问题?
通过删除开发者控制台中的 api 键限制解决了这个问题。您可以创建一个没有任何限制的新密钥,也可以更改当前密钥的限制并等待最多 5 分钟以使设置生效。