Вход через Facebook для Android — начало работы

Facebook SDK для Android позволяет пользователям входить в приложение с помощью входа через Facebook. Когда люди входят в приложение через Facebook, они могут предоставить разрешения, чтобы вы могли получать нужную информацию и выполнять действия на Facebook от их имени.

Пример интеграции входа через Facebook в приложение Android: FBLoginSample на GitHub.

Чтобы добавить вход через Facebook в свое приложение, следуйте инструкциям ниже.

1. Вход

Войдите на Facebook, чтобы создать приложение или зарегистрироваться в качестве разработчика.

2. Скачивание приложения Facebook

Нажмите кнопку ниже, чтобы скачать приложение Facebook.

3. Интеграция Facebook SDK

SDK "Вход через Facebook" для Android — это компонент Facebook SDK для Android. Чтобы использовать SDK "Вход через Facebook" в своем проекте, сделайте его зависимостью в Maven или скачайте. Чтобы обеспечить поддержку изменений в Android 11, используйте SDK версии 8.1 или более новой.

Использование Maven

  1. В своем проекте откройте your_app > Gradle Scripts > build.gradle (Project) и убедитесь, что в buildscript { repositories {}} представлен следующий репозиторий:
    mavenCentral() 
    
  2. В своем проекте откройте your_app > Gradle Scripts > build.gradle (Module: app) и добавьте следующий оператор в раздел dependencies{}, чтобы создать зависимость от новейшей версии SDK для "Входа через Facebook":
     implementation 'com.facebook.android:facebook-login:latest.release'
    
  3. Соберите проект.

4. Редактирование ресурсов и манифеста

Если вы используете Facebook SDK (для Android) версии 5.15 или более поздней, то вам не нужно добавлять фильтр действия и намерения в настраиваемые вкладки Chrome. Эта функция включена в SDK.

После интеграции входа через Facebook определенные события в приложении будут автоматически регистрироваться и собираться для Events Manager, если только вы не отключите эту функцию. Подробнее о том, какая информация собирается и как отключить автоматическую регистрацию событий в приложении, см. в разделе Автоматическая регистрация событий в приложении.

Создайте строки для ID вашего приложения Facebook и для идентификаторов, которые нужны для активации индивидуально настраиваемых вкладок Chrome. Кроме того, добавьте в манифест Android FacebookActivity.
  1. Откройте файл /app/res/values/strings.xml.
  2. Добавьте элементы string с именами facebook_app_id, fb_login_protocol_scheme и facebook_client_token и установите в качестве значений свои ID приложения и маркер клиента. Например, если ID приложения равен 1234, а маркер клиента — 56789, код выглядит следующим образом:
    <string name="facebook_app_id">1234</string>
    <string name="fb_login_protocol_scheme">fb1234</string>
    <string name="facebook_client_token">56789</string>
    
    
  3. Откройте файл /app/manifest/AndroidManifest.xml.
  4. Добавьте элементы meta-data в элемент application для своего ID приложения и маркера клиента:
    <application android:label="@string/app_name" ...>
        ...
       	<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
       	<meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
        ...
    </application>
    
  5. Добавьте действие для Facebook, а также фильтр действия и намерения для пользовательских вкладок Chrome в элемент application:
        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges=
                    "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>
    
  6. Добавьте в манифест следующий элемент uses-permission после элемента application:
    <uses-permission android:name="android.permission.INTERNET"/>
    
    
  7. Необязательно: чтобы отказаться от разрешения ID рекламы, добавьте в манифест элемент uses-permission после элемента application:
    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
            
  8. Вы можете напрямую установить для автоматической регистрации событий в приложении значения "true" или "false", если добавите AutoLogAppEventsEnabled в качестве ключа в файл AndroidManifest.xml.

  9. Соберите проект.

5. Связь названия пакета и класса по умолчанию с приложением

Чтобы выполнить этот шаг, войдите.

6. Добавление хэш-ключей разработки и выпуска для приложения

Чтобы выполнить этот шаг, войдите.

7. Включение единого входа для приложения

Чтобы выполнить этот шаг, войдите.

8. Добавление кнопки "Вход через Facebook"

Самый простой способ добавить в приложение функцию входа через Facebook — использовать кнопку LoginButton из SDK. Кнопка LoginButton — это элемент интерфейса, который объединяет функции, доступные в LoginManager. Когда кто-то нажимает кнопку, запускается процесс входа с разрешениями, настроенными в LoginManager. Чтобы вход через Facebook был доступен внешним пользователям, необходима расширенная версия разрешения public_profile. Функциональность кнопки отслеживает состояние входа и отображает соответствующий текст в зависимости от статуса аутентификации человека.
Чтобы добавить кнопку входа через Facebook, сначала добавьте ее в файл XML макета:
<com.facebook.login.widget.LoginButton
    android:id="@+id/login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" /> 

