Android Google 地图方向 Api - Api 键限制不起作用

Android Google Maps Direction Api - Api key restriction not working

当我们将密钥限制设置为NONE时Google 地图方向 Api,效果很好。

但是当我们将 Key restriction 设置为 Android apps 并提供正确的 程序包名称和 SHA-1 证书 - 它表示 Google Api 响应拒绝请求。

对此有任何已知的解决方案吗?

您通常会有不止一张证书。一个用于调试,一个用于发布。

确保您添加了两个指纹,或者您使用的证书指纹与您指定的 buildType 的指纹相匹配

方向 API 是一项网络服务。与 Web 服务的 API 密钥一起使用的限制是 IP 限制。

假定 Web 服务请求是在您的后端服务器上执行的。如果您需要限制 API 键,解决方法是创建一个中间服务器。您的 Android 应用程序应向中间服务器发送请求,中间服务器应向 Google 发送请求并将响应传回您的应用程序。在这种情况下,您可以通过中间服务器的 IP 地址限制 API 密钥。

看看这个文档:

https://developers.google.com/maps/faq#using-google-maps-apis

希望这能澄清您的疑问。

请尝试 编译 'com.akexorcist:googledirectionlibrary:1.1.1' 流动文档或尝试此方法 和第二种方法 Set CameraWithCoordinationBounds for animate Camera:

private void drawMap(double s_lat,double s_lng,double e_lat,double e_lng) {
        GoogleDirectionConfiguration.getInstance().setLogEnabled(true);
        Log.e("map", "++");
        List<LatLng> waypoints = Arrays.asList(

                new LatLng(22.626390800000003, 88.4313014), new LatLng(22.619708499999998, 88.4369083)
        );
        GoogleDirection.withServerKey("AIz... your google api key")
                .from(new LatLng(s_lat, s_lng))
                .and(waypoints)
                .to(new LatLng(e_lat, e_lng))
                .transportMode(TransportMode.DRIVING)
                .execute(new DirectionCallback() {
                    @Override
                    public void onDirectionSuccess(Direction direction, String rawBody) {
                        if (direction.isOK()) {
                            mMap.setMinZoomPreference(8f);
                            com.akexorcist.googledirection.model.Route route = direction.getRouteList().get(0);
                            int legCount = route.getLegList().size();
                            for (int index = 0; index < legCount; index++) {
                                Log.e("map", "++++" + index);
                                Leg leg = route.getLegList().get(index);
                                // mMap.addMarker(new MarkerOptions().position(leg.getStartLocation().getCoordination()));

                                if (index == 0) {
                                    Log.e("position","0" + leg.getStartLocation().getCoordination());
                                    //   mMap.addMarker(new MarkerOptions().position(leg.getEndLocation().getCoordination()).title("User"));
                                    mMap.addMarker(new MarkerOptions().position(leg.getStartLocation().getCoordination()).icon(BitmapDescriptorFactory
                                            .fromResource(R.drawable.start_pointer)));
                                } else if (index == legCount - 1) {
                                    //   mMap.addMarker(new MarkerOptions().position(leg.getEndLocation().getCoordination()).title("User"));
                                    mMap.addMarker(new MarkerOptions().position(leg.getEndLocation().getCoordination()).icon(BitmapDescriptorFactory
                                            .fromResource(R.drawable.stop_pointer)));
                                } else {
                                    mMap.addMarker(new MarkerOptions().position(leg.getEndLocation().getCoordination()).icon(BitmapDescriptorFactory
                                            .fromResource(R.drawable.user_point)));
                                }
                                List<Step> stepList = leg.getStepList();
                                ArrayList<PolylineOptions> polylineOptionList = DirectionConverter.createTransitPolyline(MainActivity.this, stepList, 5, Color.RED, 3, Color.BLUE);
                                for (PolylineOptions polylineOption : polylineOptionList) {
                                    mMap.addPolyline(polylineOption);
                                }
                            }
                            setCameraWithCoordinationBounds(route); // animateCamera

                        }
                    }

                    @Override
                    public void onDirectionFailure(Throwable t) {

                        Log.e("error", t.getLocalizedMessage() + t.getMessage() + "");
                        // Do something
                    }
                });
    }

  private void setCameraWithCoordinationBounds(com.akexorcist.googledirection.model.Route route) {
        LatLng southwest = route.getBound().getSouthwestCoordination().getCoordination();
        LatLng northeast = route.getBound().getNortheastCoordination().getCoordination();
        LatLngBounds bounds = new LatLngBounds(southwest, northeast);
        mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100));
    }