我正在通过谷歌FCM从服务器向客户端发送推送通知。
在 react-native 应用程序中,我已经注册了这些侦听器:
this.notificationOpenedListener = firebase.notifications().onNotificationOpened(async (notificationOpen) => {
})
this.notificationListener = firebase.notifications().onNotification(async (notification) => {
});
notification
数据包含收到通知时是否应该有声音/振动的信息。
但是,我找不到任何有关按需完全禁用声音/振动的文档。
我怎样才能做到这一点?
更新
我尝试在服务器端将声音设置为空字符串,但通知时仍然有声音/振动。
var message = {
data: {
userId: fromUserId,
},
notification: {
title: `My notifcation`,
body: `Body`,
sound: "",
},
}
return sendToTopic(topicId, message)
向 React Native 项目添加推送通知可能很耗时,并且需要大量调整。请确保正确执行每个步骤,因为跳过一行可能会导致数小时的调试。
点击此链接 - 推送通知
设置notification
目标时,请删除sound
参数。
const notify = {
...message.notification,
show_in_foreground: true,
notify_type: message.NotificationType,
obj_id: message.ObjectId,
sound: '' // remove this
};
firebase.messaging().createLocalNotification(notify);
我不确定您如何设置推送通知,但您可以像这样将额外数据标记到 JSON 中:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
}
}
}
这意味着您可以向其添加布尔值,以便在到达时手动播放提示音,或者在订阅触发时不播放提示音,如下所示:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark",
"playTone" : "true"
}
}
}
然后是在你的回调中检查一个检查响应的情况:
this.notificationListener = firebase.notifications().onNotification(async (notification) => {
if(notification.data.playtone) {
// Play Tone
} else {
// Don't
}
});
通常,虽然推送通知由操作系统而不是应用程序处理,但您可以像以前一样挂接到它并在推送通知到达时执行操作,但通常它们都以相同的"删除所有内容并处理我"风格到达。
Android和Apple都支持优先级,但它可能不是你所追求的:https://firebase.google.com/docs/cloud-messaging/concept-options#setting-the-priority-of-a-message