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

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

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

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

Затем в клиенте вашего приложения: