适用于iOS的Firebase FCM静默推送通知

5hcedyr0  于 2023-03-19  发布在  iOS
关注(0)|答案(5)|浏览(176)

我在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>"
}

我已经试过删除“priority”键了,因为我看到有人说如果已经设置了“content_available”,就不应该设置优先级。
1.我在XCode〉功能中启用了“推送通知”。
1.我在XCode〉Capabilities的后台模式中选中了“远程通知”。
1.当应用程序在前台时,FCM通知工作正常,有时当应用程序在后台时。

kkbh8khc

kkbh8khc1#

删除**“通知”键值对并添加“内容_可用”:真实**
它看起来像这样

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

这应该使它成为一个静默APNS,您需要使用相应的APNS委托方法进行处理。
您需要通过委托来处理此问题。有关详细信息,请参阅此firebase文档:https://firebase.google.com/docs/cloud-messaging/concept-options

irlmq6kh

irlmq6kh2#

我找到了一个变通办法。我在“通知”字段中为“声音”设置了一个空值,即使应用程序在后台运行,静音通知也会发送。

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

我的直觉是,苹果不允许“高”优先级的静音通知和某种“通知”:{“sound”:“"}欺骗APNS该通知不是无声通知。

ep6jt1vc

ep6jt1vc3#

我正在使用nodejs开发Firebase静默推送通知。当我尝试下面的代码时,它工作正常。当我添加“优先级”时:“高”和“可用内容”:正确,给出以下错误。
在以下代码下工作

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);
});

在消息对象中添加prioritycontent_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' }
nwlqm0z1

nwlqm0z14#

如果你使用的是云函数,我发现了很多的资料,甚至是官方文档中已经过时的,或者是不同的打字界面。
这对我来说终于起作用了。与其设置alert: "",不如 leave it out,它是可选的。对于自定义属性,您可以添加到message.apns.payload。fcmToken应该是用户设备上的令牌。

const message: TokenMessage = {
    token: fcmToken,
    apns: {
      headers: {
        "apns-priority": "5",
      },
      payload: {
        aps: {
          contentAvailable: true,
        },
        my_custom_parameter: true,
      },
    },
  };

  admin
    .messaging()
    .send(message)
    .then(() => {
      // do something.
    })
    .catch((error) => {
      functions.logger.error(
        "Error sending push notification: " + error.toString()
      );
      // Do something.
    });
};
yrefmtwq

yrefmtwq5#

请按照documentation for server side并按照文档中的说明设置json。我以前遇到过类似的问题,并在本文档中解决了这个问题。

{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "priority" : "high",
  "content_available": true,
  "notification" : {
    "body" : "",
    "title" : "",
    "icon" : "new"
  },
  "data" : {
    "volume" : "3.21.15",
    "contents" : "http://www.news-magazine.com/world-week/21659772"
  }
}

content_available = true并且body、title为空执行任务。

相关问题