Flutter, Firebase ios, облачное сообщение не отображается, когда приложение находится в фоновом режиме, только если приложение на переднем плане

Dec 01 2020

Я использую зависимости от флаттера:

firebase_messaging: ^7.0.3
flutter_local_notifications: ^3.0.1+6

Я отправляю облачное сообщение firebase следующим образом:

{
"to": "/topics/demo_ios"
"notification" : {
"body" : "Hi there now now",
"title" : "Wow!",
"sound": "default"

},
 "priority": "high"
"data": {
    "title": "Hi there yes",
    "body": "Wow",
}
}

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

Я установил для FirebaseAppDelegateProxyEnabled значение false в файле plist, но это не помогло.

Прошу разрешения:

_messaging.requestNotificationPermissions(
  const IosNotificationSettings(sound: true, badge: true, alert: true, provisional: false)
);
_messaging.onIosSettingsRegistered.listen((event) {print('2124: ios Setting registered');});

Ответы

NihadDelic Dec 01 2020 at 05:11

Сначала я рекомендую вам обновить плагин до firebase_messaging: ^8.0.0-dev.8, потому что там включена фоновая обработка iOS. Смотрите здесь это изменение:

  • Поддержка фонового обработчика iOS.

Затем, как интегрировать все это в ваш проект flutter, следуйте официальной документации FlutterFire (это документация сразу после версии 8.xx-dev плагина.

Наконец, прочитайте больше об APN, потому что Apple по-разному обрабатывает эти сообщения, и вам нужно иметь APNSConfigсвойство внутри вашего скрипта для отправки уведомлений.

Если вы отправляете уведомления через FirebaseAdmin, прочтите это .

Не забывайте, что в этом случае вам нужно указать, content_available=Trueчто содержится внутри APNSConfigсвойства, поэтому в основном, если вы используете FirebaseAdmin, вы должны также включить свойство, подобное этому:

apns=messaging.APNSConfig(
        payload=messaging.APNSPayload(
            aps=messaging.Aps(
                alert='alert text',
                sound='s',
                content_available=True,
                mutable_content=True,
                category='c',
                thread_id='t',
                custom_data={
                    'id': 'xxx',
                    'type': 'xxx',
                    'title': 'Robb',
                    'content': 'Axxxx',
                    'image': 'xxx',
                    'deepLink': 'xxxx',
                },
            ),
        )
    ),
ParveshKhan Dec 01 2020 at 10:31

У меня также была такая же проблема, попробуйте загрузить файл IPA на testflight, тогда он сработает, надеюсь, что да.

RJB Dec 03 2020 at 02:28

Что ж, решение было довольно простым и ошибкой с моей стороны.

Как утверждают документы pub.dev:

Сгенерируйте сертификаты, необходимые Apple для получения push-уведомлений, следуя этому руководству в документации Firebase. Вы можете пропустить раздел «Создание профиля обеспечения».

Ссылка здесь: https://firebase.google.com/docs/cloud-messaging/ios/certs

Я забыл сделать эти шаги. После этого все заработало