Чтобы начать работу с FCM, создайте простейший сценарий использования: отправьте тестовое уведомление из компоновщика уведомлений на устройство разработки, когда приложение работает в фоновом режиме. На этой странице перечислены все необходимые шаги, от настройки до проверки. Возможно, вы уже выполнили эти шаги, если настроили приложение Flutter для FCM.
Установить плагин FCM
Установите и инициализируйте Firebase SDKs для Flutter, если вы еще этого не сделали.
Из корня вашего проекта Flutter выполните следующую команду для установки плагина:
flutter pub add firebase_messaging
После завершения перестройте свое приложение Flutter:
flutter run
Доступ к регистрационному токену
Чтобы отправить сообщение на конкретное устройство, вам необходимо знать его регистрационный токен. Поскольку для выполнения этого руководства вам потребуется ввести токен в поле консоли уведомлений, обязательно скопируйте его или сохраните в безопасном месте после получения.
Чтобы получить текущий токен регистрации для экземпляра приложения, вызовите метод getToken()
. Если разрешение на отправку уведомлений не предоставлено, этот метод запросит у пользователя разрешение на отправку уведомлений. В противном случае он возвращает токен или отклоняет будущую отправку из-за ошибки.
final fcmToken = await FirebaseMessaging.instance.getToken();
Отправить тестовое уведомление
Установите и запустите приложение на целевом устройстве. На устройствах Apple вам потребуется принять запрос на разрешение получать удалённые уведомления.
Убедитесь, что приложение работает в фоновом режиме на устройстве.
В консоли Firebase откройте страницу «Сообщения» .
Если это ваше первое сообщение, выберите Создать свою первую кампанию .
- Выберите Уведомления Firebase и нажмите Создать .
В противном случае на вкладке «Кампании» выберите «Новая кампания» , а затем «Уведомления» .
Введите текст сообщения. Остальные поля необязательны для заполнения.
Выберите Отправить тестовое сообщение на правой панели.
В поле Добавить регистрационный токен FCM введите регистрационный токен, полученный вами в предыдущем разделе данного руководства.
Выберите Тест .
После выбора Теста целевое клиентское устройство (с приложением в фоновом режиме) должно получить уведомление.
Для получения более подробной информации о доставке сообщений в ваше приложение см. панель отчетности FCM , на которой регистрируется количество отправленных и открытых сообщений на устройствах Apple и Android, а также данные о «показах» (уведомлениях, увиденных пользователями) для приложений Android.
Обработка взаимодействия
При нажатии на уведомление по умолчанию на Android и iOS открывается приложение. Если приложение закрыто, оно запустится, а если оно находится в фоновом режиме, оно будет выведено на передний план.
В зависимости от содержания уведомления вам может потребоваться обрабатывать действия пользователя при открытии приложения. Например, если новое сообщение чата отправлено с помощью уведомления, и пользователь выбирает его, вам может потребоваться открыть соответствующее сообщение при открытии приложения.
Пакет firebase-messaging
предоставляет два способа обработки этого взаимодействия:
-
getInitialMessage()
: если приложение открывается из завершённого состояния, этот метод возвращаетFuture
, содержащийRemoteMessage
. После использованияRemoteMessage
будет удалён. -
onMessageOpenedApp
:Stream
, который отправляетRemoteMessage
при открытии приложения из фонового состояния.
Чтобы обеспечить пользователям бесперебойную работу, необходимо учитывать оба сценария. Пример кода ниже показывает, как это можно реализовать:
class Application extends StatefulWidget {
@override
State<StatefulWidget> createState() => _Application();
}
class _Application extends State<Application> {
// In this example, suppose that all messages contain a data field with the key 'type'.
Future<void> setupInteractedMessage() async {
// Get any messages which caused the application to open from
// a terminated state.
RemoteMessage? initialMessage =
await FirebaseMessaging.instance.getInitialMessage();
// If the message also contains a data property with a "type" of "chat",
// navigate to a chat screen
if (initialMessage != null) {
_handleMessage(initialMessage);
}
// Also handle any interaction when the app is in the background via a
// Stream listener
FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
}
void _handleMessage(RemoteMessage message) {
if (message.data['type'] == 'chat') {
Navigator.pushNamed(context, '/chat',
arguments: ChatArguments(message),
);
}
}
@override
void initState() {
super.initState();
// Run code required to handle interacted messages in an async function
// as initState() must not be async
setupInteractedMessage();
}
@override
Widget build(BuildContext context) {
return Text("...");
}
}
Способ взаимодействия зависит от настроек вашего приложения. Приведённый выше пример демонстрирует базовый пример использования StatefulWidget
.
Следующие шаги
Отправка сообщений активным приложениям
После успешной отправки уведомлений, когда приложение работает в фоновом режиме, ознакомьтесь с разделом Получение сообщений в приложении Flutter, чтобы начать отправку сообщений в активные приложения.
Выйдите за рамки уведомлений
Чтобы добавить в приложение другое, более продвинутое поведение, вам понадобится реализация сервера .
Затем в клиентском приложении: