web-dev-qa-db-fra.com

La clé API Google Adresses pour Android ne fonctionne pas dans les applications du Play Store.

J'ai récemment _ { lancé une application Android } _ qui utilise le widget/l'API Google Places à saisie semi-automatique. Dans le cadre de la configuration, j'ai ajouté la clé API au fichier manifeste de mon Android:

<application>
    ...
    <meta-data
        Android:name="com.google.Android.geo.API_KEY"
        Android:value="MY_KEY_HERE"/>
</application>

De plus, dans la console Google Developers, j'ai activé cette clé d'API pour les appareils Android uniquement, mais je ne me suis pas limité à une API particulière. J'ai également entré le nom de package correct et le hachage SHA-1 pour mon application. Maintenant, j'ai le problème suivant:

  • Lorsque je déploie l'application sur un téléphone Android directement à partir d'Android Studio, les API de Google fonctionnent. Cela est vrai que j'utilise la variante de mode débogage ou version.
  • Lorsque je publie un fichier APK du même code exact sur le Play Store, puis installe l'application, tout fonctionne à l'exception de l'API de saisie semi-automatique de Google, qui est en panne. Lorsque vous essayez d'y accéder, il se ferme immédiatement.

Je suis certain que ce que j'ai déployé sur le Play Store est en fait la même application fonctionnant localement, car j'avais récemment effectué quelques correctifs mineurs pour l'interface utilisateur, et ceux-ci apparaissaient également dans la version du magasin. J'ai vérifié à plusieurs reprises que la clé correcte est celle qui apparaît dans le fichier manifeste.

Je suis incapable d'expliquer cela. Ce problème est particulièrement difficile car tout fonctionne à partir d'Android Studio. Par conséquent, je ne peux pas faire quelque chose comme entrer dans le débogage et essayer d'attraper une exception.

Si vous avez une certaine connaissance d'Android et de la saisie semi-automatique et que vous rencontrez un problème similaire à celui-ci, votre réponse est la bienvenue.

8
Tim Biegeleisen

La réponse de @NullPointer est fonctionnellement correcte et corrige effectivement mon problème. Mais pour donner une réponse plus directe à ma propre question, la cause fondamentale du problème est liée à des procédures sensiblement différentes pour la configuration des API Google pour une version de débogage locale d'une application Android et une version finale de la même application.

Une partie de la confusion ici a à voir avec la console Google elle-même qui dit:

Ensuite, utilisez la commande suivante pour obtenir l’empreinte (SHA-1): 

keytool -list -v -keystore mystore.keystore

Lorsque vous créez et testez une application localement, en mode débogage, si vous exécutez keytool sur le fichier de clés de débogage et que vous collez le hachage SHA-1 dans la console Google, l'API fonctionnera. Après avoir passé plusieurs mois ou plus sur une base de code, et que les APIs semblent très stables, il est alors surprenant de savoir ce qui se passera ensuite lors de la répétition de ces étapes avec la version APK.

C'est une surprise, car suivre les mêmes étapes ne fonctionnera pas pour l'application de publication. En effet, le Google Play Store abandonne votre fichier APK avec une clé différente, qui a donc un hachage SHA-1 différent. Pour trouver le hachage SHA-1 qui doit être utilisé, vous pouvez vous rendre à Release management -> App signing dans la console Google Play. Faites cela après avoir publié votre application et attendu 10 à 15 minutes pour l'actualiser. Ensuite, collez simplement ce SHA-1 dans la console API Google, et c'est parti.

A propos, ma question est très similaire à Une application publiée sur le Play Store ne peut pas communiquer avec l'API Google Maps ni avec l'API Facebook , même si peu d'explications ont été données pour expliquer pourquoi une API Google pourrait fonctionner en mode débogage. mais pas sur le Play Store. Je tiens d'ailleurs à remercier @RohitChauhan qui a collé un commentaire contenant un lien vers cette question.

1
Tim Biegeleisen

Votre déclaration en question ===> J'ai également entré le nom du package et le hachage SHA-1 corrects pour mon application

Problème: En fait, jusqu'à présent, vous venez de signer votre application avec votre clé upload mais pour Play Store, vous devez utiliser google créé SHA-1.

Voici une explication plus détaillée

Fonctionnement de la signature d'applications sur Google Play. [ Document Link ]

Etape 1: Créer une clé de téléchargement

Étape 2: Préparez votre publication

Étape 3: Téléchargez votre application signée

Étape 4: enregistrez votre clé de signature d'application auprès des fournisseurs d'API

_ {Avant que l'application soit livrée aux utilisateurs, Google Play supprimera la signature de votre clé de téléchargement et vous reconnectera avec une nouvelle clé.

Cela signifie que vous signez votre application avec votre clé de téléchargement. Ensuite, Google vérifie et supprime la signature de la clé de téléchargement. Enfin, Google re-signe l'application avec la clé de signature d'origine que vous avez fournie et transmet votre application à l'utilisateur.

Donc, pour résoudre votre problème, vous devez effectuer ces étapes supplémentaires après avoir envoyé et approuvé votre application sur Google Play. 

  1. Sélectionnez votre application à partir de la console Google Play, sélectionnez Outils de développement -> Gestion des versions -> Signature de l'application.

  2. Copiez le premier certificat SHA-1 émis par Google Play après le téléchargement de l'application.

  3. Accédez à la console Google et accédez à votre projet.

  4. Sélectionnez votre clé API et collez le SHA-1 après le nom du paquet.

2
NullPointer

vous pouvez essayer ces différentes solutions, peut-être que cela fonctionne pour vous

Solution - 1

essayez de sauvegarder le journal dans un fichier texte pour chaque événement tel que onError, OnPlaceSelected, onConnectionFailed, OnConnection le fichier journal, je suis sûr que si cela ne fonctionne pas, je dois afficher un problème dans le fichier journal

Solution - 2

Libérer APK et déboguer APK a différents SHA1 et différentes clés d'API pour les services Google. Les deux d'entre eux doivent être ajoutés à la console

Solution - 3

ou maintenant vous pouvez utiliser intent pour la fonctionnalité de complétion automatique

int PLACE_AUTOCOMPLETE_REQUEST_CODE = 1;
...
try {
Intent intent =
        new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
                .build(this);
startActivityForResult(intent, PLACE_AUTOCOMPLETE_REQUEST_CODE);
} catch (GooglePlayServicesRepairableException e) {
// TODO: Handle the error.
} catch (GooglePlayServicesNotAvailableException e) {
// TODO: Handle the error.
} 

Pour plus de détails, regardez ici - https://developers.google.com/places/Android-sdk/autocompleteand lisez attentivement

Solution - 4 Enfin, essayez d’afficher le nom de lieu sous la forme Toast avec une latitude et une longitude personnalisées sans autocomplétion pour vérifier si nous recevons des données du serveur ou non.

J'espère que cela vous sera utile

1
Rohit Chauhan

Je pense que le problème vient de l'absence de SHA-1 dans votre console Google, à l'endroit où vous avez déjà activé les lieux de l'API. Il devrait y avoir de la place pour ajouter la version SHA-1 (clé). Vous pourrez alors voir Google Adresses sur d'autres appareils.

Pour générer SHA-1, il existe un script Gradle dans Android Studio. Cliquez sur la barre de gradation située à droite d'Android Studio. Sélectionnez le nom de votre application, ouvrez tasks>Android>signingReport. Toutes les touches SHA-1 seront sorties.

 enter image description here

0
deadfish