App für Facebook-Login falsch konfiguriert: Android Facebook-Integrationsproblem

76

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.

Facebook Fehlermeldung

Ich verstehe nicht, was das Problem ist, ob es mit der Android-Version zusammenhängt oder was.

Wie kann ich dieses Problem beheben?

Arun Badole
quelle
4
Sind Sie sicher, dass es nicht mit SSO zusammenhängt? Ich hatte das gleiche Problem, bei dem es gut funktionierte, wenn die FB-App nicht installiert war, aber als die FB-App installiert war, wurde der obige Fehler angezeigt.
Christer Nordvik
4
@ AB1209, die akzeptierte Antwort ist die falsche Antwort auf Ihre Frage. Meine Antwort finden Sie weiter unten. Verwenden Sie die akzeptierte Antwort nicht als Lösung.
Jesse Chen
2
@ JesseChen, vielen Dank für Ihre Anleitung.
Arun Badole
@ AB1209 hii können Sie die Antwort einfach nicht akzeptieren, wenn jemand wissen möchte, dass er es möglicherweise falsch macht ...
BBdev
1
In der Tat tritt dieser Fehler auch in Facebooks eigenen SDK-Beispielen auf! Stelle dir das vor.
Igor Ganapolsky

Antworten:

90

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):

D / Facebook-authorize (24739): Anmeldung fehlgeschlagen: invalid_key: Nicht übereinstimmende Android-Schlüssel. Ihr Schlüssel "uk3udeH7vrOGNFH2FJjdJbdWJWI" stimmt nicht mit den in Ihren Anwendungseinstellungen angegebenen zulässigen Schlüsseln überein. Überprüfen Sie Ihre Anwendungseinstellungen unter http://www.facebook.com/developers

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.

Jesse Chen
quelle
5
Hallo, das ist Shireesh von Facebook. Ich stimme Jesse hier zu. Bitte folgen Sie hier nicht der akzeptierten Antwort. Es ist definitiv ein Einstellungsproblem mit Ihrer App. Protokollieren Sie den Fehler und sehen Sie sich die Details an. Es wird Ihnen helfen, das Problem sowohl auf Android als auch auf iOS zu beheben.
Shireesh Asthana
1
FWIW Ich hatte auch dieses Problem; Ich habe es behoben, indem ich alle Hashes entfernt, meine Entwicklungs- und Produktionsschlüssel neu erstellt und sie dem fb-Entwicklerportal hinzugefügt habe. +1 für diese Antwort
Nirvana Tikku
1
Problem gelöst. Als Sie für die Eingabe. Ich bin neu in der Android-Entwicklung. Die von mir bereitgestellte Lösung "löst" das Problem, bietet aber andere Probleme.
rmcc
1
Ahhh, ich glaube, mein Problem war, dass ich nur den Release-Key-Hash in meiner Facebook-App hatte, aber ich musste auch den Debug-Key-Hash einschließen. Wenn ich also im Debug-Modus lief, gab es mir immer wieder diesen Fehler. Obwohl ich Logcat nie dazu gebracht habe, mir diese Nachricht zu geben ...
WOUNDEDStevenJones
2
Dieser Typ weiß wovon er spricht. Ich hatte das gleiche Problem und stellte fest, dass mein Token / Schlüssel / was auch immer aufgrund einer schlechten Version von openSSL falsch war. Einmal behoben, verschwand diese Nachricht. Danke Jesse!
Evan R.
15

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.

Pandabear
quelle
2
Die eine Lösung, die für mich funktioniert hat ... Das openssl-0.9.8e X64 ist wichtig.
Baseer
2
Ich hatte dieses Problem, die k-Version erzeugte einen ungültigen Hash. Vielen Dank, dass Sie dies gefunden haben!
SimpsOff
2
Ich liebe dich, das hat nur zuletzt geholfen.
Prateek
12

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.

Reijo Korhonen
quelle
8

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.

rmcc
quelle
Dies funktioniert danke. Aber ich hoffe, bald wird Facebook das Problem lösen.
Arun Badole
4
Hallo allerseits, ich arbeite bei Facebook und wir empfehlen nicht, diesen Hack zu verwenden. Dies ist ein Sicherheitsrisiko und kann die Facebook-Anmeldeinformationen Ihres Benutzers gefährden. Ich habe unten eine ausführlichere Antwort gepostet.
Jesse Chen
5

Ich hatte das gleiche Problem, nachdem wir 24 Stunden und viel gesucht hatten, verwenden wir diese Methode, um mein Problem zu lösen.

  1. Überprüfen Sie die aktuelle Bundle-ID Ihres Xcode-Projekts, zum Beispiel: com.yourcompanyname.yourappname

  2. Verwenden Sie zum Erstellen einer App in Facebook dieselbe com.yourcompanyname.yourappname-Bundle-ID (siehe Anhang).

Geben Sie hier die Bildbeschreibung ein

9to5ios
quelle
Dies ist ANdroid, nicht iOS
jesses.co.tt
3

Ich hatte dieses Problem erst vor wenigen Minuten selbst auf 4.0.4 und es scheint sich von selbst gelöst zu haben.

Haupman
quelle
Genau das gleiche hier. Ich denke, Facebook hatte einen Schluckauf.
Sander van't Veer
Fremder hier - eines meiner Geräte zeigt dieses Problem. Der andere meldet sich gut an. Der Code ist 100% gleich. Seit ihrem Börsengang sind die Dinge bergab gegangen :)
Vaiden
Ich habe das gleiche Problem. wenn Facebook App. installiert ist diese Meldung angezeigt.
Augen
3

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

Nitin Bansal
quelle
2

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.)

Gnobal
quelle
1

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.

Niklas Mencke
quelle
1

Auf Debian-Systemen wie Ubuntu verwenden Sie das keytoolvon javagefunden unter Verzeichnis /usr/lib/jvm/jdk*.*.*/bin/keytoolund 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.

laaptu
quelle
1

Normalerweise kann dieses Problem mit zwei Überprüfungen gelöst werden:

  • Markieren Sie in der Facebook-Konsole, um die Facebook-Konfiguration live zu veröffentlichen
  • Nicht übereinstimmende API-Schlüssel
aorlando
quelle
1

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
Jonathan Ogle-Barrington
quelle
0

Ich habe eine ToastAusnahme gemacht und festgestellt, dass heute eine Ausnahme für die Nichtübereinstimmung von Schlüsseln ausgelöst wird. Der Schlüssel wurde auf der FBApp-Seite hinzugefügt und funktioniert einwandfrei

Hari
quelle
0

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.

Michael Assraf
quelle
0

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!

Sven Haiges
quelle
0

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:

  1. Facebook-Login aktiviert

  2. Die Bundle-ID muss mit der App identisch sein

Samwize
quelle
0

Es handelt sich um ein Keystore-Problem. Konfigurieren Sie Ihre Eclipse so, dass sie denselben Keystore verwendet, für den die App konfiguriert wurde.

Ein Bewusstsein
quelle
Warum wird der keyhash debug.keystore verwendet? Soll die App nach der Veröffentlichung nicht den Keyhash aus der Keystore-Datei verwenden, mit der die Anwendung signiert wurde?
Rameez Hussain
0

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.

Srinivas Kattimani
quelle