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

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

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

  1. Установите и инициализируйте Firebase SDKs для 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, чтобы начать отправку сообщений в активные приложения.

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

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

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