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