Поиск…


Синтаксис

  • newInstance : создать отдельный экземпляр класса помощника Facebook.
  • loginUser : Войти в систему.
  • signOut : выйти из системы.
  • getCallbackManager : для получения обратного вызова для Facebook.
  • getLoginCallback : для получения обратного вызова для входа.
  • getKeyHash : генерировать Facebook-хеш.

параметры

параметр подробности
ТЕГ Строка, используемая при регистрации
FacebookSignInHelper Статическая ссылка на помощника facebook
CallbackManager Обратный вызов для операций с facebook
Деятельность Контекст
PERMISSION_LOGIN Массив, содержащий все разрешения, необходимые для входа в систему для входа в facebook.
loginCallback Обратный вызов для входа в facebook

Как добавить Facebook Войти в Android

Добавьте ниже зависимости от вашего build.gradle

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

Добавьте ниже вспомогательный класс в ваш служебный пакет:

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

Добавьте в свою команду код ниже:

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

Добавьте ниже код в свой OnActivityResult :

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

Настройка разрешений для доступа к данным из профиля Facebook

Если вы хотите получить информацию о профиле пользователя в Facebook, вам необходимо установить разрешения для него:

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

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

Вы можете добавлять дополнительные разрешения, такие как список друзей, сообщения, фотографии и т. Д. Просто выберите правильное разрешение и добавьте его в приведенный выше список.

Примечание. Вам не нужно устанавливать какие-либо явные разрешения для доступа к общедоступному профилю (имя, фамилия, идентификатор, пол и т. Д.).

Создайте свою собственную кнопку для входа в Facebook

После того, как вы впервые добавите логин / регистрацию в Facebook, кнопка выглядит примерно так:

введите описание изображения здесь

В большинстве случаев это не соответствует дизайнерским спецификациям вашего приложения. И вот как вы можете настроить его:

<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 в FrameLayout и FrameLayout его видимость.

Затем добавьте свою настраиваемую кнопку в тот же FrameLayout . Я добавил некоторые образцы спецификаций. Вы всегда можете сделать свой собственный рисованный фон для кнопки facebook и установить его в качестве фона кнопки.

Последнее, что мы делаем, - это просто щелкнуть мышью по моей пользовательской кнопке, нажав на кнопку 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();
    }
}

Большой! Теперь кнопка выглядит примерно так:

введите описание изображения здесь

Минималистическое руководство по внедрению Facebook / регистрации

  1. Вы должны настроить предварительные условия .

  2. Добавьте активность Facebook в файл 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. Добавьте кнопку входа в свой XML-файл макета:

    <com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />   
    
  4. Теперь у вас есть кнопка Facebook. Если пользователь нажмет на него, окно входа в систему Facebook появится поверх экрана приложения. Здесь пользователь может заполнить свои учетные данные и нажать кнопку « Вход» . Если учетные данные верны, диалог предоставляет соответствующие разрешения, и обратный вызов отправляется в исходное действие, содержащее кнопку. Следующий код показывает, как вы можете получить этот обратный вызов:

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

Выход из Facebook

Facebook SDK 4.0 и далее, вот как мы выходим из системы:

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

Для версий до версии 4.0 выход из системы пропадает, явно очистив токен доступа:

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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow