【问题标题】:Google Place API not working for Android KeyGoogle Place API 不适用于 Android 密钥
【发布时间】:2015-12-31 11:30:21
【问题描述】:

我正在使用谷歌自动完成位置 api。

https://maps.googleapis.com/maps/api/place/autocomplete/json?key="My Android Key"&input=Mg%20Ro&components=country:IN

我从控制台生成的密钥是 Android-key

我在 Google API Console 中启用的 API 是

Google Places API Web Service
Google Places API for Android
Google Maps Android API

和 SHA-1 指纹属于调试密钥库。 现在点击,我得到这个链接的输出是

{"error_message":"This IP, site or mobile application is not authorized to use this API key. Request received from IP address 122.177.199.201, with empty referer","predictions":[],"status":"REQUEST_DENIED"}

在服务器密钥的情况下,我得到了正确的响应

{"predictions":[{"description":"MG Road Metro Station","id":"9db78081a8f0e59874d51baff0df2c007e8c8dde","matched_substrings":[{"length":2,"offset":0}],"place_id":"ChIJY8G_aiIZDTkRohS7EKRePsw","reference":"CjQkAAAAj-nav4S-WWDQfmK7D5V_uc6XT8s5wZzsKNLQMHA7ucgRD_AGu5uIoxvWlxtpJaAiEhDOj61RTKbD9lK28Seovch6GhSPoMA7WPxS6v8ApRf_q03TtnzzrQ","terms":[{"offset":0,"value":"MG Road Metro Station"}],"types":["transit_station","point_of_interest","establishment","geocode"]},{"description":"M G Road Metro Station, Mehrauli-Gurgaon Road, Sector 28, Gurgaon, Haryana, India","id":"041408b314da313beac2e2016c697a9aba451be8","matched_substrings":[{"length":22,"offset":0}],"place_id":"ChIJATH6EiIZDTkR-aEggPmaDrU","reference":"CmRgAAAAEMJLJnkGwPSnN5BmE7_IU_UTEAxRT83T2IuHGKja7PouwUxH6j6gVzPlWiSi-yPgYH1vEUs_wiLMME2QbSkOBACPdtQmPdjQ5q-BlLxL3d81UOvaD8-jtvgrKOLLF_dPEhCRDuiBXJ90DQMY7ioJsQxnGhSFULVBF754FuwF2LFwzWTvlxmVoQ","terms":[{"offset":0,"value":"M G Road Metro Station"},{"offset":24,"value":"Mehrauli-Gurgaon Road"},{"offset":47,"value":"Sector 28"},{"offset":58,"value":"Gurgaon"},{"offset":67,"value":"Haryana"},{"offset":76,"value":"India"}],"types":["transit_station","point_of_interest","establishment","geocode"]},{"description":"MGF MAll Management, DLF City Mall Parking Road, Sector 28, Gurgaon, Haryana, India","id":"c8e8961eb24684f8fa6457876e0f5c1d7c38b5b9","matched_substrings":[{"length":2,"offset":0}],"place_id":"ChIJS3fMbyIZDTkRkexzrN-6sBg","reference":"CnRhAAAApKaoK6e148xwbkJZGhNXNTTDqStbf3vU5b0udThzC0jcdbtJceqWXcQ-I8U_x838GYjHTLLcNNswfrTu3jYVgnA-evtNfhN1pRKnugpvOAtonL2aEYmxGHQadW3bY8uzf-ERjosRBicEb2HfdoKZPhIQvUrFQqXv67CoiaWqlVqXUxoUBccSCK3csfVr1HA0H2HZOiqEmu8","terms":[{"offset":0,"value":"MGF MAll Management"},{"offset":21,"value":"DLF City Mall Parking Road"},{"offset":49,"value":"Sector 28"},{"offset":60,"value":"Gurgaon"},{"offset":69,"value":"Haryana"},{"offset":78,"value":"India"}],"types":["establishment"]},{"description":"MGF Infratech, Gurgaon, Haryana, India","id":"1b4b1ce2e29a7a8f3b3d07192bf06f7e6f0df84f","matched_substrings":[{"length":2,"offset":0}],"place_id":"ChIJTytQ6hgZDTkR2p2nzYt9tfA","reference":"CkQ1AAAAgAsxqmineUN1diGhpF5khDroggPvicHj5VlegMg-SYKf3ORdoFU5JB9dp5lpRY5byp9LAIx3alsDZ0k4D5QCrxIQXi5gMF1JakSfbAufPMlvcRoUqMmrZiUzEmhdiVxMBneGKFLrmZg","terms":[{"offset":0,"value":"MGF Infratech"},{"offset":15,"value":"Gurgaon"},{"offset":24,"value":"Haryana"},{"offset":33,"value":"India"}],"types":["establishment"]},{"description":"MG Road, National Highway 236, Maruti Housing Colony, Gurgaon, Haryana, India","id":"20c271b151605328170192b769e72e3e9bee6056","matched_substrings":[{"length":2,"offset":0}],"place_id":"ChIJrYoVEyIZDTkRcmM4_rRo_OE","reference":"CmRcAAAAtEh471bANMlFV-mDp2hOSVxW0_XxmNFQEmGXCiuZxvjsLvOcoyMPC0VhOifD7ngb-2rs5cfplaomYupeARu3kKEf6WPBQ170Ge7ZRNscQ1PDx12EvHkm4R7MrUD2F_kZEhBq6yvt7WzJgAkdXholeEObGhTuXqJl41XcSz2dzzksTMsHsU7Nzg","terms":[{"offset":0,"value":"MG Road"},{"offset":9,"value":"National Highway 236"},{"offset":31,"value":"Maruti Housing Colony"},{"offset":54,"value":"Gurgaon"},{"offset":63,"value":"Haryana"},{"offset":72,"value":"India"}],"types":["transit_station","point_of_interest","establishment","geocode"]}],"status":"OK"}

