我正在尝试在Windows Phone 8.1上注册后台任务以接收和处理推送通知 . 当应用程序打开时,一切正常(前景背景),但app.js中定义的后台任务确实有效应用程序关闭时无法正常工作 .

这在package.phone中定义 . appxmanifest

<Extension Category="windows.backgroundTasks" StartPage="js/lib/backgroundTask.js">
      <BackgroundTasks>
        <Task Type="pushNotification" />
      </BackgroundTasks>
    </Extension>

backgroundTask.js

(function () {
//var backgroundTask = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current,
//taskName = backgroundTask.task.name;

Windows.Storage.ApplicationData.current.localSettings.values["hello"] = "world";

close();
})();

这就是我的 app.js 所做的:

var taskName = "mySuperFancyBgTaskName";

  var registerBackgroundTask = function() {

    var btr = Windows.ApplicationModel.Background.BackgroundTaskRegistration;
    var iter = btr.allTasks.first();
    var taskRegistered = false;

    while (iter.hasCurrent){
        var ta = iter.current.value;
        if (ta.name == taskName){
            taskRegistered = true;
            break;
        }
        iter.moveNext();
    }

    if (!taskRegistered){
        var builder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();
        var trigger = new Windows.ApplicationModel.Background.PushNotificationTrigger();
        builder.setTrigger( trigger );
        builder.taskEntryPoint = "js\\lib\\backgroundTask.js";
        builder.name = taskName;

        try{
            var task = builder.register();
            //task.addEventListener("completed", onPushNotification);
        }
        catch (e){
            console.error(e);
        }
    }
}


var channel;
var pushNotificationManager = Windows.Networking.PushNotifications.PushNotificationChannelManager;
var channelOperation = pushNotificationManager.createPushNotificationChannelForApplicationAsync();

channelOperation.then(function (newChannel) {
    channel = newChannel;
    saveChannelUriInSettings(channel.uri);
    console.log("opened push notification channel with uri: " + channel.uri);
    registerBackgroundTask();
},
    function (error) {
        console.log("Channel could not be retreived. " + error.number)
    }
);

似乎backgroundTask.js永远不会启动,因为localsettings中没有任何内容 . 试图在那里做一些东西,但当然不能在那里调试 .

如果我做

var onPushNotification = function (e) { ...}
channel.addEventListener("pushnotificationreceived", onPushNotification);

接收原始推送通知工作正常 . 那么如何让后台任务工作,以便它可以保存传入的推送通知?如果它正常工作,则无需在应用程序中定义事件监听器来捕获推送通知,对吧?

任何帮助表示赞赏 - 提前感谢!