我使用NativeScript' push-plugin
来接收通知sent from Firebase Cloud Messaging (FCM):
public constructor(
private _services: PushService,
) {
const settings = {
senderID: "XXXXXXXX",
badge: true,
clearBadge: true,
sound: true,
alert: true,
interactiveSettings: {
actions: [{
identifier: 'READ_IDENTIFIER',
title: 'Read',
activationMode: "foreground",
destructive: false,
authenticationRequired: true,
}, {
identifier: 'CANCEL_IDENTIFIER',
title: 'Cancel',
activationMode: "foreground",
destructive: true,
authenticationRequired: true,
}],
categories: [{
identifier: 'READ_CATEGORY',
actionsForDefaultContext: ['READ_IDENTIFIER', 'CANCEL_IDENTIFIER'],
actionsForMinimalContext: ['READ_IDENTIFIER', 'CANCEL_IDENTIFIER'],
}],
},
notificationCallbackIOS: data => {
console.log("DATA: " + JSON.stringify(data));
},
notificationCallbackAndroid: (message, data, notification) => {
console.log("MESSAGE: " + JSON.stringify(message));
console.log("DATA: " + JSON.stringify(data));
console.log("NOTIFICATION: " + JSON.stringify(notification));
alert(message);
},
};
PushNotifications.register(settings, data => {
console.log("REGISTRATION ID: " + data);
this.toDeviceToken = data;
PushNotifications.onMessageReceived(settings.notificationCallbackAndroid);
}, error => {
console.log(error);
});
}
使用此代码,当我从Postman发送它时,我可以在notificationCallbackAndroid
方法中收到成功消息。这就是我在日志中得到的结果:
{
"multicast_id": 8382252195536318747,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
{
"message_id": "0:1521270133609562%161a06bff9fd7ecd"
}
]
}
但是,通知栏中不会显示任何通知。
我们是否必须使用单独的方法来显示通知?
答案 0 :(得分:1)
要添加,似乎通知可以在iOS上完美运行。但是在Android上,它仅在应用程序处于活动状态时有效。
一些论坛指出,推送有效载荷需要一个“通知”结构来自动添加到通知托盘中,但是我查看了提交历史记录,并且看起来它已被(尝试)修复。
无论哪种方式,我都使用同一推送发送SDK和另一个应用程序开发SDK(Xamarin),并且不希望自定义代码在Nativescript应用程序上发送不同的有效负载。
我将尝试Danzigers回答为仅限Android的代码,看看是否有帮助。如果没有,我将尝试还原到该插件的旧版本,因为据我了解,整个问题都是回归。
PS。我看到该插件已被Firebase插件淘汰,但是当我只需要GCM和APS时,我仍然喜欢此插件的简单性(且占地面积更小?)。
更新
安装了本地通知插件,并添加了仅在Android上使用该代码的代码,一切都很好。
答案 1 :(得分:0)
push-plugin
不会自动创建/显示通知,它只会在收到通知时通知您。
您需要使用另一个插件nativescript-local-notifications
来创建/显示它。因此,在notificationCallbackAndroid
和notificationCallbackIOS
内部,您应该有类似以下内容:
LocalNotifications.schedule([{
title: notificationData.title,
body: notificationData.body,
}]);
此外,onMessageReceived
已被弃用,现在您只应使用notificationCallbackAndroid
和/或notificationCallbackIOS
,因此一旦将push-plugin
更新到最新版本,就可以摆脱这一行:
PushNotifications.onMessageReceived(settings.notificationCallbackAndroid);