android - Warum verhält sich das Facebook Authentication SDK je nach Modus so unterschiedlich?




firebase firebase-authentication (4)

Ich habe eine Android-App im App Store. Es nutzt Firebase im Back-End und bietet Social Login über Facebook (und Google).

Vor kurzem hat sich Facebook mit mir in Verbindung gesetzt, um mich zu warnen, dass meine App beim Anmelden über Facebook abstürzt bzw. nicht mehr reagiert. Verwirrt machte ich mich an die Prüfung.

Was ich gefunden habe ist, dass, wenn ich den Facebook-Login ohne die installierte Facebook-App benutze, alles perfekt funktioniert. Dem Benutzer wird ein Browserfenster angezeigt, er kann sich anmelden und er wird zurück zu meiner App geleitet, und ich habe seine Identität. Natürlich habe ich das alles während der Entwicklung herausgefunden, wollte aber nur bestätigen, dass es noch funktioniert.

Aber als ich die Facebook-App installierte (etwas, das ich während der Entwicklung versäumt hatte), stellte ich fest, dass es nicht mehr funktioniert. Stattdessen wird der Benutzer zu dieser Seite weitergeleitet:

Für die Suche und Barrierefreiheit lautet der Text in diesem Bild:

Anmeldefehler: Beim Anmelden bei dieser Anwendung ist ein Fehler aufgetreten. Bitte versuchen Sie es später noch einmal.

Ich habe die Protokolle in diesem Fall überprüft und Folgendes festgestellt, das möglicherweise relevant ist, bin mir jedoch nicht sicher:

07-05 15:36:28.468   908  5828 I ActivityManager: START u0 {act=NATIVE_WITH_FALLBACK cmp=<<redacted>>/com.facebook.FacebookActivity (has extras)} from uid 10264
07-05 15:36:28.469   665   665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:28.470   665   665 D QCOM PowerHAL: Activity launch hint handled
07-05 15:36:28.495  4837  4837 W ActivityThread: handleWindowVisibility: no activity for token android.os.[email protected]
07-05 15:36:28.689   665   665 D QCOM PowerHAL: LAUNCH HINT: OFF
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue: Exception during service
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue: X.2LH: [code] 404 [message]: Key hash GtvUdcOKFRAE0RY0LIw5veCA+M8= does not match any stored key hashes. (404) [extra]: null
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.1eL.C(:93)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.2sO.C(:26)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.CvC.umA(:38)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.2yi.handleResponse(:224)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.1dO.run(:71)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.0r0.run(:2)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.1qG.run(:2)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.12V.run(:3)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at X.1xB.run(:12)
07-05 15:36:28.946 29406  4941 W fb4a.BlueServiceQueue:         at java.lang.Thread.run(Thread.java:764)
07-05 15:36:28.981   908  8581 I ActivityManager: START u0 {cmp=com.facebook.katana/.ProxyAuth (has extras)} from uid 10264
07-05 15:36:28.982   665   665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:28.983   665   665 D QCOM PowerHAL: Activity launch hint handled
07-05 15:36:29.022 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.[email protected]
07-05 15:36:29.037 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.037 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at X.05O.newActivity(:3382)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.037 29406 29406 E Instrumentation:       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.045   908  2933 I ActivityManager: START u0 {flg=0x2000000 cmp=com.facebook.katana/com.facebook.gdp.ProxyAuth (has extras)} from uid 10262
07-05 15:36:29.047   665   665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:29.068 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.[email protected]
07-05 15:36:29.069 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.069 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at X.05O.newActivity(:3382)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.069 29406 29406 E Instrumentation:       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.074   908  5828 I ActivityManager: START u0 {cmp=com.facebook.katana/com.facebook.gdp.LightWeightProxyAuthActivity (has extras)} from uid 10262
07-05 15:36:29.075   665   665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:29.121 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.[email protected]
07-05 15:36:29.125 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.125 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at X.05O.newActivity(:3382)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.125 29406 29406 E Instrumentation:       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.166  4837  4846 W System  : A resource failed to call end.
07-05 15:36:29.250   665   665 D QCOM PowerHAL: LAUNCH HINT: OFF
07-05 15:36:29.266   908   952 I ActivityManager: Displayed com.facebook.katana/com.facebook.gdp.LightWeightProxyAuthActivity: +237ms
07-05 15:36:29.266 29463 29463 W BackgroundBroad: type=1400 audit(0.0:9257): avc: denied { read } for name="stats" dev="proc" ino=4026533031 scontext=u:r:untrusted_app:s0:c6,c257,c512,c768 tcontext=u:object_r:proc_qtaguid_stat:s0 tclass=file permissive=0
07-05 15:36:29.447   492  1273 D SurfaceFlinger: duplicate layer name: changing Surface(name=6e58560 com.facebook.katana/com.facebook.gdp.LightWeightProxyAuthActivity)/@0x13e5ed5 - animation-leash to Surface(name=6e58560 com.facebook.katana/com.facebook.gdp.LightWeightProxyAuthActivity)/@0x13e5ed5 - animation-leash#1
07-05 15:36:29.456   492  1273 D SurfaceFlinger: duplicate layer name: changing Surface(name=Dim Layer for - Task=2317)/@0x8471ddb - animation-leash to Surface(name=Dim Layer for - Task=2317)/@0x8471ddb - animation-leash#1
07-05 15:36:29.465   908  2933 I ActivityManager: START u0 {cmp=com.facebook.katana/.gdp.WebViewProxyAuth (has extras)} from uid 10262
07-05 15:36:29.467   665   665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:29.469   665   665 D QCOM PowerHAL: Activity launch hint handled
07-05 15:36:29.507 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.[email protected]
07-05 15:36:29.509 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.509 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at X.05O.newActivity(:3382)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.509 29406 29406 E Instrumentation:       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.517   908  8581 I ActivityManager: START u0 {cmp=com.facebook.katana/.gdp.ProxyAuthDialog (has extras)} from uid 10262
07-05 15:36:29.519   665   665 D QCOM PowerHAL: LAUNCH HINT: ON
07-05 15:36:29.567 29406 29406 W ActivityThread: handleWindowVisibility: no activity for token android.os.[email protected]
07-05 15:36:29.569 29406 29406 E Instrumentation: Uninitialized ActivityThread, likely app-created Instrumentation, disabling AppComponentFactory
07-05 15:36:29.569 29406 29406 E Instrumentation: java.lang.Throwable
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.Instrumentation.getFactory(Instrumentation.java:1224)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at X.05O.newActivity(:3382)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2869)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.os.Handler.dispatchMessage(Handler.java:106)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.os.Looper.loop(Looper.java:193)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at android.app.ActivityThread.main(ActivityThread.java:6718)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at java.lang.reflect.Method.invoke(Native Method)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
07-05 15:36:29.569 29406 29406 E Instrumentation:       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
07-05 15:36:29.651   492   540 D SurfaceFlinger: duplicate layer name: changing com.facebook.katana/com.facebook.katana.gdp.ProxyAuthDialog to com.facebook.katana/com.facebook.katana.gdp.ProxyAuthDialog#1
07-05 15:36:29.697   492  1763 D SurfaceFlinger: duplicate layer name: changing Dim Layer for - Task=2317 to Dim Layer for - Task=2317#1
07-05 15:36:29.720   665   665 D QCOM PowerHAL: LAUNCH HINT: OFF
07-05 15:36:29.731   492   540 W SurfaceFlinger: Attempting to set client state on removed layer: Dim Layer for - Task=2317#0
07-05 15:36:29.731   492   540 W SurfaceFlinger: Attempting to destroy on removed layer: Dim Layer for - Task=2317#0

