当app在前台

时间:2015-10-01 12:40:15

标签: javascript android cordova phonegap-plugins phonegap-pushplugin

我正在使用Phonegap(cli v5.3.6)为Android编写移动应用程序,并且我使用phonegap-plugin-push v1.3向GCM注册设备并在到达时处理通知在设备上。

// define the push settings
var push = PushNotification.init({
    "android": {
        "senderID": "*********"
    },
    "ios": {},
    "windows": {}
});

push.on("notification", function(data) {
    console.log("notification received while in app");
    console.log(JSON.stringify(data));
    addMessageToLocalDB(data, false);
});
push.on("error", function(e) {
    console.log(JSON.stringify(e));
});

当应用关闭或在后台运行时效果很好。当应用程序在前台时,我的问题出现了。我正在查看logcat并看到收到了通知,但是我没有看到我的日志记录显示回调函数已被触发(显然,我期望看到的结果是&n& #39; t发生)。我也没有看到错误事件触发的回调函数,所以它可能并没有真正失败。

我错过了什么吗?我无法在网上找到关于这个问题的任何内容,我无法真正阅读java以了解该插件应该如何表现......

  • 编辑:我刚想出来的东西。即使我从我的javascript - PushNotification init和on(" notificataion")函数中删除了代码,也会在推送通知到达时指示日志。 因此,我发现自己对于需要放置init和事件处理函数的位置感到困惑。

我的应用程序包含index.html(应用程序启动时加载的页面)和许多其他html文件(每个文件都充当应用程序的单独页面。不应该把事件处理程序放在上面每个页面?我做了什么尝试...

谢谢, Yosi。

3 个答案:

答案 0 :(得分:1)

在致电deviceready之前,您可能需要等待PushNotification.init事件。这可能比使用setTimeout更可靠(也更快)。

答案 1 :(得分:0)

我可能不会得到您的查询,但是如果您想在应用程序处于前台时显示通知.forceshow参数的默认值为false,您是对的

" android":{         " senderID":" *********",         " forceShow" :" true"     },

答案 2 :(得分:0)

我最终注意到,当我第一次加载页面时,PushNotification对象有时是未定义的,但如果我等待足够的时间(100ms),则会定义它。 我最终做的是每100ms运行一次的间隔,检查是否定义了PushNotification对象,如果是,则运行我的init +事件监听器代码并清除间隔。这似乎在很长一段时间内都运作良好。