9. Регистрация обратного вызова

Затем вызовите CallbackManager.Factory.create, чтобы создать callbackManager для обработки откликов входа.
callbackManager = CallbackManager.Factory.create();
При добавлении кнопки во фрагмент вы также должны обновить действие, чтобы использовать этот фрагмент. Вы можете настроить свойства Login button и зарегистрировать обратный вызов в методе onCreate() или onCreateView(). Вы можете настроить такие свойства, как LoginBehavior, DefaultAudience и ToolTipPopup.Style, а также разрешения для LoginButton. Пример:
      
    private static final String EMAIL = "email";
      
    loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions(Arrays.asList(EMAIL));
    // If you are using in a fragment, call loginButton.setFragment(this);    

    // Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code
        }

        @Override
        public void onCancel() {
            // App code
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
        }
    });
Чтобы отреагировать на результат входа, нужно зарегистрировать обратный вызов с помощью LoginManager или LoginButton. При регистрации с помощью LoginButton обратный вызов не нужно регистрировать в диспетчере входа.
Обратный вызов LoginManager добавляется в действие или метод onCreate() фрагмента:
    callbackManager = CallbackManager.Factory.create();      
      
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    // App code
                }

                @Override
                public void onCancel() {
                     // App code
                }

                @Override
                public void onError(FacebookException exception) {
                     // App code   
                }
    });
Если вход выполнен успешно, параметру LoginResult передаются новый AccessToken, а также последние предоставленные или отклоненные разрешения.
Для успешного входа не требуется registerCallback. Можно отслеживать текущие изменения маркера доступа с помощью описанного ниже класса AccessTokenTracker.
В методе onActivityResult вызовите callbackManager.onActivityResult, чтобы передать результаты входа в LoginManager через callbackManager.

Если вы используете действия или фрагменты AndroidX, переопределять onActivityResult не требуется.

      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }
Каждое действие и фрагмент, интегрируемые с функцией входа или публикации Facebook SDK, должны передавать onActivityResult в callbackManager.

10. Проверка статуса входа

В ваше приложение одновременно может входить только один человек, и LoginManager предоставляет ему AccessToken и Profile. Facebook SDK сохраняет эти данные в общих настройках и задает их в начале сеанса. Чтобы узнать, выполнил ли человек вход, проверьте AccessToken.getCurrentAccessToken() и Profile.getCurrentProfile().
AccessToken.getCurrentAccessToken можно загрузить вместе с SDK из кэша или из закладки приложения при холодном запуске. Проверить его действительность можно в методе onCreateActivity:
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
  
Позже вы сможете выполнить вход, например с помощью элемента OnClickListener индивидуально настроенной кнопки:
      
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

11. Включение экспресс-входа

Экспресс-вход позволяет людям входить в свой аккаунт Facebook на разных устройствах и платформах. Если человек уже входил в ваше приложение на Android, а затем сменил устройство, функция экспресс-входа позволяет ему сразу войти с помощью аккаунта Facebook, а не предлагает выбрать способ входа. Это позволяет избежать создания дублирующихся аккаунтов и неудачных попыток войти. Чтобы обеспечить поддержку изменений в Android 11, добавьте в элемент queries файла /app/manifest/AndroidManifest.xml следующий код:
  
<queries> <package android:name="com.facebook.katana" /> </queries>   
Ниже приведен пример кода, позволяющего включить экспресс-вход.
LoginManager.getInstance().retrieveLoginStatus(this, new LoginStatusCallback() { @Override public void onCompleted(AccessToken accessToken) { // User was previously logged in, can log them in directly here. // If this callback is called, a popup notification appears that says // "Logged in as <User Name>" } @Override public void onFailure() { // No access token could be retrieved for the user } @Override public void onError(Exception exception) { // An error occurred } });   

Дальнейшие действия

Поздравляем, вы добавили вход через Facebook в свое приложение для Android! Не забудьте изучить другие страницы документации, где вы найдете дополнительные инструкции.
Реализуйте обратный вызов с запросом на удаление данных для ответа на запрос людей об удалении их данных из Facebook.
Отслеживайте маркеры доступа и профили пользователей.
Определяйте, к каким данным ваше приложение получит доступ с помощью входа через Facebook.
Возникли проблемы при интеграции входа через Facebook? Ознакомьтесь со списком распространенных проблем и способами их устранения.
В зависимости от того, какие данные из Facebook вы запрашиваете у людей, использующих вход через Facebook, перед запуском вам может потребоваться проверка приложения.
Информацию о том, как создать собственный процесс входа, см. в статье Разработка процесса входа вручную.