Cordova - 在收到通知后在后台更改 Android 设备上的徽章编号

Cordova - changing badge number on Android devices in the background, when notification has been received

我有一个 joomla 后端,我已经实现了 jBackEnd 插件来为我的应用程序提供 REST 数据。但这不是重点。 jBackEnd 还支持 GCM 和 APN 通知,每次添加新文章时,我都会用它向我的 cordova 应用程序用户(仅 android)发送通知。

问题是 - 我已经尝试了一切,通知工作 - 使用 cordova 的 pushplugin,phone 振动,声音在那里,基本上通知工作。但是,当应用程序在后台时,我无法更新徽章编号,因为没有触发通知事件。

据我所知,我无法在后台 运行 javascript 代码(除非我使用了一个插件,该插件在按下主页按钮时禁用应用程序的睡眠 - 我已经尝试过了,但它仍然是不工作),这是有道理的 - 毕竟它是一个网络视图。但是,如果我无法收听 on notification 事件,该怎么办?

我在网上找到的答案没有帮助。任何建议将不胜感激。谢谢。

下面的代码可以在 运行 函数 (angular) 内的 $ionicPlatform.ready(function () { 块中找到。

var push = PushNotification.init({
        "android": {
            "senderID": "36070516254",
        },
        "ios": {
            "alert": "true",
            "badge": "true",
            "sound": "true"
        }
    });

    push.on('registration', function(data) {
        var device_token = data.registrationId;
        GcmService.registerClient(device_token, function(data) {
            console.info('Registered !', data);
            // # Start the scheduler
        }, function(status) {
            console.error('After registering with the joomla thing !');
        });
    });

    push.on('notification', function(data) {
        console.info('!!! Information received : ', data);
        try {
                push.setApplicationIconBadgeNumber(function(s) {
                    console.info('Badge success', s);
                }, function(error) {
                    console.error(error);
                }, badgeCounter++);
        } catch(e) {
            console.error(e);
        }
    });

如果您安装了最新版本的推送插件 (https://github.com/phonegap/phonegap-plugin-push) 并将数据数组中的参数(服务器端)"badge" 发送到 GCM,徽章将是通知更新。

您还需要在您的应用中将徽章参数设置为 true:

push = PushNotification.init
({android: {
senderID: "xxxxxxxx",
badge: "true"
});

至少对我有用。