如何使用 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系统,即使应用程序关闭也能收到推送通知。
我用 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系统,即使应用程序关闭也能收到推送通知。