Статьи

Совет: добавьте логин Facebook в свое приложение для Android

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

В этом кратком совете вы узнаете, как добавить кнопку входа Facebook в приложение Android и обрабатывать события, чтобы войти в систему с помощью входа в Facebook.

Если вам нужно быстрое решение для настройки аутентификации пользователей в ваших приложениях Android, попробуйте систему аутентификации Android на Envato Market. Это проект с исходным кодом, который позволяет разработчикам создавать регистрации и логины и авторизовать пользователей для своего приложения.

Система аутентификации Android на Envato Market
Система аутентификации Android на Envato Market

Вы также можете найти разработчиков Android на Envato Studio, чтобы помочь вам с вашими проектами.

Разработчики Android на Envato Studio
Разработчики Android на Envato Studio

Прежде чем начать, убедитесь, что у вас есть доступ к следующему:

Все приложения, использующие Facebook SDK, должны быть зарегистрированы в Facebook. Войдите на сайт разработчиков Facebook и нажмите « Создать новое приложение» в правом верхнем углу.

Сайт разработчиков Facebook

Вам предоставляется форма, которая запрашивает отображаемое имя приложения, пространство имен и категорию . Введите обязательные поля и нажмите « Создать идентификатор приложения» .

Форма для создания нового идентификатора приложения

На следующем экране вы можете увидеть свой идентификатор приложения . Запишите это, потому что оно понадобится вам позже в этом уроке.

Идентификатор приложения и секрет приложения

Откройте « Настройки» слева и нажмите кнопку « Добавить платформу» . Во всплывающем окне выберите Android .

Диалог выбора платформы

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

Чтобы заполнить поле Key Hashes , откройте окно терминала и выполните команду keytool чтобы сгенерировать хэш ключа, используя хранилище ключей отладки, расположенное в ~ / .android / debug.keystore . Вот как должна выглядеть команда.

1
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore |

Пароль по умолчанию для хранилища ключей отладки — Android . Введите этот пароль при появлении запроса. Вывод команды должен быть строкой из 28 символов. Скопируйте его, вернитесь в браузер и вставьте строку в поле Key Hashes, как показано ниже.

Детали приложения Android

Убедитесь, что для параметра « Единый вход» установлено значение « Да», и нажмите кнопку « Сохранить изменения» . Ваше приложение теперь зарегистрировано.

Facebook SDK доступен на Maven Central . Чтобы использовать этот репозиторий, отредактируйте файл build.gradle в каталоге приложения вашего проекта и добавьте в него следующий код перед списком зависимостей :

1
2
3
repositories {
    mavenCentral()
}

Теперь вы можете добавить Facebook SDK в свой проект как зависимость компиляции . Добавьте следующий код в список зависимостей :

1
compile ‘com.facebook.android:facebook-android-sdk:4.0.0’

Создайте новый макет с именем main_activity.xml в res / layout . Это будет очень простой макет с двумя виджетами:

  • LoginButton чтобы позволить пользователю войти в Facebook
  • TextView для отображения результата последней попытки входа в систему

Вы можете разместить их внутри RelativeLayout . После включения атрибутов для заполнения и позиционирования виджетов XML макета будет выглядеть примерно так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version=»1.0″ encoding=»utf-8″?>
<RelativeLayout xmlns:android=»http://schemas.android.com/apk/res/android»
    android:layout_width=»match_parent» android:layout_height=»match_parent»
    android:padding=»16dp»
    >
 
    <TextView
        android:layout_width=»wrap_content»
        android:layout_height=»wrap_content»
        android:id=»@+id/info»
        android:layout_alignParentLeft=»true»
        android:layout_alignParentTop=»true»
        android:textSize=»18sp»
        />
 
    <com.facebook.login.widget.LoginButton
        android:id=»@+id/login_button»
        android:layout_width=»wrap_content»
        android:layout_height=»wrap_content»
        android:layout_centerInParent=»true»
        />
 
</RelativeLayout>

Создайте новый класс Java, который расширяет Activity и назовите его MainActivity.java . Помните, что имя этого класса и пакет, к которому он принадлежит, должны соответствовать значениям, введенным вами при регистрации приложения в Facebook.

Объявите виджеты, которые вы определили в макете действия, как поля этого класса.

1
2
private TextView info;
private LoginButton loginButton;

Объявите CallbackManager как другое поле. CallbackManager , как следует из его названия, используется для управления обратными вызовами, используемыми в приложении.

1
private CallbackManager callbackManager;

