Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

Чтобы начать работу с 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. Выберите Тест .

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

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

Не ограничивайтесь сообщениями уведомлений

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

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