如何签署 URL Google 指示?

How to sign URL Google Directions?

我有检索 Google 路线的功能,但我有一个问题,想知道在哪里可以找到 Google 加密密钥来签署我的 url。它在仪表板上的什么位置?

        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 加密密钥应该是什么?

仪表板有

有人可以帮忙吗?

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

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

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

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