如何修复“无效密钥”错误并从 Maps API 检索特定地点的 JSON 数据?

问题描述 投票:0回答:0

所以我正在尝试将 Places API 用于 Android 应用程序。我使用了正确的 URL 来查询地点的 JSON 结果,但是当我运行该应用程序时,我在我的 logcat 中收到此错误:

data: {   "error_message": "The provided API key is invalid.",   "html_attributions" : [],   "results" : [],   "status": "REQUEST_DENIED"}
.

当我使用 Maps API 在地图上显示当前坐标时它起作用了,但现在我希望它使用 Places API 在地图上标记 restrarunts 的特定位置时出现错误。

我的开发者控制台启用了 Places API 和 Maps SKD for android。应用程序限制设置为 android 应用程序,并提供正确的包名称和指纹。 API 限制设置为“不限制密钥”。我代码中的 API 密钥也是正确的。

我花了很多时间研究解决方案,但似乎找不到可行的解决方案。我使用了第二个 API 密钥并关闭了限制,我检查了我需要的所有 API 是否在我的开发者控制台中启用了。

这是我在运行时收到的错误消息:

java.util.concurrent.ExecutionException: java.lang.SecurityException: GoogleCertificatesRslt: not allowed: pkg=com.project.prayerpal, sha256=[29a99a0744d90545fc8c9b9a2572fc89423676bbd3ff074ea76faa7ff], atk=false, ver=230617044.true (go/gsrlt)
    at ajp.s(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):3)
    at ajp.get(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):2)
    at akz.g(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):2)
    at yr.c(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):1)
    at yt.run(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):0)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:463)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
    at java.lang.Thread.run(Thread.java:1012)
 Caused by: java.lang.SecurityException: GoogleCertificatesRslt: not allowed: pkg=com.project.prayerpal, sha256=[29a99a0744d90545fc8c9b9a2572fc89423676bbd3ff074ea76faa7ff], atk=false, ver=230617044.true (go/gsrlt)
    at android.os.Parcel.createExceptionOrNull(Parcel.java:2441)
    at android.os.Parcel.createException(Parcel.java:2425)
    at android.os.Parcel.readException(Parcel.java:2408)
    at android.os.Parcel.readException(Parcel.java:2350)
    at ff.c(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):2)
    at ru.a(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):4)
    at jl.e(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):2)
    at kk.t(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):2)
    at kk.u(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):3)
    at kk.e(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):2)
    at ko.handleMessage(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (190400-0):69)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loopOnce(Looper.java:233)
    at android.os.Looper.loop(Looper.java:344)
    at android.os.HandlerThread.run(HandlerThread.java:67)

这是使用 URL 的代码:

public StringBuilder queryString(){

    double Latitude = 48.8566;
    double Longitude = 2.3522;

    StringBuilder sb = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
    sb.append("location=" + Latitude + "," + Longitude);
    sb.append("&radius=5000");
    sb.append("&types=" + "restraurant");
    sb.append("&sensor=true");
    sb.append("&key=" + R.string.API_key);

    return sb;
}

这是从 URL 获取数据的代码:

private String downloadUrl(String strUrl) throws IOException{

    String data = "";
    InputStream iStream = null;
    HttpURLConnection urlConnection = null;

    try {
        URL url = new URL(strUrl);

        urlConnection = (HttpURLConnection) url.openConnection();

        urlConnection.connect();

        iStream = urlConnection.getInputStream();

        BufferedReader br = new BufferedReader(new InputStreamReader(iStream));

        StringBuffer sb = new StringBuffer();

        String line = "";

        while((line = br.readLine()) != null){

            sb.append(line);
        }

        data = sb.toString();

        br.close();
    }catch (Exception e){

        Log.d("error", "downloading url failed");
    }finally {

        assert iStream != null;
        iStream.close();
        urlConnection.disconnect();
    }

    return data;
}
java android google-maps-markers google-places-api google-maps-android-api-2
© www.soinside.com 2019 - 2024. All rights reserved.