我正在通过Google 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)
答案 0 :(得分:0)
设置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);
答案 1 :(得分:0)
我不确定您如何设置Push通知,但是您可以像这样将额外的数据标记到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