Flutter, Firebase ios, komunikat w chmurze nie wyświetla się, gdy aplikacja działa w tle, tylko wtedy, gdy aplikacja jest na pierwszym planie

Dec 01 2020

Używam zależności flutter:

firebase_messaging: ^7.0.3
flutter_local_notifications: ^3.0.1+6

Wysyłam wiadomość w chmurze Firebase w ten sposób:

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

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

W iOS powiadomienie pokazuje, kiedy aplikacja jest na pierwszym planie, ale gdy działa w tle, w ogóle się nie wyświetla. Próbowałem przeczytać i naprawić wiele rzeczy, ale nadal nie działa. Ustawiłem pobieranie w tle, zdalne powiadomienia i przetwarzanie w tle z xcode, ale nadal nie działa.

Ustawiłem FirebaseAppDelegateProxyEnabled na false w pliku plist, ale to nie pomogło.

Proszę o pozwolenie:

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

Odpowiedzi

NihadDelic Dec 01 2020 at 05:11

najpierw zalecam aktualizację wtyczki do firebase_messaging: ^8.0.0-dev.8, ponieważ jest tam włączona obsługa iOS w tle. Zobacz tutaj tę zmianę:

  • Obsługa obsługi w tle w systemie iOS.

Następnie, jak zintegrować to wszystko z projektem flutter, postępuj zgodnie z oficjalną dokumentacją FlutterFire (jest to dokumentacja tuż po wersjach 8.xx-dev wtyczki.

Na koniec przeczytaj więcej o APN, ponieważ Apple inaczej obsługuje te wiadomości i musisz mieć APNSConfigwłaściwość wewnątrz skryptu do wysyłania powiadomień.

Jeśli wysyłasz powiadomienia przez FirebaseAdmin, przeczytaj to .

Nie zapominaj, że w takim przypadku musisz ustawić, content_available=Truektóry jest zawarty wewnątrz APNSConfigwłaściwości, więc w zasadzie, jeśli używasz FirebaseAdmin, powinieneś dołączyć również właściwość podobną do tej:

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

Miałem też ten sam problem, spróbuj załadować plik IPA na testflight, a wtedy zadziała, mam nadzieję, że tak.

RJB Dec 03 2020 at 02:28

Cóż, rozwiązanie było dość proste i pomyłka w moim imieniu.

Jak podają documnents pub.dev:

Wygeneruj certyfikaty wymagane przez Apple do otrzymywania powiadomień push zgodnie z tym przewodnikiem w dokumentacji Firebase. Możesz pominąć sekcję zatytułowaną „Utwórz profil obsługi administracyjnej”.

Tutaj jest link: https://firebase.google.com/docs/cloud-messaging/ios/certs

Zapomniałem wykonać te czynności. Po wykonaniu tej czynności zadziałało