即使使用正确的api密钥,Google地图API请求也会被拒绝进行Android自动填充

我正在尝试创build一个自动填充字段,该字段应按照本教程中的说明使用Google Places API以用户types获取城市: https : //developers.google.com/places/training/autocomplete-android

你以前可能曾经多次发现过这个问题,但是没有一个答案对我有帮助。 以下是你应该知道的事情:

该url是https://maps.googleapis.com/maps/api/place/autocomplete/json?sensor=false&key=myKey&components=country:ro&input=whatTheUserTypes

请不要回复说你用自己的代替了API密钥,它的工作原理 – 去那里的API密钥必须是Android特定的,不能从浏览器工作。

所以我使用从我签名应用程序的keystore获得的SHA1指纹来制作Android API密钥。 我从控制台中打开了地图和地点API。 配额不超过。

所有这些,它仍然给我REQUEST_DENIED

我没有提到的是我有O2Auth激活 – 这是否改变了什么? 不应该像在应用程序中放置API密钥一样简单吗?

谢谢!

Google Places API目前不支持从Google API控制台生成的Android或iOS密钥。 目前仅支持服务器和浏览器密钥。

如果您想申请此支持,请提交Places API – function请求 。

虽然已经有了答案,但我认为社区可以做得更好。

我正在撕裂我的头发,这只是没有意义的..我正在做一个iOS / Android应用程序,所以我做了一个iOS / Android的密钥… 错了。

使用Google的Places API,甚至不考虑您的包标识符。

你真正想做的是这样的:(我使用新的用户界面)

1.login到https://cloud.google.com/console#/project

select您的项目名称,然后进入API的&Auth> API

确保您已启用Places API。 这是Places-API需要启用的唯一工作。 在这里输入图像描述

2.进入凭证

点击Public API Access下的CREATE NEW KEY 在这里输入图像描述

3.selectBROWSER KEY 在这里输入图像描述

4.点击Create,Nothing Else

保留HTTP引用框为空。

在这里输入图像描述

5.使用此处生成的密钥

此密钥将允许任何设备的用户通过您的开发者login访问API。 你可以在这里试试:(一定要用你生成的密钥replaceYOUR_KEY_HERE

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=Food%20Sh&sensor=false&radius=500&location=0,0&key=YOUR_KEY_HERE 

6.享受

现在,您可以在Android / iOS设备上使用上述url。

https://developers.google.com/places/training/autocomplete-android

存储您的API密钥

虽然上面的代码演示了如何直接在Android应用和Places自动填充服务之间进行通信,但您不应该将您的Places API密钥存储在您的应用中。

因此,您应该构build一个存储您的API密钥并代理Places API服务的Web应用程序。 为了确保您的Android应用程序和代理Web服务之间的通信安全,您应该要求用户validation您的代理Web服务。 您的Android应用程序可以安全地存储用户凭据并将其传递到您的Web服务,或者用户可以通过Android WebViewlogin到您的Web应用程序。

对于后一种方法,您的Web应用程序应创build并返回一个用户身份validation令牌到您的Android应用程序,然后您的Android应用程序应随后将此令牌传递给您的代理Web服务。

在Google开发控制台中,您应该能够find“Places API”和“Places API for Android”

开发控制台搜索

请务必使用“Android的Places API”

出于某种原因,“API for Android”隐藏在API列表中,但可以使用search进行访问。

我有同样的问题,我通过离开来解决它

接受来自这些HTTP引用者(网站)的请求(可选)

在浏览器键空白

我还是个新手,所以我不能发表评论,但为了说明Moe的回答,我解决了一些类似的Google Maps API有关URL查询的问题(针对使用Volley的方向),步骤如下:

  1. 获取Android API密钥(包括Google Maps Directions API)。
  2. 获取“服务器”API密钥(这似乎是通过使用“HTTP引用者”的关键限制创build的 – 实际上,它只是用于通过HTTP发布URL查询)。
  3. 将Android API密钥作为meta-data标记存储在AndroidManifest.xmlapplication标记中,其中android:name="com.google.android.maps.v2.API_KEY"android:value作为密钥。 这用于直接与Maps API交互(减去URL查询)。
  4. 每当发出URL查询时,请使用服务器API密钥。

我不确定这是否也适用于Places API的URL查询,如果您只需要服务器API密钥,或者有更好的解决scheme,但是这对我有用。

我想它只是第一个键 – 不限于Android的。