【问题标题】:Google Geocoding API rejects my requests [duplicate]Google Geocoding API 拒绝我的请求 [重复]
【发布时间】:2018-02-09 11:06:38
【问题描述】:

我有一个带有地图和编辑文本的屏幕,用户可以在其中键入位置。这些地图来自 Mapbox,但它的地理编码不够好,所以我想使用来自 Google 的地图。 当用户输入时,他应该看到基于他输入的地址的建议地点列表。当他点击其中任何一个时,应该在地图上放置一个图钉。 我在开发人员的控制台中创建了一个项目,生成了一个限制它 Android 设备的 api 密钥。发送请求时使用密钥。 我这样定义了一个 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 指纹指定了我的应用程序包名称。 谁能帮我解决这个问题?

【问题讨论】:

    标签: android google-play-services google-geocoding-api


    【解决方案1】:

    通过删除开发者控制台中的 api 密钥限制解决了该问题。您可以创建一个没有任何限制的新密钥,也可以更改当前密钥的限制并等待最多 5 分钟以使设置生效。

    【讨论】:

    • 您正在使用 Places API 网络服务,网络服务唯一支持的限制是 IP 地址限制。您可以在developers.google.com/maps/faq#keysystem 上查看对每个 Google Maps API 有效的限制类型
    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    相关资源
    最近更新 更多