如何使用 WinJS 在 UWP 中处理 WNS(推送通知)

How to handle WNS (Push Notifications) in UWP with WinJS

我用 WinJS 编写了一个应用程序,没关系。但是我需要向这个应用程序发送推送通知(比如 toast)。 PHP 中的服务器端没问题,并在 Apache Cordova 应用程序(Android 和 Windows Phone 8.1)上进行了测试。

但是在带有 WinJS 的 UWP Windows 10 应用程序中,我不知道如何处理 WNS responses/calls 并通知用户(在 Cordova 中,我使用了一个插件 Phone差距 Push-Notifications 这很容易,因为插件实现了所有任务和处理程序)。

很简单...

使用代码创建一个 backgroundTask.js:

(function () {
        "use strict";

        var backgroundTaskInstance = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;
        var taskName = backgroundTask.task.name;

        function doWork() {

            var notificationContent = backgroundTaskInstance.triggerDetails.content;

            close();
        }

        doWork();
    })();

然后,在您的 default.js 上声明 var pushNotifications = Windows.Networking.PushNotifications; 创建一个函数(独立的或进入命名空间)...

registraTaskPush: function (){
        var taskRegistered = false;
        var exampleTaskName = "Push";
        var iter = background.BackgroundTaskRegistration.allTasks.first();

        while (iter.hasCurrent) {
            var task = iter.current.value;

            if (task.name === exampleTaskName) {
                taskRegistered = true;
                break;
            }

            iter.moveNext();
        }
        if (taskRegistered != true) {
            var builder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();
            var trigger = new Windows.ApplicationModel.Background.PushNotificationTrigger();

            builder.name = exampleTaskName;
            builder.taskEntryPoint = "js\bgTasks.js";
            builder.setTrigger(trigger);

            var task = builder.register();
        }
        var channel;

        var channelOperation = pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync();

        return channelOperation.then(function (newChannel) {
            channel = newChannel;
            $.ajax({
                url: 'url/save/channel/in/database', type: 'POST',
                data: { 'r': channel.uri, 'tp': 'windows' }
            });

        },
            function (error) {
               console.log('Error: '+error);
            }
        );
        channel.addEventListener("pushnotificationreceived", onPushNotification, false);
    }

然后...在激活应用程序后调用 default.js 上的 "registraTaskPush" 函数。 "registraTaskPush" 函数实现对WNS 的通道调用并将通道URL 发送到服务器以保存在数据库中。 当服务器启动通知时,数据库 returns 存储所有 WNS URL 以代码在 URL 之间导航并为所有发送推送。

此外,"registraTaskPush"将后台任务注册到Windows系统,即使应用程序关闭也能收到推送通知。