wake-up-neo.com

Android Facebook-Login funktioniert nicht mit der installierten Facebook-App

Ich habe ein einfaches Facebook-Login eingerichtet. Für Android 2.3.6 funktioniert alles wie gewünscht, der Benutzer erhält einen Eingabeaufforderungsdialog, gibt Daten ein und die App läuft weiter. Ich dachte, es sei ein Fehler der Android-Versionen, aber es zeigt, dass der Login nicht funktioniert, wenn eine Facebook-Anwendung auf dem Telefon installiert ist!

Getestet am: Galaxy Ace 2.3.6 HTC Desire 4.1.2 Galaxy Note 4.1.2 Android-Emulator 4.1.2

Sogar die Facebook-Beispiele funktionieren nicht!

Jedes Mal, wenn die App ausgeführt wird - else { Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); }

Es scheint, als würde die Sitzung nicht eröffnet, aber warum ist das so? Befolgen Sie diese Anleitung - https://developers.facebook.com/docs/getting-started/facebook-sdk-for-Android/3.0/

Code:

Session.openActiveSession(this, true, new Session.StatusCallback() {

        @Override
        public void call(final Session session, SessionState state, Exception exception) {

            if (session.isOpened()) {

                Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if (user != null) {
                            Log.d("Access_token", session.getAccessToken());
                        }
                    }
                });
            } else {
                Log.d("SESSION NOT OPENED", "SESSION NOT OPENED");
            }
        }
    });
12
Karlis

Sehen Sie sich das Ende von Schritt 4 an: https://developers.facebook.com/docs/getting-started/facebook-sdk-for-Android/3.0/

Wenn Sie Ihren App-Schlüssel-Hash nicht ordnungsgemäß eingegeben haben, funktioniert die Facebook-Anmeldung über das WebView-Popup (wenn die App nicht installiert ist) weiterhin, die Anmeldung über die native Facebook-App jedoch nicht.

Sie sollten diese Ausnahme in LogCat sehen:

com.facebook.http.protocol.ApiException: remote_app_id does not match stored id

Das Facebook-SDK druckt seine Ausnahmen, also überprüfen Sie dort trotzdem, ob andere Probleme vorliegen.

5
antonyt

ich schreibe diese Antwort für diejenigen, die Facebook SDK 4.X verwenden.

sie können das Login-Portal von Facebook auf zwei Arten öffnen:

  1. wenn Sie ein Android-Gerät mit Android 1.9.X und Facebook App auf dem Gerät mit der Bezeichnung Native Login-Methode installiert haben, müssen Sie nicht facebook WebView verwenden.

  2. wenn Sie Facebook App nicht auf Ihrem Android-Gerät installiert haben, sollten Sie WebView verwenden.

also für diese Facebook 3 Constants

  1. NATIVE_ONLY (wird verwendet, wenn Sie nur in der Facebook-App öffnen möchten)
  2. WEB_ONLY (wird verwendet, wenn Sie nur in WebView öffnen möchten)
  3. NATIVE_WITH_FALLBACK (Empfohlene Facebook-Erkennung und Option webView, falls die App nicht installiert ist)

Überprüfen Sie den Link unter https://developers.facebook.com/docs/reference/Android/current/class/LoginButton/https: //developers.facebook .com/docs/facebook-login/Android/v2.2 # - Fehlerbehebung

     LoginButton.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK);
     LoginButton.setLoginBehavior(LoginBehavior.NATIVE_ONLY);
     LoginButton.setLoginBehavior(LoginBehavior.WEB_ONLY);
8
ANinJa

Holen Sie sich Ihren Hash-Schlüssel mit dieser Funktion für beide (debug und release apk) und fügen Sie ihn in developer.facebook.com/apps in Ihre App ein

private void calculateHashKey(String yourPackageName) {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                yourPackageName,
                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) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
}

das hilft mir sehr .. hoffe das hilft dir auch ..

5
Jignesh Patel

Anscheinend konnte ich die Daten nicht abrufen, wenn ich eine aktive Facebook-Sitzung (von Facebook-Anwendung) hatte.

Also bevor ich die Sitzung öffne, bitte ich um ein Force-Login, selbst wenn der Benutzer eine offene Facebook-Sitzung über die Facebook-Anwendung hat.

openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);

Jetzt funktioniert alles, aber der Benutzer muss die Daten manuell eingeben. Es ist nicht ideal, aber es funktioniert.

Selbst die Facebook-Beispiele funktionierten nicht für mich, und die Facebook-App wurde geöffnet.

Wenn jemand eine bessere Lösung hat, können Sie das gerne vorschlagen.

2
Karlis

Wenn der Hash-Schlüssel nicht ordnungsgemäß generiert wird, können Probleme auftreten

Ein systemeigenes Anmeldedialogfeld wird angezeigt, aber nach dem Akzeptieren des Popup-Berechtigungsfensters wird nichts angezeigt, und in der Protokollkategorie passiert nichts 

Login und Freigabe funktionieren jedoch einwandfrei, wenn die native App auf dem Gerät deaktiviert ist (in diesem Fall wird der Anmeldedialog in der Webansicht geöffnet und es ist kein entsprechender Hash-Schlüssel erforderlich.)

Ich stand vor demselben Problem und löste dieses Problem, indem ich mit diesem Code einen Hash-Schlüssel erhielt. Der Hash-Schlüssel unterschied sich von einem mit openSSl und keytool erzeugten Schlüssel

nach dem Aktualisieren dieses Hash-Schlüssels in der Facebook-App funktioniert alles einwandfrei 

//================================== To Get Facebook Hash key Programmatically =========================//
    PackageInfo info;

     try {
            info = activity.getPackageManager().getPackageInfo("com.checkmyplanner", PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md;
                md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String something = new String(Base64.encode(md.digest(), 0));
                //String something = new String(Base64.encodeBytes(md.digest()));
                Log.e("hash key", something);
            }
        } catch (NameNotFoundException e1) {
            Log.e("name not found", e1.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("no such an algorithm", e.toString());
        } catch (Exception e) {
            Log.e("exception", e.toString());
        }

Ändern Sie einfach Ihren Paketnamen und erhalten Sie den richtigen Hash-Schlüssel 

0
HemangNirmal