Ricerca…


Sintassi

  • newInstance : per creare una singola istanza della classe helper di Facebook.
  • loginUser : per accedere all'utente.
  • signOut : per disconnettersi.
  • getCallbackManager : per ottenere la richiamata per Facebook.
  • getLoginCallback : per ottenere la richiamata per l'accesso.
  • getKeyHash : per generare l'hash della chiave di Facebook.

Parametri

Parametro Dettagli
ETICHETTA Una stringa utilizzata durante la registrazione
FacebookSignInHelper Un riferimento statico all'aiuto di Facebook
CallbackManager Una richiamata per le operazioni di Facebook
Attività Un contesto
PERMISSION_LOGIN Un array che contiene tutte le autorizzazioni richieste da Facebook per accedere.
loginCallback Una richiamata per l'accesso a Facebook

Come aggiungere Facebook Login in Android

Aggiungi dipendenze sottostanti al tuo build.gradle

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

Aggiungi sotto la classe helper al tuo pacchetto di utilità:

/**
 * 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;
    }
}

Aggiungi sotto il codice nella tua attività:

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

Aggiungi sotto il codice al tuo OnActivityResult :

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

Impostazione delle autorizzazioni per accedere ai dati dal profilo di Facebook

Se si desidera recuperare i dettagli del profilo Facebook di un utente, è necessario impostare le autorizzazioni per lo stesso:

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

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

Puoi continuare ad aggiungere ulteriori autorizzazioni come amici-elenco, post, foto, ecc. Seleziona il permesso giusto e aggiungilo all'elenco precedente.

Nota: non è necessario impostare autorizzazioni esplicite per l'accesso al profilo pubblico (nome, cognome, ID, sesso ecc.).

Crea il tuo pulsante personalizzato per l'accesso a Facebook

Quando aggiungi per la prima volta l'accesso / iscrizione a Facebook, il pulsante assomiglia a qualcosa:

inserisci la descrizione dell'immagine qui

Il più delle volte, non corrisponde alle specifiche di progettazione della tua app. Ed ecco come puoi personalizzarlo:

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

Basta avvolgere l'originale com.facebook.login.widget.LoginButton in un FrameLayout e renderne visibile la visibilità.

Successivamente, aggiungi il tuo pulsante personalizzato nello stesso FrameLayout . Ho aggiunto alcune specifiche di esempio. Puoi sempre creare il tuo sfondo disegnabile per il pulsante facebook e impostarlo come sfondo del pulsante.

L'ultima cosa che facciamo è semplicemente convertire il clic sul mio pulsante personalizzato in un clic sul pulsante facecbook:

//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();
    }
}

Grande! Ora il pulsante ha un aspetto simile al seguente:

inserisci la descrizione dell'immagine qui

Una guida minimalistica all'implementazione di accesso / registrazione di Facebook

  1. Devi impostare i prerequisiti .

  2. Aggiungi l'attività di Facebook al file AndroidManifest.xml :

    <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. Aggiungi il pulsante di accesso al tuo file XML di layout:

    <com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />   
    
  4. Ora hai il pulsante Facebook. Se l'utente fa clic su di esso, la finestra di accesso di Facebook comparirà in cima allo schermo dell'app. Qui l'utente può inserire le proprie credenziali e premere il pulsante Accedi . Se le credenziali sono corrette, la finestra di dialogo concede le autorizzazioni corrispondenti e una richiamata viene inviata all'attività originale contenente il pulsante. Il codice seguente mostra come puoi ricevere quella richiamata:

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

Disconnessione da Facebook

Facebook SDK 4.0 in poi, questo è il modo in cui effettuiamo il logout:

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

Per le versioni precedenti alla 4.0, la disconnessione è terminata cancellando esplicitamente il token di accesso:

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow