Flutter, Firebase ios, komunikat w chmurze nie wyświetla się, gdy aplikacja działa w tle, tylko wtedy, gdy aplikacja jest na pierwszym planie
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
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ć APNSConfig
wł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=True
który jest zawarty wewnątrz APNSConfig
wł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',
},
),
)
),
Miałem też ten sam problem, spróbuj załadować plik IPA na testflight, a wtedy zadziała, mam nadzieję, że tak.
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