Отправьте тестовое сообщение в фоновое приложение

Чтобы начать работу с FCM, создайте простейший вариант использования: отправка тестового уведомления из Notifications composer на устройство разработки, когда приложение находится в фоновом режиме на устройстве. На этой странице перечислены все шаги для достижения этого, от настройки до проверки — она может охватывать шаги, которые вы уже выполнили, если вы настроили приложение Flutter для FCM.

Установить плагин FCM

  1. Установите и инициализируйте Firebase SDK для Flutter, если вы еще этого не сделали.

  2. Из корня вашего проекта Flutter выполните следующую команду для установки плагина:

    flutter pub add firebase_messaging
    
  3. После завершения перестройте приложение Flutter:

    flutter run
    

Доступ к регистрационному токену

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

Чтобы получить текущий токен регистрации для экземпляра приложения, вызовите getToken() . Если разрешение на уведомление не было предоставлено, этот метод запросит у пользователя разрешения на уведомление. В противном случае он возвращает токен или отклоняет будущее из-за ошибки.

final fcmToken = await FirebaseMessaging.instance.getToken();

Отправить тестовое уведомление

  1. Установите и запустите приложение на целевом устройстве. На устройствах Apple вам нужно будет принять запрос на разрешение на получение удаленных уведомлений.

  2. Убедитесь, что приложение работает в фоновом режиме на устройстве.

  3. В консоли Firebase откройте страницу «Сообщения» .

  4. Если это ваше первое сообщение, выберите Создать свою первую кампанию .

    1. Выберите Уведомления Firebase и нажмите Создать .
  5. В противном случае на вкладке «Кампании» выберите «Новая кампания» , а затем «Уведомления» .

  6. Введите текст сообщения. Все остальные поля необязательны.

  7. Выберите Отправить тестовое сообщение на правой панели.

  8. В поле Добавить токен регистрации FCM введите токен регистрации, полученный вами в предыдущем разделе данного руководства.

  9. Выберите Тест .

После выбора Теста целевое клиентское устройство (с приложением в фоновом режиме) должно получить уведомление.

Для получения более подробной информации о доставке сообщений в ваше приложение см. панель отчетов FCM , которая регистрирует количество отправленных и открытых сообщений на устройствах Apple и Android, а также данные о «показах» (уведомлениях, просмотренных пользователями) для приложений Android.

Взаимодействие при обработке

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

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

Пакет firebase-messaging предоставляет два способа обработки этого взаимодействия:

  1. getInitialMessage() : Если приложение открывается из завершенного состояния, этот метод возвращает Future , содержащий RemoteMessage . После использования RemoteMessage будет удален.
  2. 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, чтобы начать отправку сообщений в активные приложения.

Выйдите за рамки уведомлений

Чтобы добавить в приложение другое, более продвинутое поведение, вам понадобится реализация сервера .

Затем в клиентском приложении: