有时会收到一些用户的通知,但其他用户则不会



我使用Firebase函数让我的商店客户在任何用户向他们的商店购买新订单时收到通知。

我成功地做到了这一点,并且工作得很好,商店收到了通知

exports.onNewOrderCreated = functions.firestore
.document('orders/{orderId}').onCreate((snap, context) => {
var db = admin.firestore();
try{
const docData = snap.data()
var shopId = docData.shopId;
var userName = docData.userName;
var total = docData.total;

}catch(error){
return handleErrorToUser(error);
}
var shopUserRef = db.collection('user').where('shop', '==', shopId);

return shopUserRef.get().then(userDoc => {
return userDoc.forEach(doc => {
const deviceToken = doc.data().deviceToken
const payload = {
notification: {
title: "You have a new order !! 🛎️ ",
body: String(userName+" placed a new order for $"+total),
}
}
console.log("userId:"+doc.data().displayName+" deviceToken"+deviceToken)
return admin.messaging().sendToDevice(deviceToken,payload)
});
});
});

所以这个函数的作用是,当一个新订单被放在订单集合下时,它会检查该订单的shopId,然后它会迭代到用户集合中,通过shopId找到店主,当找到店主时,我会生成一个通知并将其发送给商店客户。

现在我认为,当创建了这么多订单时,这些功能无法正常工作,我不知道为什么

今天,我接到一位商店顾客说,新订单的通知一直没有收到。

有什么超出我可以添加到这个函数中以使其正常工作的范围吗?

根据设置消息的优先级:

您可以按以下设置优先级

android:{
"priority":"normal"
},

和TTL:

"android":{
"ttl":"4500s"
},

应用于您的代码应该是:

{
notification: {
title: "You have a new order !! 🛎️ ",
body: String(userName+" placed a new order for $"+total),
},
android:{
"priority":"high",
"ttl":"4500s"
}
}
}

我想知道这个案例是否也与崩溃的消息有关。我发现了这个关于collapsednon-collapsed消息的问题,您可能对此感兴趣。以下是对答案的总结。

根据消息概念和选项文档:

用例场景:

  • 不可折叠:每条消息对客户端应用程序都很重要,需要传递
  • 可折叠:当有新消息呈现与客户端应用程序无关的旧相关消息时,FCM会替换旧消息。例如:用于从服务器启动数据同步的消息,或过时的通知消息

还有:

消息默认情况下是不可折叠的,但通知消息除外,通知消息总是可折叠

但后来在同一页上,它继续说:

除通知消息外,所有消息都是不可折叠的默认情况下

这有点模棱两可。然而,在有效载荷部分,它指出:

[通知消息]可能具有可选的数据有效负载始终可折叠

因此,似乎不可能使通知消息不可折叠。我建议发送仅限数据的有效载荷。

安卓快速启动示例中有一个例子:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// ...
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
// ...
}
// ...
// Also if you intend on generating your own notifications as a result of a received FCM
// message, here is where that should be initiated. See sendNotification method below.
}

最后一条注释指向示例sendNotification()方法。

由于IOS手机,请尝试添加选项:

let options = {
priority: "high",
timeToLive: 24*60*60 // Choose any convenient number of seconds.
}
return admin.messaging().sendToDevice(deviceToken, payload, options)

请查看此处的文档。

相关内容

  • 没有找到相关文章

最新更新