Mon application utilise Facebook Api pour la connexion de l'utilisateur. Sur le développement cela fonctionne bien, mais lorsque je l'ai téléchargé sur Google Play, il cesse de fonctionner.
Voici le journal des erreurs:
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): Exception during service
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): com.facebook.http.protocol.ApiException: Key hash XXXXXXX does not match any stored key hashes.
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.ApiResponseChecker.b(ApiResponseChecker.Java:83)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.ApiResponseChecker.a(ApiResponseChecker.Java:162)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.ApiResponse.g(ApiResponse.Java:239)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.Java:272)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.Java:29)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.ApiResponseHandler.a(ApiResponseHandler.Java:56)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.ApiResponseHandler.handleResponse(ApiResponseHandler.Java:29)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.common.FbHttpRequestProcessor.a(FbHttpRequestProcessor.Java:280)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.common.FbHttpRequestProcessor.a(FbHttpRequestProcessor.Java:141)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.common.FbHttpRequestProcessor.b(FbHttpRequestProcessor.Java:103)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.common.FbHttpRequestProcessor.a(FbHttpRequestProcessor.Java:196)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.SingleMethodRunnerImpl.a(SingleMethodRunnerImpl.Java:374)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.SingleMethodRunnerImpl.a(SingleMethodRunnerImpl.Java:151)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.AbstractSingleMethodRunner.a(AbstractSingleMethodRunner.Java:18)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.katana.server.handler.PlatformOperationHandler.c(PlatformOperationHandler.Java:367)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.katana.server.handler.PlatformOperationHandler.a(PlatformOperationHandler.Java:260)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.fbservice.service.BlueServiceQueue.e(BlueServiceQueue.Java:299)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.fbservice.service.BlueServiceQueue.d(BlueServiceQueue.Java:53)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.fbservice.service.BlueServiceQueue$3.run(BlueServiceQueue.Java:230)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:422)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at Java.util.concurrent.FutureTask.run(FutureTask.Java:237)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.common.executors.ListenableScheduledFutureImpl.run(ListenableScheduledFutureImpl.Java:59)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at Android.os.Handler.handleCallback(Handler.Java:733)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at Android.os.Handler.dispatchMessage(Handler.Java:95)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at Android.os.Looper.loop(Looper.Java:137)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at Android.os.HandlerThread.run(HandlerThread.Java:61)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): Failed to send
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): com.facebook.fbservice.service.ServiceException: API_ERROR: API_ERROR
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at com.facebook.fbservice.ops.BlueServiceOperation.c(BlueServiceOperation.Java:640)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at com.facebook.fbservice.ops.BlueServiceOperation.c(BlueServiceOperation.Java:48)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at com.facebook.fbservice.ops.BlueServiceOperation$2.run(BlueServiceOperation.Java:605)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at Android.os.Handler.handleCallback(Handler.Java:733)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at Android.os.Handler.dispatchMessage(Handler.Java:95)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at Android.os.Looper.loop(Looper.Java:137)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at Android.app.ActivityThread.main(ActivityThread.Java:4998)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at Java.lang.reflect.Method.invokeNative(Native Method)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at Java.lang.reflect.Method.invoke(Method.Java:515)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:777)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:593)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at dalvik.system.NativeStart.main(Native Method)
Se pourrait-il que la clé de hachage ait changé d'une manière ou d'une autre?
Vous avez suivi les étapes prévues par facebook pour la création d'une application de connexion?
Vous avez besoin d'un 'Production de clés' obtenue à partir de votre magasin de clés de publication:
En ligne de commande:
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
Et ajoutez cette clé sur les options de la page de l'application facebook.
Plus d'informations: Documents Facebook
J'ai passé une journée entière à essayer de comprendre pourquoi cela ne fonctionnait pas ...
Lors de la génération de la clé de hachage pour la production, vous devez utiliser openssl-0.9.8e_X64.Zip sous Windows, vous ne pouvez pas utiliser openssl-0.9.8k_X64.Zip.
Les versions produisent différentes clés de hachage, pour une raison quelconque 9.8k ne fonctionne pas correctement ... 9.8e ne
Cela donnait la mauvaise clé pour moi.
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
Une solution de contournement qui a fonctionné pour moi était la suivante: 1. Mettez ce code dans votre activité de lancement
private void printKeyHash(){
// Add code to print out the key hash
try {
PackageInfo info = getPackageManager().getPackageInfo(
"YOUR_PACKAGE_NAME",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
Log.d("KeyHash:", e.toString());
} catch (NoSuchAlgorithmException e) {
Log.d("KeyHash:", e.toString());
}
}
J'espère que ça aide quelqu'un.
Vous pouvez également simplement extraire le hachage manquant de la trace de pile de ApiException: Key hash XXXXXXX does not match any stored key hashes
. Là vous l'avez déjà, il ne manque que le =
à la fin. Alors, prenez XXXXXXX =.
Cela fonctionne bien pour moi
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
Où
<RELEASE_KEY_ALIAS>
est votre nom d'alias lors de la création d'une application signée.
Et
<RELEASE_KEY_PATH>
is Emplacement dans l'image ci-dessous Et puis entrez le mot de passe est clé créer mot de passe dans l'image ci-dessous au lieu de Android
Les solutions ci-dessus sont correctes à un point. Mais si quelqu'un est toujours confronté à un problème. Supprimez la clé du profil de développeur et rajoutez-la à nouveau à la fin, en appuyant sur Entrée. Vous devez ajouter la clé dans les paramètres et le développeur.
Je faisais face à des problèmes avec la version de l'application à Google Play et en utilisant la clé de libération