web-dev-qa-db-fra.com

Demande d'API Google Places refusée pour la saisie semi-automatique d'Android, même avec la bonne clé d'api

J'essaie de créer un champ de saisie semi-automatique qui devrait extraire les villes en tant que types d'utilisateurs, à l'aide de l'API Google Places, comme décrit dans ce didacticiel: https://developers.google.com/places/training/autocomplete-Android

Vous avez probablement déjà trouvé cette question à plusieurs reprises auparavant, mais aucune des réponses ne m'a aidé. Voici les choses que vous devriez savoir:

L’URL est https://maps.googleapis.com/maps/api/place/autocomplete/json?sensor=false&key=myKey&components=country:ro&input=whatTheUserTypes

Ne répondez pas en disant que vous avez remplacé la clé d'API par la vôtre et que cela a fonctionné - la clé d'API utilisée doit être spécifique à Android et ne fonctionnera pas à partir d'un navigateur. 

J'ai donc créé la clé d'API Android à l'aide de l'empreinte SHA1 obtenue à partir du magasin de clés avec laquelle j'ai signé l'application. J'ai activé les API Maps et Places depuis la console. Le quota n'est pas dépassé. 

Tous ceux-là et ça me donne toujours REQUEST_DENIED 

Ce que je n'ai pas mentionné, c'est que j'ai activé O2Auth - cela change-t-il quelque chose? Ne devrait-il pas être aussi simple que de mettre la clé API dans l'application? 

Merci! 

18
Stefan Malacu

L'API Google Adresses ne prend actuellement pas en charge les clés Android ou iOS générées à partir de la console API Google. Seules les clés de serveur et de navigateur sont actuellement prises en charge.

Si vous souhaitez demander cette assistance, veuillez créer un fichier Places API - Feature Request

26
Chris Green

Bien que cette question ait été résolue, je pense que la communauté pourrait faire mieux.

J'étais en train de m'arracher les cheveux à ce sujet, cela n'avait aucun sens pour moi .. Je réalisais une application iOS/Android, alors j'ai créé une clé iOS/Android ... Wrong.

Avec l'API Google Adresses, votre identifiant d'ensemble n'est même pas pris en compte.

Ce que vous voulez vraiment faire est ceci: (J'utilise la nouvelle interface utilisateur)

1. Connectez-vous à https://cloud.google.com/console#/project

Sélectionnez votre nom de projet, puis allez dans API & Auth> APIs

Assurez-vous que l'API Places est activée. C’est la seule chose à activer pour que Places-API fonctionne. enter image description here

2. Allez dans les informations d'identification

Cliquez sur CREATE NEW KEY sous Public API Access .enter image description here

3. Sélectionnez BROWSER KEY enter image description here

4. Cliquez sur Créer, rien d'autre

Laissez la zone HTTP Refer vide.

enter image description here

5. Utilisez la clé générée ici

Cette clé permettra à TOUT utilisateur de n’importe quel appareil d’accéder à l’API via votre identifiant de développeur. Vous pouvez l’essayer ici: (Assurez-vous de remplacer YOUR_KEY_HERE par votre clé générée)

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

Vous pouvez maintenant utiliser cette URL ci-dessus sur votre appareil Android/iOS.

93
Moe

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

Stocker votre clé API

Bien que le code ci-dessus montre comment communiquer directement Entre une application Android et le service Places Autocomplete, vous ne devriez pas Stocker votre clé API Places avec votre application.

Vous devez donc créer une application Web qui stocke votre clé d’API Et fournit des services de proxy aux services de l’API Place. Afin de sécuriser la communication Entre votre application Android et le service Web proxy, vous devez exiger une authentification Auprès de votre service Web proxy. Votre application Android peut Stocker en toute sécurité les informations d'identification de l'utilisateur et les transmettre à votre service Web, ou L'utilisateur peut se connecter à votre application Web via une vue Web Android.

Pour cette dernière approche, votre application Web doit créer et renvoyer un jeton d'authentification d'utilisateur À votre application Android. Votre application Android devrait ensuite Transmettre ce jeton à votre service Web proxy.

4
Arc

Dans la console de développement Google, vous devriez pouvoir trouver à la fois "Places API" et "Places API pour Android".

dev console search

Assurez-vous d'utiliser "Places API pour Android"

Pour une raison quelconque, "Places API pour Android" est masqué dans la liste des API, mais est accessible à l'aide de la fonction de recherche.

0
Singed

J'ai eu le même problème, je le répare en laissant 

Accepter les demandes de ces référents HTTP (sites Web) (facultatif)

dans la clé du navigateur vide

0
Mina Fawzy

Je suis toujours nouveau et je ne peux donc pas commenter, mais pour éclaircir la réponse de Moe, j'ai résolu certains problèmes similaires liés à l'API Google Maps concernant les requêtes d'URL (pour les instructions, à l'aide de Volley) en procédant comme suit:

  1. Obtenir la clé API Android (y compris l'API Google Maps Directions dans mon cas).
  2. Obtenez la clé API "Serveur" (qui semble avoir été créée à l'aide d'une restriction de "référents HTTP" de nos jours - en réalité, elle est simplement utilisée pour émettre des requêtes d'URL via HTTP).
  3. Stockez la clé d'API Android en tant que balise meta-data dans la balise application dans AndroidManifest.xml, avec Android:name="com.google.Android.maps.v2.API_KEY" et Android:value en tant que clé. Ceci est utilisé pour une interaction directe avec l'API Google Maps (requêtes moins URL).
  4. Utilisez la clé API du serveur lors de l’émission de requêtes d’URL.

Je ne sais pas si cela s'applique également aux requêtes d'URL pour l'API Places, si vous avez uniquement besoin de la clé d'API de serveur ou s'il existe une meilleure solution, mais cela a fonctionné pour moi.

J'imagine que cela fonctionne uniquement avec la première clé - celle qui n'est pas limitée à Android.

0
John Rattz