Flutter, Firebase ios, el mensaje en la nube no se muestra cuando la aplicación está en segundo plano, solo si la aplicación está en primer plano
Estoy usando dependencias de flutter:
firebase_messaging: ^7.0.3
flutter_local_notifications: ^3.0.1+6
Envío un mensaje en la nube de base de fuego como este:
{
"to": "/topics/demo_ios"
"notification" : {
"body" : "Hi there now now",
"title" : "Wow!",
"sound": "default"
},
"priority": "high"
"data": {
"title": "Hi there yes",
"body": "Wow",
}
}
En ios, la notificación muestra cuando la aplicación está en primer plano, sin embargo, cuando está en segundo plano, no se muestra en absoluto. Intenté leer y arreglar muchas cosas, pero todavía no funciona. Configuré la búsqueda en segundo plano, las notificaciones remotas y el procesamiento en segundo plano desde xcode, y todavía no funciona.
Configuré FirebaseAppDelegateProxyEnabled en falso en el archivo plist, pero no ayudó.
Solicito permiso:
_messaging.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true, provisional: false)
);
_messaging.onIosSettingsRegistered.listen((event) {print('2124: ios Setting registered');});
Respuestas
Primero, le recomiendo que actualice el complemento a firebase_messaging: ^8.0.0-dev.8
, porque el manejo en segundo plano de iOS está habilitado allí. Vea aquí este cambio:
- Compatibilidad con el controlador en segundo plano de iOS.
A continuación, cómo integrar todo eso a su proyecto de flutter, siga la documentación oficial de FlutterFire (esta es la documentación justo después de las versiones 8.xx-dev del complemento.
Finalmente, lea más sobre APN, porque Apple está manejando de manera diferente esos mensajes y necesita tener la APNSConfig
propiedad dentro de su script para enviar notificaciones.
Si envía notificaciones a través de FirebaseAdmin, lea esto .
No olvides que, en ese caso, debes establecer content_available=True
cuál está contenido dentro de la APNSConfig
propiedad, así que básicamente si estás usando FirebaseAdmin también debes incluir una propiedad similar a esta:
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',
},
),
)
),
También estaba teniendo el mismo problema, intente cargar el archivo IPA en testflight y luego funcionará.
Bueno, la solución fue bastante simple y un error por mi parte.
Como dicen los documnents pub.dev:
Genere los certificados requeridos por Apple para recibir notificaciones push siguiendo esta guía en los documentos de Firebase. Puede omitir la sección titulada "Crear el perfil de aprovisionamiento".
Aqui esta el link: https://firebase.google.com/docs/cloud-messaging/ios/certs
Olvidé seguir estos pasos. Después de hacer esto, funcionó