Flutter, Firebase ios, облачное сообщение не отображается, когда приложение находится в фоновом режиме, только если приложение на переднем плане
Я использую зависимости от флаттера:
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');});
Ответы
Сначала я рекомендую вам обновить плагин до 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',
},
),
)
),
У меня также была такая же проблема, попробуйте загрузить файл IPA на testflight, тогда он сработает, надеюсь, что да.
Что ж, решение было довольно простым и ошибкой с моей стороны.
Как утверждают документы pub.dev:
Сгенерируйте сертификаты, необходимые Apple для получения push-уведомлений, следуя этому руководству в документации Firebase. Вы можете пропустить раздел «Создание профиля обеспечения».
Ссылка здесь: https://firebase.google.com/docs/cloud-messaging/ios/certs
Я забыл сделать эти шаги. После этого все заработало