Ibm mobilefirst 推送通知。如何知道应用程序是在前台还是后台

Ibm mobilefirst 推送通知。如何知道应用程序是在前台还是后台,ibm-mobilefirst,Ibm Mobilefirst,当通知到达时,应用程序执行为接收通知而配置的回调 如果通知在后台随应用程序一起到达,我希望应用程序移动到特定视图。但是,如果通知与前台的应用程序一起到达,我只想打印一个警报 如何在回调函数中知道通知到达时应用程序的状态 谢谢。我不知道这有多可靠,但它似乎在应用程序运行时起作用,但只是在后台: var sleeping = false; document.addEventListener("pause", function() {sleeping = true;}, false); docume

当通知到达时,应用程序执行为接收通知而配置的回调

如果通知在后台随应用程序一起到达,我希望应用程序移动到特定视图。但是,如果通知与前台的应用程序一起到达,我只想打印一个警报

如何在回调函数中知道通知到达时应用程序的状态


谢谢。

我不知道这有多可靠,但它似乎在应用程序运行时起作用,但只是在后台:

var sleeping = false;

document.addEventListener("pause", function() {sleeping = true;}, false);
document.addEventListener("resume", function() {sleeping = false;}, false);
然后:

function pushNotificationReceived(props, payload) {
    if (sleeping) {

        alert("caught me napping");

    } else {

        alert("I've been waiting for you.");
    }
}
棘手的情况是当应用程序完全停止时。您需要在调用通知回调之前登录,并且在此之前很久就会触发resume事件。如果您想处理这种情况,您可能需要在WL.Client.Push.onReadyToSubscribe函数中使用类似以下内容:

sleeping = true;
setTimeout(function(){sleeping = false;}, 1000);
(任何在准备订阅后1秒内到达的内容,可能是在我们睡觉时到达的,现在才刚刚交付)


这有点像黑客,我相信有各种奇怪的计时案例,但它似乎涵盖了许多案例。

嗨。你测试过了吗?我已经做了跟踪(在iPad中),当通知到达时,应用程序做的第一件事就是将sleeping值更新为false,然后执行pushNotificationReceived。是的,正如我所说,我不知道它有多可靠……这取决于异步操作的顺序。但在我的测试中,上述解决方案起了作用。我在安卓上测试,所以可能这就是区别。您可以将resume回调更改为使用setTimeout(正如上面对onReadyToSubscribe所做的那样)Not pretty。与其说是解决方案,不如说是解决办法。