Flutter, Firebase ios, mensagem na nuvem não é exibida quando o aplicativo está em segundo plano, apenas se estiver em primeiro plano

Dec 01 2020

Estou usando dependências de flutter:

firebase_messaging: ^7.0.3
flutter_local_notifications: ^3.0.1+6

Eu envio a mensagem do Firebase Cloud assim:

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

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

No ios, a notificação mostra quando o aplicativo está em primeiro plano, no entanto, quando está em segundo plano, ela não aparece. Tentei ler e consertar muitas coisas, mas ainda não funciona. Eu defino a busca em segundo plano, notificações remotas e processamento em segundo plano do xcode e ainda não funciona.

Defini FirebaseAppDelegateProxyEnabled como false no arquivo plist, mas não ajudou.

Eu solicito permissão:

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

Respostas

NihadDelic Dec 01 2020 at 05:11

primeiro, recomendo que você atualize o plug-in para firebase_messaging: ^8.0.0-dev.8, porque o tratamento em segundo plano do iOS está ativado lá. Veja aqui esta mudança:

  • Suporte ao manipulador de segundo plano do iOS.

A seguir, como integrar tudo isso ao seu projeto flutter, siga a documentação oficial do FlutterFire (esta é a documentação logo após as versões 8.xx-dev do plugin.

Por fim, leia mais sobre o APN, porque a Apple está tratando essas mensagens de maneira diferente e você precisa ter a APNSConfigpropriedade dentro do seu script para enviar notificações.

Se você estiver enviando notificações por meio do FirebaseAdmin, leia isto .

Não se esqueça de que, nesse caso, você precisa definir o content_available=Trueque está contido dentro da APNSConfigpropriedade, então, basicamente, se você estiver usando FirebaseAdmin, deve incluir também uma propriedade semelhante 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

Eu também estava tendo o mesmo problema, tente fazer o upload do arquivo IPA no testflight, então espero que funcione.

RJB Dec 03 2020 at 02:28

Bem, a solução foi bastante simples e um erro da minha parte.

Como o documento pub.dev afirma:

Gere os certificados exigidos pela Apple para receber notificações push seguindo este guia nos documentos do Firebase. Você pode pular a seção intitulada "Criar o perfil de provisionamento".

Aqui está o link: https://firebase.google.com/docs/cloud-messaging/ios/certs

Esqueci de fazer essas etapas. Depois de fazer isso, funcionou