问题
I\'m trying to make an Autocomplete field which should fetch cities as the user types, by using the Google Places API as described in this tutorial: https://developers.google.com/places/training/autocomplete-android
You\'ve probably found this question around many times before as I did, but none of the answers helped me. Here are the things you should know:
The URL is https://maps.googleapis.com/maps/api/place/autocomplete/json?sensor=false&key=myKey&components=country:ro&input=whatTheUserTypes
Please don\'t reply by saying you replaced the API key with your own and it worked - the API key which goes there must be Android specific and won\'t work from a browser.
So did I make the Android API key using the SHA1 fingerprint obtained from the keystore I signed the app with. I turned on Maps and Places APIs from the console. The quota isn\'t exceeded.
All those and it still gives me REQUEST_DENIED
What I didn\'t mention is that I have O2Auth activated - does that change anything? Shouldn\'t it be as simple as putting the API key in the app?
Thanks!
回答1:
The Google Places API does not currently support Android or iOS keys generated from the Google APIs Console. Only Server and Browser keys are currently supported.
If you would like to request this support, please file a Places API - Feature Request.
回答2:
Although this has been answered, I think the community could do better.
I was tearing my hair out about this, it just didn't make sense to me.. I was making an iOS/Android App, so I made an iOS/Android Key... Wrong.
With Google's Places API, your bundle identifier isn't even considered.
What you really want to do is this: (I'm using the new User Interface)
1. Log into https://cloud.google.com/console#/project
Select your Project Name, then go into API's & Auth > APIs
Make sure you have Places API Turned on. This is the only thing that needs to be turned on for Places-API to work.
2. Go into Credentials
Click CREATE NEW KEY under Public API Access
3. Select BROWSER KEY
4. Click Create, Nothing Else
Leave the HTTP Refer box empty.
5. Use the Key Generated here
This key will allow ANY user from any device access to the API via your Developer login. You can try it out here: (Be sure to replace YOUR_KEY_HERE with your generated Key)
https://maps.googleapis.com/maps/api/place/autocomplete/json?input=Food%20Sh&sensor=false&radius=500&location=0,0&key=YOUR_KEY_HERE
6. Enjoy
Now you can use that URL above in your Android/iOS device.
回答3:
https://developers.google.com/places/training/autocomplete-android
Storing your API key
Although the above code demonstrates how to communicate directly between an Android app and the Places Autocomplete service, you should not store your Places API key with your app.
You should therefore build a web application that stores your API key and proxies the Places API services. In order to secure communication between your Android app and the proxy web service, you should require user authentication to your proxy web service. Your Android app can securely store user credentials and pass them to your web service, or the user can log into your web app via an Android WebView.
For the latter approach, your web app should create and return a user authentication token to your Android app, and your Android app should subsequently pass this token to your proxy web service.
回答4:
In Google dev console, you should be able to find both "Places API" and "Places API for Android"
Make sure to use "Places API for Android"
For some reason, "Places API for Android" is hidden in the API list, but can be accessed using search.
回答5:
I had the same issue , I fix it by leaving
Accept requests from these HTTP referrers (web sites) (Optional)
in browser key Empty
回答6:
I am still new, so I cannot comment, but to shed some light on Moe's answer, I resolved some similar Google Maps API issues regarding URL queries (for directions, using Volley) with the following steps:
- Get Android API Key (including Google Maps Directions API in my case).
- Get "Server" API Key (which seems to be created by using a key restriction of "HTTP referrers" these days - really, it's just used to issue URL queries through HTTP).
- Store the Android API key as a
meta-datatag in theapplicationtag inAndroidManifest.xmlwithandroid:name="com.google.android.maps.v2.API_KEY"andandroid:valueas your key. This is used for direct interaction with the Maps API (minus URL queries). - Use the server API key whenever issuing URL queries.
I am not sure if this also applies to URL queries for the Places API, if you only need the server API key, or if there is a better solution, but this worked for me.
I imagine that it works with just the first key - the one not restricted to Android.
回答7:
Inside Google Cloud Console type Places and Activate it. Create an API Key and insert it onto your Android Studio App as you would do normally. That`s it.
来源:https://stackoverflow.com/questions/14654758/google-places-api-request-denied-for-android-autocomplete-even-with-the-right-a