当应用处于活动状态时通过 FCM 发送通知
Sending notifications via FCM when app is active
即使应用程序处于前台,我如何才能让推送消息保持未读状态?
我正在使用 ionic 创建一个应用程序。我使用使用 firebase 云消息传递 (cordova-plugin-fcm-with-dependecy-updated) 的推送通知来订阅消息,并使用后端进行发送。
后端请求示例:
{
"headers": {
"Authorization": "key = blahblah",
"Content-Type": "application / json",
"project_id": "111111111111"
},
"json": {
"registration_ids": [
"token"
],
"time_to_live": 1200,
"data": {
"title": "title",
"body": "body",
"sound": "default",
"badge": 1,
"click_action": "FCM_PLUGIN_ACTIVITY"
}
}
}
我还尝试发送通知键而不是日期键。试图添加到 root
{
...
"android": {
"ttl": "1200s",
"priority": "high",
"notification": {
"click_action": "FCM_PLUGIN_ACTIVITY"
}
},
...
"apns":{
"headers":{
"apns-priority":10,
"apns-expiration": date('U') + 1200
},
"payload":{
"aps":{
"badge":1,
"category":"FCM_PLUGIN_ACTIVITY"
}
}
}
}
结果是一样的——当应用程序在后台时,推送不显示在托盘中。
如果应用程序在前台,我如何让推送保持未读状态,并仅在用户点击时在 this.fcm.onNotification().subscribe(...)
调用我的操作?
p.s。我尝试使用 cordova-plugin-local-notification,但使用它会导致一些冲突 - subscribe
操作不会在 ios
中触发
我在我的应用程序中使用 ionic 和 cordova。
我正在使用插件 [cordova-plugin-firebasex] (https://github.com/dpa99c/cordova-plugin-firebasex) 接收推送。
要发送推送,请使用以下 json:
{
"registration_ids": [
"token"
],
"notification":{
"title":"Ionic 4 Notification",
"body":"Notification sent from POSTMAN",
"sound":"default",
"click_action":"FCM_PLUGIN_ACTIVITY",
"icon":"notification_icon"
},
"data":{
"email":"teste@gmail.com"
},
"priority":"high"
}
对于android,应用程序在后台时显示通知的“通知”字段。
如果您在前台,则必须使用插件自己显示通知 [cordova-plugin-local-notifications] (https://github.com/katzer/cordova-plugin-local-notifications)
我的代码:
constructor(private firebaseCordova: FirebaseX) {}
private initializePushApp() {
this.checkNotificationPermission(false);
this.onMessageApp();
}
checkNotificationPermission(requested) {
try {
this.firebaseCordova.hasPermission().then(hasPermission => {
if (hasPermission) {
this.getTokenApp();
} else if (!requested) {
this.firebaseCordova.grantPermission().then(value => {
this.checkNotificationPermission(true);
});
} else {
// Denied
console.log("Notifications won't be shown as permission is denied");
}
});
} catch (e) {
console.error(e);
}
}
onMessageApp() {
try {
this.firebaseCordova.onMessageReceived().subscribe(data => {
this.showNotificationCordova(data);
});
} catch (e) {
console.error(e);
}
}
showNotificationCordova(notification) {
if ('background' === notification.tap) {
// click on notification in background
alert(notification.title);
} else {
this.clickNotificationSub = this.localNotifications.on('click').subscribe(data => {
// click on notification in foreground
alert(notification.title);
});
this.localNotifications.hasPermission().then(permission => {
if (permission) {
this.localNotifications.schedule({
id: 1,
title: notification.title,
text: notification.body,
icon: notification.image ? notification.image : 'notification_icon',
});
} else {
this.localNotifications.requestPermission().then(value => {
if (value) {
this.localNotifications.schedule({
id: 1,
title: notification.title,
text: notification.body,
icon: notification.image ? notification.image : 'notification_icon',
});
} else {
console.log("Notifications won't be shown as permission is denied");
}
});
}
});
}
}
当您输入此条件时 'background' === notification.tap` 在后台单击通知
即使应用程序处于前台,我如何才能让推送消息保持未读状态?
我正在使用 ionic 创建一个应用程序。我使用使用 firebase 云消息传递 (cordova-plugin-fcm-with-dependecy-updated) 的推送通知来订阅消息,并使用后端进行发送。 后端请求示例:
{
"headers": {
"Authorization": "key = blahblah",
"Content-Type": "application / json",
"project_id": "111111111111"
},
"json": {
"registration_ids": [
"token"
],
"time_to_live": 1200,
"data": {
"title": "title",
"body": "body",
"sound": "default",
"badge": 1,
"click_action": "FCM_PLUGIN_ACTIVITY"
}
}
}
我还尝试发送通知键而不是日期键。试图添加到 root
{
...
"android": {
"ttl": "1200s",
"priority": "high",
"notification": {
"click_action": "FCM_PLUGIN_ACTIVITY"
}
},
...
"apns":{
"headers":{
"apns-priority":10,
"apns-expiration": date('U') + 1200
},
"payload":{
"aps":{
"badge":1,
"category":"FCM_PLUGIN_ACTIVITY"
}
}
}
}
结果是一样的——当应用程序在后台时,推送不显示在托盘中。
如果应用程序在前台,我如何让推送保持未读状态,并仅在用户点击时在 this.fcm.onNotification().subscribe(...)
调用我的操作?
p.s。我尝试使用 cordova-plugin-local-notification,但使用它会导致一些冲突 - subscribe
操作不会在 ios
我在我的应用程序中使用 ionic 和 cordova。
我正在使用插件 [cordova-plugin-firebasex] (https://github.com/dpa99c/cordova-plugin-firebasex) 接收推送。
要发送推送,请使用以下 json:
{
"registration_ids": [
"token"
],
"notification":{
"title":"Ionic 4 Notification",
"body":"Notification sent from POSTMAN",
"sound":"default",
"click_action":"FCM_PLUGIN_ACTIVITY",
"icon":"notification_icon"
},
"data":{
"email":"teste@gmail.com"
},
"priority":"high"
}
对于android,应用程序在后台时显示通知的“通知”字段。
如果您在前台,则必须使用插件自己显示通知 [cordova-plugin-local-notifications] (https://github.com/katzer/cordova-plugin-local-notifications)
我的代码:
constructor(private firebaseCordova: FirebaseX) {}
private initializePushApp() {
this.checkNotificationPermission(false);
this.onMessageApp();
}
checkNotificationPermission(requested) {
try {
this.firebaseCordova.hasPermission().then(hasPermission => {
if (hasPermission) {
this.getTokenApp();
} else if (!requested) {
this.firebaseCordova.grantPermission().then(value => {
this.checkNotificationPermission(true);
});
} else {
// Denied
console.log("Notifications won't be shown as permission is denied");
}
});
} catch (e) {
console.error(e);
}
}
onMessageApp() {
try {
this.firebaseCordova.onMessageReceived().subscribe(data => {
this.showNotificationCordova(data);
});
} catch (e) {
console.error(e);
}
}
showNotificationCordova(notification) {
if ('background' === notification.tap) {
// click on notification in background
alert(notification.title);
} else {
this.clickNotificationSub = this.localNotifications.on('click').subscribe(data => {
// click on notification in foreground
alert(notification.title);
});
this.localNotifications.hasPermission().then(permission => {
if (permission) {
this.localNotifications.schedule({
id: 1,
title: notification.title,
text: notification.body,
icon: notification.image ? notification.image : 'notification_icon',
});
} else {
this.localNotifications.requestPermission().then(value => {
if (value) {
this.localNotifications.schedule({
id: 1,
title: notification.title,
text: notification.body,
icon: notification.image ? notification.image : 'notification_icon',
});
} else {
console.log("Notifications won't be shown as permission is denied");
}
});
}
});
}
}
当您输入此条件时 'background' === notification.tap` 在后台单击通知