Чтобы начать работу с FCM, создайте простейший вариант использования: отправка тестового уведомления из Notifications composer на устройство разработки, когда приложение находится в фоновом режиме на устройстве. На этой странице перечислены все шаги для достижения этого, от настройки до проверки — она может охватывать шаги, которые вы уже выполнили, если вы настроили приложение Flutter для FCM.
Установить плагин FCM
Установите и инициализируйте Firebase SDK для 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, чтобы начать отправку сообщений в активные приложения.
Выйдите за рамки уведомлений
Чтобы добавить в приложение другое, более продвинутое поведение, вам понадобится реализация сервера .
Затем в клиентском приложении: