Suche…


Syntax

  • newInstance : Zum Erstellen einer einzelnen Instanz der Facebook-Helper-Klasse.
  • loginUser : Zum Anmelden des Benutzers.
  • signOut : Zum Abmelden des Benutzers.
  • getCallbackManager : Um Rückruf für Facebook zu erhalten.
  • getLoginCallback : Um einen Rückruf für die Anmeldung zu erhalten.
  • getKeyHash : Um Facebook Key Hash zu generieren.

Parameter

Parameter Einzelheiten
ETIKETT Ein String, der während der Protokollierung verwendet wird
FacebookSignInHelper Ein statischer Hinweis auf Facebook-Helfer
CallbackManager Ein Rückruf für Facebook-Operationen
Aktivität Ein Kontext
PERMISSION_LOGIN Ein Array, das alle erforderlichen Berechtigungen von Facebook für die Anmeldung enthält
loginCallback Ein Rückruf für Facebook-Login

Wie füge ich Facebook-Login in Android hinzu?

Fügen Sie Ihrem build.gradle folgende Abhängigkeiten build.gradle

  // Facebook login
    compile 'com.facebook.android:facebook-android-sdk:4.21.1'

Fügen Sie Ihrem Hilfsprogramm folgende Hilfsklasse hinzu:

/**
 * Created by Andy
 * An utility for Facebook
 */
public class FacebookSignInHelper {
    private static final String TAG = FacebookSignInHelper.class.getSimpleName();
    private static FacebookSignInHelper facebookSignInHelper = null;
    private CallbackManager callbackManager;
    private Activity mActivity;
    private static final Collection<String> PERMISSION_LOGIN = (Collection<String>) Arrays.asList("public_profile", "user_friends","email");
    private FacebookCallback<LoginResult> loginCallback;



    public static FacebookSignInHelper newInstance(Activity context) {
        if (facebookSignInHelper == null)
            facebookSignInHelper = new FacebookSignInHelper(context);
        return facebookSignInHelper;
    }


    public FacebookSignInHelper(Activity mActivity) {
        try {
            this.mActivity = mActivity;
            // Initialize the SDK before executing any other operations,
            // especially, if you're using Facebook UI elements.
            FacebookSdk.sdkInitialize(this.mActivity);
            callbackManager = CallbackManager.Factory.create();
            loginCallback = new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                   // You are logged into Facebook
                }

                @Override
                public void onCancel() {
                    Log.d(TAG, "Facebook: Cancelled by user");
                }

                @Override
                public void onError(FacebookException error) {
                    Log.d(TAG, "FacebookException: " + error.getMessage());
                }
            };
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * To login user on facebook without default Facebook button
     */
    public void loginUser() {
        try {
            LoginManager.getInstance().registerCallback(callbackManager, loginCallback);
            LoginManager.getInstance().logInWithReadPermissions(this.mActivity, PERMISSION_LOGIN);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    /**
     * To log out user from facebook
     */
    public void signOut() {
        // Facebook sign out
        LoginManager.getInstance().logOut();
    }

    public CallbackManager getCallbackManager() {
        return callbackManager;
    }

    public FacebookCallback<LoginResult> getLoginCallback() {
        return loginCallback;
    }

    /**
     * Attempts to log debug key hash for facebook
     *
     * @param context : A reference to context
     * @return : A facebook debug key hash
     */
    public static String getKeyHash(Context context) {
        String keyHash = null;
        try {
            PackageInfo info = context.getPackageManager().getPackageInfo(
                    context.getPackageName(),
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                keyHash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
                Log.d(TAG, "KeyHash:" + keyHash);
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return keyHash;
    }
}

Fügen Sie den folgenden Code in Ihre Aktivität ein:

FacebookSignInHelper facebookSignInHelper = FacebookSignInHelper.newInstance(LoginActivity.this, fireBaseAuthHelper);
facebookSignInHelper.loginUser();

Fügen Sie folgenden Code zu Ihrem OnActivityResult :

 facebookSignInHelper.getCallbackManager().onActivityResult(requestCode, resultCode, data);

Festlegen von Berechtigungen für den Zugriff auf Daten aus dem Facebook-Profil

Wenn Sie die Details eines Facebook-Profils eines Benutzers abrufen möchten, müssen Sie Berechtigungen für dieses Profil festlegen:

loginButton = (LoginButton)findViewById(R.id.login_button);

loginButton.setReadPermissions(Arrays.asList("email", "user_about_me"));

Sie können weitere Berechtigungen hinzufügen, z. B. Freunde, Beiträge, Fotos usw. Wählen Sie einfach die richtige Berechtigung aus und fügen Sie sie der obigen Liste hinzu.

Hinweis: Sie müssen keine expliziten Berechtigungen für den Zugriff auf das öffentliche Profil festlegen (Vorname, Nachname, ID, Geschlecht usw.).

Erstellen Sie Ihren eigenen benutzerdefinierten Button für das Facebook-Login

Nachdem Sie das Facebook-Login / die Anmeldung zum ersten Mal hinzugefügt haben, sieht die Schaltfläche etwa so aus:

Geben Sie hier die Bildbeschreibung ein

In den meisten Fällen passt es nicht zu den Design-Spezifikationen Ihrer App. Und so können Sie es anpassen:

<FrameLayout
    android:layout_below="@+id/no_network_bar"
    android:id="@+id/FrameLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <Button
        android:background="#3B5998"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:id="@+id/fb"
        android:onClick="onClickFacebookButton"
        android:textAllCaps="false"
        android:text="Sign up with Facebook"
        android:textSize="22sp"
        android:textColor="#ffffff" />
</FrameLayout>

com.facebook.login.widget.LoginButton einfach den ursprünglichen com.facebook.login.widget.LoginButton in ein FrameLayout und machen Sie seine Sichtbarkeit verloren.

FrameLayout Sie anschließend Ihre benutzerdefinierte Schaltfläche in demselben FrameLayout . Ich habe einige Beispielspezifikationen hinzugefügt. Sie können jederzeit einen eigenen Hintergrund für die Facebook-Schaltfläche erstellen und als Hintergrund für die Schaltfläche festlegen.

Als letztes konvertieren Sie einfach den Klick auf meinen benutzerdefinierten Button in einen Klick auf den Facecbook-Button:

//The original Facebook button
LoginButton loginButton = (LoginButton)findViewById(R.id.login_button);

//Our custom Facebook button
fb = (Button) findViewById(R.id.fb);

public void onClickFacebookButton(View view) {
    if (view == fb) {
        loginButton.performClick();
    }
}

Großartig! Nun sieht der Button so aus:

Geben Sie hier die Bildbeschreibung ein

Ein minimalistischer Leitfaden für die Facebook-Anmeldung / Anmeldung

  1. Sie müssen die Voraussetzungen festlegen.

  2. Fügen Sie die Facebook-Aktivität zur Datei AndroidManifest.xml hinzu :

    <activity 
        android:name="com.facebook.FacebookActivity"
        android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:label="@string/app_name" />
    
  3. Fügen Sie der XML-Layoutdatei die Anmeldeschaltfläche hinzu:

    <com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />   
    
  4. Jetzt haben Sie den Facebook-Button. Wenn der Benutzer darauf klickt, wird der Facebook-Anmeldedialog oben auf dem Bildschirm der App angezeigt. Hier kann der Benutzer seine Anmeldeinformationen eingeben und auf die Schaltfläche Anmelden klicken. Wenn die Anmeldeinformationen korrekt sind, erteilt das Dialogfeld die entsprechenden Berechtigungen und ein Rückruf wird an Ihre ursprüngliche Aktivität gesendet, die die Schaltfläche enthält. Der folgende Code zeigt, wie Sie diesen Rückruf erhalten können:

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // Completed without error. You might want to use the retrieved data here.
        }
    
        @Override
        public void onCancel() {
            // The user either cancelled the Facebook login process or didn't authorize the app.
        }
    
        @Override
        public void onError(FacebookException exception) {
            // The dialog was closed with an error. The exception will help you recognize what exactly went wrong.
        }
    });  
    

Abmeldung von Facebook

Facebook SDK 4.0 oder höher, so loggen wir uns aus:

com.facebook.login.LoginManager.getInstance().logOut();

Bei Versionen vor 4.0 wird das Abmelden durch das explizite Löschen des Zugriffstokens aufgehoben:

Session session = Session.getActiveSession();
session.closeAndClearTokenInformation();


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow