web-dev-qa-db-ja.com

iOS用Firebase FCMサイレントプッシュ通知

IOSのサイレント通知に問題があります。

アプリケーションがバックグラウンドにあるとき、FCMから送信されるサイレント通知を受信しません。ただし、APNSに直接送信しようとすると、通知は正常に受信されます。

これはFCMに送信されるJSONです。

{ 
"to" : "<token>",
"priority": "high",
"content_available": true,
"data" : {
  "<key>" : "<string>",
  "<key2>" : "<string>"
}

}

これは、APNSに直接送信されるJSONです。

{
  "aps": {
    "content-available": 1
  },
  "<key>": "<string>",
  "<key>": "<string>"
}

「content_available」がすでに設定されている場合、優先度を設定するべきではないと言っている人がいるので、「priority」キーを削除しようとしました。うまくいきませんでした。

  1. [XCode]> [機能]で[プッシュ通知]を有効にしています。
  2. [XCode]> [機能]のバックグラウンドモードで[リモート通知]をオンにしました。
  3. アプリがフォアグラウンドにあるとき、時にはアプリがバックグラウンドにあるとき、FCM通知は正常に機能しています。
14

"notification"キーと値のペアを削除し、追加 "content_available":true

このようになります

{ 
    "to" : "...",
    "priority": "high",
    "content_available": true,
    "data" : {
      ....
    }
}

これにより、サイレントAPNSになり、対応するAPNSデリゲートメソッドで処理する必要があります。

デリゲートを介してこれを処理する必要があります。詳細については、このfirebaseのドキュメントを参照してください。 https://firebase.google.com/docs/cloud-messaging/concept-options

15
Alap Anerao

回避策を見つけました。 「通知」フィールドに「サウンド」に空の値を入力すると、アプリケーションがバックグラウンドにある場合でもサイレント通知が配信されます。

{ 
    "to" : "...",
    "priority": "high",
    "notification": {
        "sound": ""
    },
    "data" : {
      ....
    }
}

私の予感はAppleは '高'優先度のサイレント通知を許可せず、何らかの方法で "通知":{"サウンド": ""}はこの通知がサイレント通知ではないことをAPNSにだます。

3

私はnodejsを使用してFirebaseサイレントプッシュ通知に取り組んでいました。以下のコードを試してみたところ、うまくいきました。 "priority": "high"および "content_available":trueを追加すると、以下のエラーが発生しました。

コードの下で働いた

const admin = require('firebase-admin');
const serviceAccount ="...."; //service account path
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

let  fcmToken = "...."; // Your token
let message ={
    "token": fcmToken,
    "data": {
        "updateApi": "activity"
    }
} 

admin.messaging().send(message)
  .then((response) =>{
    console.log('Successfully sent notification:', response);
})
  .catch((error) =>{
    console.log('Error while sending notification:', error);
});

メッセージオブジェクトにpriorityおよびcontent_availableを追加するとエラーが発生する

{ code: 'messaging/invalid-argument',
     message: 'Invalid JSON payload received. Unknown name "priority" at \'message\': Cannot find field.\nInvalid JSON payload received. Unknown name "content_available" at \'message\': Cannot find field.' },
  codePrefix: 'messaging' }
1
Priy Ranjan