グーグルのファイアベースを使用してサイレントAPNSを送信する方法はありますか?アプリがバックグラウンドにある場合、常にユーザーに通知が表示されるようです。
ありがとう
FCMサーバーAPIを使用してサイレントAPNSメッセージを送信できます https://firebase.google.com/docs/cloud-messaging/http-server-ref
特に、以下を使用する必要があります。
このパラメーターは、メッセージのペイロードのカスタムキーと値のペアを指定します。
たとえば、data:{"score": "3x1"}の場合:
IOSでは、メッセージがAPNS経由で送信される場合、カスタムデータフィールドを表します。 FCM接続サーバー経由で送信される場合、AppDelegate application:didReceiveRemoteNotification:でキー値辞書として表されます。
キーは予約語(「from」または「google」または「gcm」で始まる任意のWord)であってはなりません。このテーブルで定義されている単語(collapse_keyなど)は使用しないでください。
文字列型の値が推奨されます。オブジェクトまたは他の文字列以外のデータ型(整数やブールなど)の値を文字列に変換する必要があります
IOSでは、このフィールドを使用して、APNSペイロードで利用可能なコンテンツを表します。通知またはメッセージが送信され、これがtrueに設定されている場合、非アクティブなクライアントアプリが起動されます。 Androidでは、デフォルトでデータメッセージがアプリを起動します。 Chromeでは、現在サポートされていません。
完全なドキュメント: https://firebase.google.com/docs/cloud-messaging/http-server-ref#downstream-http-messages-json
FCMサーバーを使用した真のサイレント通知(フォアグラウンドとバックグラウンドの両方)には、次のフィールドを使用します。
"to" : "[token]",
"content_available": true,
"priority": "high",
"data" : {
"key1" : "abc",
"key2" : 123
}
注:「content_available」を使用していることを確認してください[〜#〜] not [〜#〜] FCMで「content-available」を使用してください。 APNS用に変換されており、それ以外の場合は正しく受信されません。違いはしばらく私をつまずかせていた。
このトピックについては、ブログで詳しく説明しています。 http://blog.boxstory.com/2017/01/how-to-send-silent-Push-notification-in.html
**キーポイントは: "content_available:true"
{
"to" : "<device>",
"priority": "normal",
"content_available": true, <-- this key is converted to 'content-available:1'
"notification" : {
"body" : "noti body",
"title" : "noti title",
"link": "noti link "
}
}
注:上記のサンプルJSONが送信された場合、通知はユーザーに表示されます。ユーザーにプッシュ通知を表示したくない場合は、以下を使用します。
{
"to": "<device>",
"priority": "normal",
"content_available": true <-- this key is converted to 'content-available:1'
}
他の回答で示されているようにLegacy HTTP
を使用せず、最新のv1 HTTP protocol
を使用している人のために、私はついにサイレント通知を送信する正しい方法を見つけました。
firebase-admin
を使用したNodeJSの例:
const message = {
apns: {
payload: {
aps: {
"content-available": 1,
alert: ""
}
}
}
};
admin
.messaging()
.send(message)
.then(response => {
// Response is a message ID string.
console.log("Successfully sent message:", response);
})
.catch(error => {
console.log("Error sending message:", error);
});
説明:
apns
のペイロードはv1 HTTP protocol
のFirebaseによって変換されないため、元の"content-available": 1
が必要です。alert: ""
も必要です。 Pusher
などを使用してサイレント通知を送信しようとすると、content-available
のみがトリガーできないことがわかります。代わりに、sound
やalert
などの追加フィールドを追加すると機能します。 iOS 7のサイレントプッシュ通知が機能しない を参照してください。 Firebaseは空のサウンドを禁止しているため、空のアラートを使用できます。