Flutter、Firebase ios、クラウドメッセージは、アプリがバックグラウンドにある場合は表示されず、アプリがフォアグラウンドにある場合にのみ表示されます
私はフラッター依存関係を使用しています:
firebase_messaging: ^7.0.3
flutter_local_notifications: ^3.0.1+6
次のようなFirebaseCloudメッセージを送信します。
{
"to": "/topics/demo_ios"
"notification" : {
"body" : "Hi there now now",
"title" : "Wow!",
"sound": "default"
},
"priority": "high"
"data": {
"title": "Hi there yes",
"body": "Wow",
}
}
iOSでは、通知はアプリがフォアグラウンドにあるときに表示されますが、バックグラウンドにあるときはまったく表示されません。多くのことを読んで修正しようとしましたが、それでも機能しません。xcodeからバックグラウンドフェッチ、リモート通知、バックグラウンド処理を設定しましたが、それでも機能しません。
plistファイルでFirebaseAppDelegateProxyEnabledをfalseに設定しましたが、役に立ちませんでした。
許可を求めます:
_messaging.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true, provisional: false)
);
_messaging.onIosSettingsRegistered.listen((event) {print('2124: ios Setting registered');});
回答
まず、プラグインをに更新することをお勧めしますfirebase_messaging: ^8.0.0-dev.8
。iOSのバックグラウンド処理が有効になっているためです。ここでこの変更を参照してください:
- iOSバックグラウンドハンドラーのサポート。
次に、それらすべてをFlutterプロジェクトに統合する方法については、公式ドキュメントFlutterFire(これはプラグインの8.xx-devバージョンの直後のドキュメントです)に従ってください。
最後に、APNの詳細をお読みください。これは、Appleがこれらのメッセージを異なる方法で処理APNSConfig
し、通知を送信するためにスクリプト内にプロパティを含める必要があるためです。
あなたはFirebaseAdmin経由で通知を送信している場合は、お読みくださいこれを。
その場合、プロパティcontent_available=True
内に含まれるものを設定する必要があることを忘れないでくださいAPNSConfig
。したがって、基本的にFirebaseAdminを使用している場合は、次のようなプロパティも含める必要があります。
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',
},
),
)
),
私も同じ問題を抱えていました。testflightにIPAファイルをアップロードしてみてください。そうすればうまくいきます。
まあ、解決策は非常に簡単で、私に代わって間違いがありました。
文書pub.devが述べているように:
Firebaseドキュメントのこのガイドに従って、プッシュ通知を受信するためにAppleが必要とする証明書を生成します。「プロビジョニングプロファイルの作成」というタイトルのセクションはスキップできます。
リンクは次のとおりです。 https://firebase.google.com/docs/cloud-messaging/ios/certs
これらの手順を実行するのを忘れました。これを行った後、それはうまくいきました