SDK необходимо инициализировать перед использованием любого из его методов. Вы можете сделать это, вызвав sdkInitialize и передав ему контекст приложения. Добавьте следующий код в метод onCreate вашей Activity :

1
FacebookSdk.sdkInitialize(getApplicationContext());

Затем инициализируйте ваш экземпляр CallbackManager с помощью метода CallbackManager.Factory.create .

1
callbackManager = CallbackManager.Factory.create();

Вызовите setContentView чтобы установить макет, определенный на предыдущем шаге, как макет этого Activity а затем используйте findViewById для инициализации виджетов.

1
2
3
setContentView(R.layout.main_activity);
info = (TextView)findViewById(R.id.info);
loginButton = (LoginButton)findViewById(R.id.login_button);

Пришло время создать обратный вызов для обработки результатов попыток входа в систему и зарегистрировать его в CallbackManager . Пользовательские обратные вызовы должны реализовывать FacebookCallback . Интерфейс имеет методы для обработки каждого возможного результата попытки входа в систему:

  • Если попытка входа в систему успешна, onSuccess .
  • Если пользователь отменяет попытку входа, onCancel .
  • Если возникает ошибка, onError .

Чтобы зарегистрировать пользовательский обратный вызов, используйте метод registerCallback . Код для создания и регистрации обратного вызова должен выглядеть следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
 
    }
 
    @Override
    public void onCancel() {
 
    }
 
    @Override
    public void onError(FacebookException e) {
 
    }
});

Теперь вы можете добавить код к этим методам для отображения соответствующих сообщений, используя метод setText TextView .

Когда onSuccess метод LoginResult в качестве параметра передается LoginResult . Получите токен доступа, который он содержит, используя getAccessToken и используйте его метод getUserId чтобы получить идентификатор пользователя. Чтобы получить токен в виде String , используйте getToken . Отобразите эти значения в TextView , добавив следующий код в метод onSuccess :

1
2
3
4
5
6
7
info.setText(
    «User ID: «
    + loginResult.getAccessToken().getUserId()
    + «\n» +
    «Auth Token: «
    + loginResult.getAccessToken().getToken()
);

Если пользователь отменяет попытку входа, мы отображаем сообщение «Попытка входа отменена». Добавьте следующий код в метод onCancel :

1
info.setText(«Login attempt canceled.»);

Аналогичным образом добавьте следующий код в метод onError :

1
info.setText(«Login attempt failed.»);

Нажатие на кнопку входа в систему запускает новую Activity , которая возвращает результат. Чтобы получить и обработать результат, переопределите метод onActivityResult вашей Activity и передайте его параметры методу onActivityResult в CallbackManager .

1
2
3
4
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

Идентификатор приложения, полученный при регистрации приложения, должен быть добавлен в виде строки в файл res / values ​​/ strings.xml вашего проекта. Для этого урока вызовите строку facebook_app_id .

1
<string name=»facebook_app_id»>123456908761030</string>

Определите свою Activity в AndroidManifest.xml . Если это первая Activity вашего приложения, вам также следует добавить intent-filter который отвечает на действие android.intent.action.MAIN .

1
2
3
4
5
6
<activity android:name=»com.hathy.fblogin.MainActivity»>
    <intent-filter>
        <action android:name=»android.intent.action.MAIN»/>
        <category android:name=»android.intent.category.LAUNCHER»/>
    </intent-filter>
</activity>

Добавьте идентификатор приложения в качестве meta-data .

1
2
<meta-data android:name=»com.facebook.sdk.ApplicationId»
  android:value=»@string/facebook_app_id»/>

Определите FacebookActivity как другую Activity которая принадлежит вашему приложению. Он обрабатывает большинство изменений конфигурации сам. Вы должны упомянуть об этом, используя атрибут configChanges .

1
2
3
4
5
<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» />

Наконец, вы должны запросить android.permission.INTERNET чтобы иметь возможность подключаться к серверам Facebook.

1
<uses-permission android:name=»android.permission.INTERNET»/>

Ваше приложение завершено. Когда вы соберете его и развернете на устройстве Android, вы увидите кнопку входа в Facebook.

Кнопка Войти через Facebook

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

Экран авторизации

После успешного входа в систему TextView отобразит идентификатор пользователя и токен авторизации.

Результат успешного входа

В этом кратком совете вы узнали, как использовать Facebook SDK для добавления входа Facebook в приложение Android. Вы также узнали, как обрабатывать возможные результаты попытки входа в систему. Чтобы узнать больше о Facebook Login, вы можете перейти по ссылке на Facebook SDK для Android .