如何在Google方向上签名?

时间:2017-06-04 22:02:53

标签: android google-maps google-places-api google-direction

我有一个功能来检索Google方向,但我有一个问题,即在哪里可以找到Google加密密钥来签署我的网址。仪表板上的这个位置在哪里?

        public static void getDirections(Context context, String origin, String destination,
                                         final DirectionsListener listener)
                throws ExecutionException, InterruptedException {
            if (FrameworkUtils.isStringEmpty(origin) || FrameworkUtils.isStringEmpty(destination)) {
                return;
            }
            try {
                String url = String.format(GOOGLE_API_DIRECTIONS_URL, origin, destination,
                        ConfigurationManager.GOOGLE_CLIENT_KEY, KEY_TRAVEL_MODE_DRIVING);
                String signedUrl = UrlSigner.signURL(url);
                JsonRequest request = new JsonRequest(Method.GET, signedUrl, null, new JsonResponseListener() {
                    @Override
                    public void onResponse(JSONObject response, int resultCode) {
                        try {
                            JSONArray routesObject = response.getJSONArray(KEY_ROUTES);
                            JSONObject currentRoute = routesObject.getJSONObject(0);
                            JSONObject overViewPolyline = currentRoute.getJSONObject(KEY_OVERVIEW_POLYLINE);
                            String encodedPoints = overViewPolyline.getString(KEY_POINTS);
                            listener.onSuccess(decode(encodedPoints));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onResponse(JSONObject jsonObject) {
                        // do nothing
                    }
                }, new ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        // do nothing
                    }

                    @Override
                    public void onErrorResponse(VolleyError error, int resultCode) {
                        // do nothing
                    }
                }, 45);
  VolleyClient.getInstance(context.getApplicationContext()).addRequest(request);
            } catch (IOException | InvalidKeyException | NoSuchAlgorithmException | URISyntaxException e) {
                e.printStackTrace();
            }
        }

这是我的signURL功能

public static String signURL(String inputUrl) throws IOException, InvalidKeyException, NoSuchAlgorithmException, URISyntaxException {
    URL url = new URL(inputUrl);
    String googleCryptoKey = ConfigurationManager.GOOGLE_CRYPTO_KEY;
    UrlSigner signer = new UrlSigner(googleCryptoKey);
    String request = signer.signRequest(url.getPath(), url.getQuery());
    return url.getProtocol() + "://" + url.getHost() + request;
}

我是从示例中创建此代码的,但我无法确定Google加密密钥应该是什么?

仪表板有

  • 我创建的API密钥
  • 来自AIM&管理员我可以看到项目ID和项目编号

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

客户端ID和加密密钥用于Premium计划许可证。如果您没有Premium计划许可并使用标准计划,则必须在请求中应用API密钥,并且不需要数字签名。

https://developers.google.com/maps/documentation/directions/get-api-key#standard-auth

因此,您可以简化代码以应用API密钥而不是客户端ID,并删除创建数字签名的部分。

如果您想保护API密钥,则应在开发者控制台中设置IP限制。客户端ID和数字签名用于保护Premium计划用户发出的请求。