Ich habe die Verwendung des NATIVE_WITH_FALLBACK Modus bemerkt und zum WEB_ONLY in NATIVE_WITH_FALLBACK geändert. Das bringt mich zwar über das oben dargestellte ursprüngliche Problem hinaus, schafft aber ein anderes. Anstatt mich nach Anmeldedaten zu fragen, wird Folgendes angezeigt:

Wieder ist der Text:

Sie haben sich zuvor mit Facebook bei $ MY_APP angemeldet. Willst du weiter machen?

Wenn ich fortfahren ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL (es gibt keine andere Wahl als abzubrechen), ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL App zu mir zurück, aber Firebase ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL mir den Fehler ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL deutet darauf hin, dass das Konto bereits einem anderen Anbieter zugeordnet ist. Wenn ich die Firebase-Konsole einchecke, wird das Konto als Facebook-Konto angezeigt. Die Installation der Facebook-App lässt Firebase also vermuten, dass es sich um einen separaten Anbieter für soziale Netzwerke handelt.

Schließlich habe ich etwas verzweifelt versucht, den Authentifizierungsmodus auf WEB_VIEW_ONLY zu WEB_VIEW_ONLY . Das hat mir genau die gleichen Erfahrungen gebracht wie beim Einloggen ohne Facebook. Außerdem hat alles wie erwartet funktioniert.

Mein Problem ist, dass ich nicht ganz sicher bin, was die Auswirkungen all dessen sind (HINWEIS: siehe mein Update unten). Ich erinnere mich, dass ich irgendwo gelesen habe, dass ein natives Facebook-Login nichts mehr ist (oder vielleicht war es das Gegenteil und es sollte verwendet werden). Grundsätzlich bin ich sehr verwirrt und würde mich über Antworten auf folgende Fragen sehr freuen:

  • Ist die Verwendung von WEB_VIEW_ONLY akzeptabel?
  • Warum zeigt die Verwendung von NATIVE_WITH_FALLBACK den Fehler zu Beginn meines NATIVE_WITH_FALLBACK ?
  • Warum scheint WEB_ONLY dasselbe Konto wie einen anderen Anbieter zu behandeln?
  • Warum verhält sich das Facebook Login SDK in diesen Modi so unterschiedlich? Ich hielt sie für eine harmlose Präferenz , die keinen Einfluss auf die Authentifizierung selbst hatte, aber meine Güte, habe ich mich geirrt.

Beachten Sie, dass ich in allen Fällen die offiziellen Dokumente befolge , einschließlich der Verwendung der neuesten SDK-Version:

implementation 'com.facebook.android:facebook-login:[5,6)'

Vielen Dank für jede Hilfe.

UPDATE: Ich habe meine App auf WEB_VIEW_ONLY aktualisiert und erneut WEB_VIEW_ONLY . Facebook hat mir jetzt gesagt:

Ihre App verstößt jetzt gegen die Plattformrichtlinie 8.2: Native iOS- und Android-Apps, die die Facebook-Anmeldung implementieren, müssen unsere offiziellen SDKs für die Anmeldung verwenden. Stellen Sie sicher, dass Ihre App die neueste Version unseres SDK für die Anmeldung verwendet.

Also stecke ich gerade zwischen einem Felsen und einem harten Ort.


Hier ist die Erklärung für dieses Problem:

07-05 15: 36: 28.946 29406 4941 W fb4a.BlueServiceQueue: Ausnahme während des Betriebs 07-05 15: 36: 28.946 29406 4941 W fb4a.BlueServiceQueue: X.2LH: [Code] 404 [Nachricht]: Schlüssel-Hash = stimmt nicht mit gespeicherten Schlüssel-Hashes überein. (404) [extra]: null

Denken Sie daran, dass der in Ihrer Facebook-Anwendung konfigurierte Schlüssel-Hash mit dem Keystore (Zertifikat) zusammenhängt, mit dem Ihre Anwendung signiert ist.

Sie müssen den Key-Hash verwenden, mit dem Sie Ihre Anwendung signieren. Wenn Sie ihn nicht kennen, sollten Sie ihn erneut aus Ihrem Keystore beziehen:

https://developers.facebook.com/docs/android/getting-started/

Warum verhält sich das Facebook Login SDK in diesen Modi so unterschiedlich? Ich hielt sie für eine harmlose Präferenz, die keinen Einfluss auf die Authentifizierung selbst hatte, aber meine Güte, habe ich mich geirrt.

Im Web haben Sie keine Probleme, aber wenn Sie sich in einer Anwendung befinden, müssen Sie die Verwendung der Anwendung autorisieren. Für diese Implementierung in einer Android-App ist es sehr wichtig , dass Sie das Facebook SDK verwenden . In diesem Fall ist dies erforderlich um das Key-Hash-Zertifikat zu erhalten, mit dem Ihre Anwendung signiert ist.


Ihr Log sagt, dass der Key-Hash nicht übereinstimmt, so dass Sie den Key-Hash im Facebook-Entwicklerkonto hinzufügen müssen. Ich teile einen Code mit einer Funktion, die Sie nur aufrufen müssen, um das Log zu drucken ..

public void generatekeyhash() {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                getPackageName(),
                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 (PackageManager.NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}

Um Ihr Problem zu beheben, melden Sie sich bei Developer Accout > Facebook App > Settings Now an, fügen Sie den Anwendungs- hash in das Feld key hashes ein und speichern Sie die Konfigurationen. Führen Sie Ihre Anwendung aus und Sie werden feststellen, dass der Fehler behoben ist.

Der Screenshot ist möglicherweise hilfreich für die Anwendungseinstellungen.


Viele der Antworten hier bieten einen Teil der Lösung, aber ich glaube, dies ist die vollständige Lösung und Erklärung.

Das Problem, mit dem Sie konfrontiert sind, hat mit HashKey-Werten zu tun, die nicht mit dem Gerät übereinstimmen, auf dem Sie die apk erstellt haben . Der von Ihnen verwendete Computer, Mac, PC usw., auf dem das Build-Apk ausgeführt wird, hat einen anderen Hash-Schlüssel und dieser Hash-Schlüssel wird mit dem endgültigen Apk-Build verschmolzen, sodass die Facebook-Anmeldung nicht funktioniert, wenn das Build von einem anderen Computer aus durchgeführt wird.

Die Lösung besteht darin, zwei Dinge zu tun.

Erstens müssen Sie jedes Mal, wenn Sie einen apk-Build auf einem neuen Computer erstellen, die HashKey-Zeichenfolge generieren und abrufen. Der Code dafür ist hier:

public static String getMyHashKey(Context context, String packageName){
    try {
        PackageInfo info = context.getPackageManager().getPackageInfo(
                packageName, PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance(SHA);
            md.update(signature.toByteArray());
            return Base64.encodeToString(md.digest(), Base64.DEFAULT);
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return null;
}

Zweitens müssen Sie diesen String in den Einstellungen zu Ihrer Facebook-App hinzufügen. Dies kann durch Befolgen dieser 2 Schritte erfolgen:

1) Gehen Sie zu developers.facebook.com und rufen Sie die betreffende App auf. Klicken Sie dann auf Einstellungen -> Grundeinstellungen.

2) Scrollen Sie danach nach unten in den Android-Bereich und füllen Sie die Felder aus. Beachten Sie, dass Sie mehrere HashKeys haben können!

3) Speichern Sie Ihr Update, warten Sie einige Minuten, bis das Update durchgeführt wurde, und versuchen Sie es erneut. Das sollte das Problem lösen, mit dem Sie konfrontiert sind.





facebook-authentication