NativeScript push-plugin未在通知栏

时间:2018-03-17 07:13:26

标签: firebase push-notification firebase-cloud-messaging nativescript nativescript-angular

我使用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"
        }
    ]
}

但是,通知栏中不会显示任何通知。

我们是否必须使用单独的方法来显示通知?

2 个答案:

答案 0 :(得分:1)

要添加,似乎通知可以在iOS上完美运行。但是在Android上,它仅在应用程序处于活动状态时有效。

一些论坛指出,推送有效载荷需要一个“通知”结构来自动添加到通知托盘中,但是我查看了提交历史记录,并且看起来它已被(尝试)修复。

无论哪种方式,我都使用同一推送发送SDK和另一个应用程序开发SDK(Xamarin),并且不希望自定义代码在Nativescript应用程序上发送不同的有效负载。

我将尝试Danzigers回答为仅限Android的代码,看看是否有帮助。如果没有,我将尝试还原到该插件的旧版本,因为据我了解,整个问题都是回归。

PS。我看到该插件已被Firebase插件淘汰,但是当我只需要GCM和APS时,我仍然喜欢此插件的简单性(且占地面积更小?)。

更新

安装了本地通知插件,并添加了仅在Android上使用该代码的代码,一切都很好。

答案 1 :(得分:0)

push-plugin不会自动创建/显示通知,它只会在收到通知时通知您。

您需要使用另一个插件nativescript-local-notifications来创建/显示它。因此,在notificationCallbackAndroidnotificationCallbackIOS内部,您应该有类似以下内容:

LocalNotifications.schedule([{
    title: notificationData.title,
    body: notificationData.body,
}]);

此外,onMessageReceived已被弃用,现在您只应使用notificationCallbackAndroid和/或notificationCallbackIOS,因此一旦将push-plugin更新到最新版本,就可以摆脱这一行:

PushNotifications.onMessageReceived(settings.notificationCallbackAndroid);