Узнайте, как добавить вход в Facebook в ваше приложение Flutter, в этом простом руководстве. Вы будете использовать Facebook SDK и пакет Flutter Login для реализации аутентификации Facebook.
Сначала нам нужно создать новый проект Flutter. Для этого убедитесь, что Flutter SDK и другие требования, связанные с разработкой приложений Flutter, установлены правильно. Если все настроено правильно, то для создания проекта мы можем просто запустить следующую команду в нужном локальном каталоге:
flutter create fb_login_example
После настройки проекта мы можем перейти в каталог проекта и выполнить следующую команду в терминале, чтобы запустить проект либо в доступном эмуляторе, либо на реальном устройстве:
flutter run
Теперь мы собираемся создать проект по умолчанию и превратить пользовательский интерфейс в то, что мы хотим. Мы собираемся удалить код проекта Flutter по умолчанию и заменить его нашим собственным кодом пользовательского интерфейса. Здесь у нас будет кнопка входа в систему, которая поможет нам запустить вход в Facebook. После успешного входа в систему мы отобразим кнопку выхода из системы. Все изменения необходимо внести в сам файл main.dart. Общий код пользовательского интерфейса представлен во фрагменте кода ниже:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter FB login Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _isLoggedIn = false;
Map _user;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Facbook login example"),
),
body: Container(
child: _isLoggedIn
? Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
TextButton(
onPressed: () {
},
child: Text("Logout"))
],
)
: Center(
child: ElevatedButton(
child: Text("Login with Facebook"),
onPressed: () async {
},
),
),
),
);
}
}
Здесь у нас есть полный код файла main.dart. Мы создали виджет MyHomePage, который возвращает виджет Scaffold с панелью приложений и свойством body, имеющим виджет Container в качестве родительского. Дочерний элемент виджета Container оснащен условной отрисовкой. Состояние _isLoggedIn используется для обработки состояния входа в систему. Если это ложь, мы отображаем кнопку входа в систему, иначе мы показываем кнопку выхода из системы. Объект _user Map используется для хранения результата ответа после успешного входа в систему. Эта переменная карты будет хранить пользовательские данные из Facebook.
Следовательно, мы получим следующий результат пользовательского интерфейса в эмуляторе:
Теперь нам нужно создать и настроить приложение Facebook, которое позволит нам активировать функцию входа в Facebook. Метод заключается в том, чтобы связать наше приложение Flutter с приложением Facebook, в котором включена функция входа в Facebook.
Сначала нам нужно войти в консоль разработчиков Facebook. После успешного входа в систему мы получим следующий экран в браузере:
Теперь нам нужно нажать «Мои приложения», что приведет нас к Приложениям. консоль, как показано на снимке экрана ниже:
Здесь нам нужно нажать кнопку «Создать приложение» в соответствии с указаниями, после чего откроется диалоговое окно, как показано на снимке экрана ниже. :
В диалоговом окне нам нужно выбрать тип приложения и нажать кнопку «Продолжить». Это приведет нас к другому диалоговому окну, в котором нам нужно будет ввести отображаемое имя нашего приложения Facebook, как показано в фрагменте кода ниже:
После ввода названия приложения нам нужно нажать кнопку «Создать приложение».
Теперь приложение Facebook будет успешно создано, и мы будем перенаправлены на экран панели управления приложения, как показано на снимке экрана ниже:
На информационной панели отображаются
идентификатор приложения, тип приложения а также другие продукты, которые мы можем включить.
Теперь наша главная цель — настроить функцию входа в Facebook. Следовательно, нам нужно нажать кнопку «Настроить» на странице Вход в Facebook
Затем мы будем перенаправлены на экран, где сможем выбрать платформу приложения для включения службы входа в Facebook, как показано на снимке экрана ниже:
Поскольку мы собираемся настроить платформу Android, нам нужно нажать «Android».
После этого откроется страница, на которой нам необходимо выполнить ряд шагов, чтобы включить службу входа в Facebook. Все этапы также снабжены подробной инструкцией.
Здесь нам нужно сразу перейти к шагу 3, где нам нужно добавить имя пакета приложения Flutter и имя основного действия. Это мы можем получить из файла AndroidManifest.xml в расположении ./android/app/src/main/ . Затем мы можем ввести имя пакета и имя класса активности, как показано на снимке экрана ниже:
Затем нам нужно нажать кнопку «Сохранить» и нажать «Продолжить'.
Теперь следующим шагом будет создание хеш-ключа для включения службы. Все необходимые инструкции будут уже предоставлены на этом конкретном этапе.
Нам нужно посмотреть инструкцию для платформы Windows, как показано на скриншоте ниже:
Теперь, чтобы сгенерировать хэш-ключ, в нашей системе Windows есть следующие требования.
Теперь, чтобы сгенерировать хэш ключа разработки, нам нужно запустить следующую команду в командной строке в папке Java SDK (C:\Program Files\Java\jdk\bin):
keytool -exportcert -alias androiddebugkey -keystore "C:\\Users\\USERNAME\\.android\\debug.keystore" | "PATH_TO_OPENSSL_LIBRARY\\bin\\openssl" sha1 -binary | "PATH_TO_OPENSSL_LIBRARY\\bin\\openssl" base64
В приведенной выше команде нам нужно изменить местоположение в зависимости от установленных файлов в нашей системе.
После успешного выполнения команды мы получим строку из 28 символов, которая является хэш-ключом. Нам нужно скопировать этот хэш-ключ и вставить его в место, указанное на скриншоте ниже:
Затем нам нужно нажать «Сохранить» и «Продолжить<». кнопки i=4>'.
Это успешно активирует службу входа в Facebook в нашем приложении Facebook.
Теперь нам нужно соединить наше приложение Facebook с нашим приложением Flutter. Следовательно, нам нужно вернуться к нашему проекту флаттера.
Чтобы связать наше приложение Facebook и его сервисы с проектом Flutter, мы собираемся использовать плагин flutter_facebook_auth. Этот пакет позволяет нам добавить учетную запись Facebook в наше приложение Flutter, получить информацию о пользователе, изображение профиля и многое другое. Подробную информацию о плагине, а также этапы настройки можно найти в его официальной документации..
Теперь, чтобы установить пакет, нам нужно добавить плагин в наш файл pubspec.yaml, как показано в фрагменте кода ниже:
dependencies:
flutter:
sdk: flutter
flutter_facebook_auth: ^3.3.3+1
Теперь нам нужно внести некоторые настройки в собственные файлы Android, чтобы этот плагин правильно работал в нашем проекте.
Во-первых, нам нужно отредактировать наши ресурсы и манифест и добавить следующую конфигурацию в наш проект Android:
<string name="facebook_app_id">{your-app-id}</string>
<string name="fb_login_protocol_scheme">fb{your-app-id}</string>
Пример кода файла strings.xml показан во фрагменте кода ниже:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Flutter Facebook Auth Example</string>
<string name="facebook_app_id">000000000000000</string>
<string name="fb_login_protocol_scheme">fb0000000000000</string>
</resources>
Здесь нам нужно отредактировать название приложения и идентификатор приложения на основе приложения Android в консоли разработчиков Facebook.
Теперь нам нужно перейти к файлу ./android/app/src/main/AndroidManifest.xml и добавить следующий Элемент /span>:uses-permission после элемента application
<uses-permission android:name="android.permission.INTERNET"/>
Затем нам нужно добавить следующий элемент meta-data, activity для Facebook, а также ctivity и < /span> в файле AndroidManifest.xml:intent-filter для пользовательских вкладок Chrome внутри элемента application
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<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>
После всех настроек нам необходимо еще раз установить приложение в эмуляторе. Для этого мы можем удалить приложение из эмулятора и запустить его снова.
Теперь мы собираемся реализовать функции для входа в Facebook в нашем приложении Flutter. Для этого мы собираемся использоватьFacebookAuth из пакета flutter_facebook_auth.
Теперь мы собираемся создать функцию с именем _performLogin внутри класса MyHomePageState main.dart< /span>, как показано во фрагменте кода ниже:
_performLogin() async{
FacebookAuth.instance.login(
permissions: ["public_profile", "email"]).then((value) {
FacebookAuth.instance.getUserData().then((result) {
setState(() {
_isLoggedIn = true;
_user = result;
});
});
});
В функции мы использовали метод login, предоставленный экземпляром FacebookAuth. Мы запросили permissions для изображения public_profile и email. Затем мы использовали метод getUserData() для получения пользовательских данных и установки пользовательских данных в _user объект карты и установки _isLoggedIn состояния. значение true с помощью setState.
Теперь нам нужно вызвать функцию _performLogin() для события onPressed виджета ElevatedButton, как показано на рисунке фрагмент кода ниже:
Center(
child: ElevatedButton(
child: Text("Login with Facebook"),
onPressed: () async {
_performLogin();
},
),
),
После входа в систему мы также получим информацию о пользователе в объекте карты _user. Мы также можем отобразить эту информацию на экране после входа в систему. Для этого мы можем использовать код из следующего фрагмента кода:
body: Container(
child: _isLoggedIn
? Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.network(_user["picture"]["data"]["url"]),
Text(_user["name"]),
Text(_user["email"]),
TextButton(
onPressed: () {
_performLogout();
},
child: Text("Logout")
)
],
),
)
:
Теперь мы собираемся реализовать функцию выхода из системы. Для этого нам нужно создать функцию с именем _performLogout и использовать код из следующего фрагмента кода:
_performLogout() async{
FacebookAuth.instance.logOut().then((value) {
setState(() {
_isLoggedIn = false;
_user = null;
});
});
}
Здесь мы использовали метод logOut, предоставленный экземпляром FacebookAuth, и после его успеха мы установили _isLoggedIn на false и _user object на ноль.
Наконец, нам нужно вызвать функцию в событии onPressed виджета выхода из системы TextButton, как показано в фрагменте кода ниже:
TextButton(
onPressed: () {
_performLogout();
},
child: Text("Logout")
)
Таким образом, окончательная демонстрация нашей реализации входа в Facebook показана ниже:
Таким образом, мы успешно интегрировали функцию входа в Facebook в наше приложение Flutter для платформы Android.
Основной целью этого руководства было продемонстрировать интеграцию службы входа в Facebook в приложение Flutter. В руководстве представлены подробные пошаговые инструкции по созданию приложения Facebook, включению службы входа в Facebook и подключению ее к среде Flutter. Соединение между приложением Facebook и службой входа в Facebook со средой flutter стало возможным благодаря наличию пакета flutter_facebook_auth.