Ich habe meine Anwendung in Facebook integriert und verwende dafür die Graph-API von Facebook . Ich rufe Profil- und Freundesinformationen ab. Auf meinem Gerät mit Android 2.3 (Gingerbread) funktioniert es einwandfrei, aber kürzlich hat mein Kunde ein Problem, als er versucht, über meine App eine Verbindung zu Facebook herzustellen. Er hat Android 4.0 (Ice Cream Sandwich) auf seinem Gerät. Wenn er in der App auf eine Schaltfläche klickt, die ihn zum Facebook-Anmeldebildschirm führt, erhält er nach dem Anmelden eine Nachricht:
Meine App ist für die Facebook-Anmeldung falsch konfiguriert. Drücken Sie OK, um zur Anwendung zurückzukehren, ohne eine Verbindung zu Facebook herzustellen.
Ich verstehe nicht, was das Problem ist, ob es mit der Android-Version zusammenhängt oder was.
Wie kann ich dieses Problem beheben?
Antworten:
Ich arbeite bei Facebook und dies ist ein wichtiges Thema, das angegangen werden muss. Die andere Antwort auf diese Frage legt nahe, dass das Deaktivieren von SSO sehr schlecht ist und Ihre App für schädliche Apps öffnet, die die Facebook-Anmeldeinformationen Ihres Benutzers stehlen können.
Der Hack startet einen WebView-Dialog zu Facebook ohne SSO, und der Benutzer muss seine Anmeldeinformationen in diesen Dialog eingeben. Schädliche Apps können diese Informationen dann leicht stehlen. Es wird immer empfohlen, Facebook SSO korrekt zu implementieren, um sicherzustellen, dass Ihre App sicher ist und die sensiblen Daten Ihres Benutzers schützt.
Vor dem Hinzufügen dieser Fehlermeldung wird der Dialog automatisch ohne Warnung geschlossen und schlägt stillschweigend fehl. Wir haben diese Fehlermeldung hinzugefügt, um visuell anzuzeigen, dass ein Problem mit Ihrer App-Konfiguration in Ihrem Facebook-App-Dashboard vorliegt. Wenn Sie unter Android Ihre LogCat überprüfen, werden Sie feststellen , dass nach dem Drücken von "Okay" eine Fehlermeldung angezeigt wird, die eine technischere Beschreibung der Ursache für das Fehlschlagen der Authentifizierung enthält.
Wenn Sie beispielsweise unser Hackbook-Beispiel verwenden und keine eigene APP_ID in der Quelle angegeben und Ihren Hash-Schlüssel nicht zum Dashboard hinzugefügt haben, wird dieser Fehler in LogCat angezeigt, nachdem Sie im nativen SSO-Dialogfeld auf "Okay" geklickt haben (falls Util.ENABLE_LOG wird auf true gesetzt):
Wir haben die visuelle Fehlermeldung hinzugefügt, um Ihnen zu helfen. Dies bricht theoretisch frühere Implementierungen nicht, wenn es von Anfang an korrekt implementiert wurde . Wenn diese Fehlermeldung angezeigt wird, bedeutet dies, dass Sie Ihre App-Einstellungen in Ihrem Dashboard nicht korrekt konfiguriert haben .
Überprüfen Sie Ihren Android-Klassen- / Paketnamen, Ihre Android-Hash-Schlüssel usw. Sie werden diese Meldung nicht sehen, wenn Sie alles richtig gemacht haben.
Zusammenfassend wird diese Fehlermeldung angezeigt, weil ein Problem mit Ihrer App-Konfiguration vorliegt, z. B. eine Nichtübereinstimmung zwischen den Android-Hash-Schlüsseln in Ihrem Dashboard. Bevor Facebook diese Fehlermeldung hinzufügte, wurde der Dialog gestartet, dann automatisch geschlossen und schlug fehl. Um dies zu beheben, überprüfen Sie Ihr LogCat auf Fehlermeldungen und stellen Sie sicher, dass alles korrekt implementiert ist. Sie können unsere Dokumentation lesen , um sicherzustellen, dass alles korrekt ist. Verwenden Sie nicht die akzeptierte Antwort auf diese Frage.
Sie können auch dem externen Fehlerbericht folgen, den ein Facebook-Entwickler für weitere Updates gemeldet hat.
quelle
Versuchen Sie es so einzustellen:
Laden Sie zuerst OpenSSL herunter (wenn Sie einen 64-Bit-Computer haben, müssen Sie openssl-0.9.8e X64 herunterladen , nicht die neueste Version, openssl-0.9.8k X64, da die Ausgabe nicht gültig ist). Extrahieren Sie Ihre Dateien, erstellen Sie den Ordner
openssl
, beispielsweise in C: /, und kopieren Sie dort Dateien.Finden Sie Ihren Weg zu Keytoo. Meins ist C: \ Programme \ Java \ jdk1.7.0_05 \ bin.
Finde deinen Weg zu
debug.keystore
. YHou kann sehen , was Weg ist , wenn Sie in Eclipse öffnen, Menü Fenster -> Einstellungen -> Android -> Bauen , und Sie werden sehen Standard - Debug - Schlüsselspeicher: -und der Pfad.Finde deinen Weg zu
openssl
. Meins ist C: \ openssl8e \ bin /.Öffnen Sie cmd und geben Sie Folgendes ein:
"C: \ Programme \ Java \ jdk1.7.0_05 \ bin \ keytool" -exportcert -alias androiddebugkey -keystore "C: \ Users \ User.android \ debug.keystore" | "C: \ openssl8e \ bin \ openssl" sha1 -binary | "C: \ openssl8e \ bin \ openssl" base64
Aund dann drücken Enter.
Passwort eingeben:
android
Sie erhalten Ihren Hash-Schlüssel für
debug.keystore
.Wenn Sie eine signierte APK exportieren und einen Schlüsselspeicher für die Anwendung erstellen, ersetzen Sie einfach in cmd debugkeystore alias durch Ihren Alias für die App, den Schlüsselspeicherpfad durch den Pfad zu Ihrem neu erstellten Schlüsselspeicher für die App und geben Sie das Kennwort für Ihre ein
app.keystore
. und Sie erhalten einen neuen Hash-Schlüssel für Ihre signierte App.quelle
Die Antwort von Jesse Chen ist in Ordnung. Facebooks SDK funktioniert gut, brechen Sie es nicht.
Ich bin erneut auf dieses Problem gestoßen und habe festgestellt, dass die Facebook SDK-Dokumentation korrigiert wurde und jetzt sehr gut ist. Jetzt wird erläutert, wie das Debuggen und Freigeben von Hash-Schlüsseln festgelegt werden kann. mach einfach was es sagt.
Unten ist meine alte Geschichte. Es fehlt, dass Sie zwei Hash-Schlüssel festlegen können, einen zum Debuggen und einen für eine signierte, freigegebene Anwendung für den alten Play Store .
Ich fand heraus , dass Problem war in der Facebook - SDK - Dokumentation in meinem Fall. Es führte uns dazu, den Debug-Schlüssel-Hash zu verwenden und ihn in die App-Konfiguration von Facebook zu integrieren. Hash wird dazu geführt:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Dies funktioniert einwandfrei, wenn Sie eine Anwendung von Eclipse aus synchronisieren oder ausführen .
Wenn Sie Ihre Anwendung jedoch in Andoid Play veröffentlichen, müssen Sie Ihren eigenen Publisher-Schlüssel verwenden, um die signierte APK-Datei zu exportieren. Mit dieser .apk ist der Hash in der Facebook App Console nicht mehr gültig! Sie müssen einen Hash für den Entwicklerschlüssel wie folgt erhalten:
keytool -exportcert -alias <developer alias> -keystore ~/.android/<developer keystore> | openssl sha1 -binary | openssl base64
Und legen Sie es im Android Key Hash in der Facebook-App-Konsole für Ihre veröffentlichte Anwendung ab. Danach funktioniert SSO wieder einwandfrei für Ihre signierte APK-Datei.
quelle
Soweit ich das beurteilen konnte, handelt es sich um ein Facebook-Problem, über das berichtet wurde. Das Problem besteht jedoch weiterhin.
Ein Weg , um diesen (getestet auf 2.3.3) ist auf dem Facebook - SDK, die Suche nach den 2 hacken authorise Methoden und die Änderung DEFAULT_AUTH_ACTIVITY_CODE zu FORCE_DIALOG_AUTH . Dadurch wird die Single Sign On-Funktion deaktiviert.
Wenn Sie es vorziehen
public void authorize(Activity activity, String[] permissions, int activityCode, final DialogListener listener)
und deaktivieren Sie startSingleSignOn Teil . Es ist vorzuziehen, dies nicht zu tun, da Facebook das Problem schließlich lösen wird und Sie nur die alte Konstante zurücksetzen müssen.
BEARBEITEN
Diese Lösung wirft Sicherheitsprobleme auf. Überprüfen Sie die Antwort von Jesse Chen.
quelle
Ich hatte das gleiche Problem, nachdem wir 24 Stunden und viel gesucht hatten, verwenden wir diese Methode, um mein Problem zu lösen.
Überprüfen Sie die aktuelle Bundle-ID Ihres Xcode-Projekts, zum Beispiel: com.yourcompanyname.yourappname
Verwenden Sie zum Erstellen einer App in Facebook dieselbe com.yourcompanyname.yourappname-Bundle-ID (siehe Anhang).
quelle
Ich hatte dieses Problem erst vor wenigen Minuten selbst auf 4.0.4 und es scheint sich von selbst gelöst zu haben.
quelle
Obwohl spät, immer noch nützlich: * Hier ist die richtige Vorgehensweise (für den Debug-Schlüssel für die Veröffentlichung entsprechend ändern): *
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\<User>\.android\debug.keystore" > <Drive letter>:\debug.txt openssl sha1 -binary "<Drive letter>:\debug.txt" > "<Drive letter>:\debug_sha.txt" openssl base64 -in "<Drive letter>:\debug_sha.txt" > "<Drive letter>:\debug_base64.txt"
Der Hash befindet sich in der zuletzt generierten Datei: debug_base64.txt .... öffne ihn und kopiere den Hash.
Denken Sie daran, "" und durch Ihren Benutzernamen und Laufwerksbuchstaben Ihrer Wahl zu ersetzen
quelle
Wenn Sie den Schlüssel-Hash erstellen, erhalten Sie möglicherweise etwas mit dem Gleichheitszeichen "=" am Ende, z. B. ga0RGNYHvNM5d0SLGQfpQWAPGJ8 = . Während Facebook das Gleichheitszeichen gerne als Teil des Schlüssel-Hash akzeptiert, müssen Sie es entfernen, damit es funktioniert.
Überprüfen Sie außerdem die akzeptierte Antwort auf Android Facebook SDK 3.0 und geben Sie an, dass "remote_app_id nicht mit der gespeicherten ID übereinstimmt", während Sie sich anmelden : Wenn Sie den Schlüssel-Hash für den Debug-Keystore erhalten, verwenden Sie das Kennwort "android". Andernfalls ist der Schlüssel-Hash falsch und Sie erhalten den in der Frage angegebenen Fehler (seien Sie nett und stimmen Sie die Antwort dort ab, wenn es Ihnen geholfen hat.)
quelle
In Bezug auf Apps, die mit OWN Keystore signiert wurden: Nachdem ich einige Stunden damit verbracht habe, dieses Problem zu lösen, habe ich es endlich verstanden und möchte eine Antwort für diejenigen geben, die noch leiden:
Meine Schritte: Ich habe meine App per Eclipse mit meiner eigenen Keystore-Datei (NICHT debug.keystore) signiert. Über die Befehlszeile und bekannte Befehle (keytool -exportcert -alias -keystore ~ / .android / | openssl sha1 -binary | openssl base64) habe ich den Schlüssel-Hash erfolgreich erhalten. Fügte den Schlüssel-Hash in das Entwickler-Dashboard ein und wartete einige Minuten -> Immer noch der gleiche FEHLER (wie in der obigen Frage angegeben). Ich habe mehrere verschiedene Keytools ausprobiert, auf mehreren JDKS usw. Nichts hat sich geändert.
Lösung: Ich habe das Debuggen im Manifest aktiviert und das Debuggen in Facebook SDK aktiviert. dann habe ich die apk mit meinem eigenen keystore signiert und auf ein echtes gerät hochgeladen. Ich habe das Gerät über USB verbunden und die DDMS-Perspektive geöffnet, um Logcat auf dem Gerät anzuzeigen.
Ich habe meine App gestartet und die Fehlermeldung angezeigt. Es druckt einen Schlüssel aus, der sich von dem von keytool generierten Schlüssel völlig unterscheidet. Ich habe diesen Schlüssel von logcat genommen, ihn in das Entwickler-Dashboard eingefügt und voila -> ALLES FUNKTIONIERT
Ich weiß immer noch nicht, warum dies passiert oder was den falschen Schlüssel verursacht, aber so funktioniert es für mich.
quelle
Auf Debian-Systemen wie Ubuntu verwenden Sie das
keytool
vonjava
gefunden unter Verzeichnis/usr/lib/jvm/jdk*.*.*/bin/keytool
und generieren so/usr/lib/jvm/jdk1.7.0/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Auf diese Weise erhalten Sie den authentischen Hash-Schlüssel, der unter Ihren App-Hash von Facebook gestellt werden kann.
quelle
Normalerweise kann dieses Problem mit zwei Überprüfungen gelöst werden:
quelle
Ich konnte das Problem lösen, das ich mit einer Fehlkonfiguration für Facebook auf Android hatte, indem ich sicherstellte, dass ich den richtigen Hash-Schlüssel für eine Release-Version hatte.
Um den Hash-Schlüssel der Release-Version zu erhalten, suchen Sie den Schlüssel, mit dem Sie die Anwendung signiert haben, und geben Sie wie folgt den Namen Ihres Keystore-Alias ein (ohne Klammern). Wenn Sie Ihren Alias nicht kennen, können Sie ihn finden, indem Sie Ihre App als signierte App exportieren. Der Alias befindet sich auf der zweiten Seite des Assistenten. Fügen Sie auch den Pfad zu Ihrem Keystore ein (ohne Klammern).
keytool -exportcert -alias [Alias of your keystore] -keystore [Path to keystore] | openssl sha1 -binary | openssl base64
quelle
Ich habe eine
Toast
Ausnahme gemacht und festgestellt, dass heute eine Ausnahme für die Nichtübereinstimmung von Schlüsseln ausgelöst wird. Der Schlüssel wurde auf derFB
App-Seite hinzugefügt und funktioniert einwandfreiquelle
Auch dieses Problem aufgetreten.
Gehen Sie einfach auf die Facebook - Entwickler begonnen bekommen Seite hier
und folgen Sie Schritt 4 - das Ding mit der Kommandozeile.
Hat für mich gearbeitet.
Genießen.
quelle
Ich hatte gerade das gleiche Problem und die Lösung erwies sich als super einfach. Als ich die App im Dashboard erstellte, hatte ich nur den Schlüssel-Hash für den Android-Debug-Keystore hinzugefügt. Dies alles funktioniert einwandfrei, wenn Sie die App in diesem Fall als Entwickler über ein USB-Kabel installieren.
Sobald Sie eine App im Play Store haben, verwenden Sie einen Produktionsschlüssel, um die App zu signieren. Dies bedeutet auch, dass Sie den Schlüssel-Hash des Produktionsschlüssels wie für den Debug-Schlüssel abrufen und als zweiten Hash zur Liste der nativen App-Hashes hinzufügen müssen.
Nur um sich daran zu erinnern, wie der Schlüssel-Hash funktioniert: keytool -exportcert -alias -keystore ~ / keys / android_keystore | openssl sha1 -binary | openssl base64
Hoffentlich hilft das!
quelle
Ich hatte ein ähnliches Problem, aber für iOS.
Die Lösung besteht darin, die Facebook-App auf dem Facebook-Entwickler-Daskboard zu konfigurieren.
Für iOS müssen zwei Dinge getan werden:
Facebook-Login aktiviert
Die Bundle-ID muss mit der App identisch sein
quelle
Es handelt sich um ein Keystore-Problem. Konfigurieren Sie Ihre Eclipse so, dass sie denselben Keystore verwendet, für den die App konfiguriert wurde.
quelle
Ich habe vor ein paar Tagen den gleichen Fehler erhalten. In meinem Fall lag es an einer Nichtübereinstimmung der Android-Schlüssel. Hier ist, wie ich es behoben habe, wenn es Ihnen auch helfen kann:
Öffnen Sie Util.java im Facebook SDK, setzen Sie
private static boolean ENABLE_LOG = true;
. Führen Sie nun Ihre App aus und geben Sie Ihre E-Mail-ID und Ihr Passwort ein. Facebook sendet eine Signatur zurück, wenn eine Schlüsselinkongruenz vorliegt. Sie finden diesen Schlüssel (Signatur) in LogCat . Kopieren Sie einfach diesen Schlüssel und fügen Sie ihn in das App-Dashboard ein. Das sollte das Problem beheben. Denken Sie daran,private static boolean ENABLE_LOG = true;
auf false zurückzusetzen.quelle