我无法理解为什么 place api 不适用于 Android-Key 的场景。请任何人尝试向我解释。

谢谢

【问题讨论】:

  • 您使用的是 Javascript 库还是 Android?.... 您的服务器密钥有效,因为那是用于网络的。 SHA-1 指纹和密钥库用于签署您的 apk, 用于放入 url。
  • 我在 Android 中使用。对于 android 密钥,我将 sha-1 和包名称放在 google api 控制台中,而不是在 url 中。在 url 中,我放置了从 api 控制台返回的密钥。
  • 好吧,你还是不会把你的 android 密钥放到 url 中。 Android 密钥用于 Android 应用程序。您可以将其放在项目的清单文件中。对于 Google maps v3 (javascript),您可以使用浏览器密钥或服务器密钥。您可以在 Android 应用程序中使用 v3,因为您仍然可以做一些事情,例如发出 http 请求和在 webview 中加载内容。请注意,它们应该适用于不同的平台。从您的问题中我可以看出,没有任何与 Android 相关的必要条件。
  • @Andy 我也尝试过 api 示例 github.com/googlesamples/android-play-places/tree/master/… 为此示例创建了 Android Api 并将其放入清单中,但它也表示该 api 无效。 SHA-1 应该来自发布密钥库还是来自调试密钥库的 SHA-1 也可以?
  • 你能包括实际的错误吗?如果是 Android Places,错误代码是 here。调试或发布都很好,它不会影响它的工作,除非您尝试进行更新。发布时,您需要使用发布密钥。

标签: android google-maps google-maps-api-3 google-play-services google-places-api


【解决方案1】:

对于谷歌在点击 api 时放置 api 它需要服务器密钥。使用您的 sha1 指纹创建服务器密钥,并将该密钥用于 google places api。并在清单中使用 api 密钥。不要混淆 api 密钥和服务器密钥。

在 manifest 中使用 android 密钥,在 places api 中使用服务器密钥。在创建 SERVER 密钥后等待 5 分钟。然后您的服务器密钥将被启用

        StringBuilder sb = new StringBuilder(PLACES_API_BASE+TYPE_AUTOCOMPLETE+OUT_JSON);
        sb.append("?key=" + API_KEY);
        sb.append("&types=(cities)");
        sb.append("&input=" + URLEncoder.encode(input, "utf8"));

这里你必须使用 API_KEY 是 SERVER key NOT ANDROID key

【讨论】:

    【解决方案2】:

    首先,尝试更改现有的 Android 密钥选项或创建一个没有包名和指纹限制的新密钥。如果它可以工作,那么您的包名称可能有错误(.debug 后缀会自动添加到调试版本中的包名称)

    还要确保您已在清单中添加了 Android 密钥

    【讨论】:

    • 我尝试制作没有包名和指纹的 android 密钥,幸运的是它工作正常。但是正如你在这里提到的 .debug 后缀是自动添加的,所以我尝试添加带有 .debug 后缀的包,但它不起作用。有什么想法吗?
    • 在进行调试构建时检查包的名称是什么,并确保获取正确密钥的 SHA1
    猜你喜欢
    • 2015-12-09
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2012-08-31
    • 2019-09-30
    • 2016-10-28
    相关资源
    最近更新 更多