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

Dec 01 2020

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

NihadDelic Dec 01 2020 at 05:11

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 APNSConfigpropiedad 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=Truecuál está contenido dentro de la APNSConfigpropiedad, 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',
                },
            ),
        )
    ),
ParveshKhan Dec 01 2020 at 10:31

También estaba teniendo el mismo problema, intente cargar el archivo IPA en testflight y luego funcionará.

RJB Dec 03 2020 at 02:28

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ó