首页 文章

App未运行时,GCM Cordova推送通知无法正常工作

提问于
浏览
7

该应用程序在PhoneGap中 . 我正在使用推送通知功能https://github.com/marknutter/GCM-Cordova

我实现了整个功能,它工作正常,直到昨天 . 当我最后一天检查应用程序时,当应用程序未运行时,推送通知无效 . 所有通知都在我的设备上接收,点击该消息即可打开该应用 .

但是控件没有在消息通知处理的javascript部分接收 .

来自文件GCMIntentService.java的代码:

JSONObject json;
json = new JSONObject().put("event", "message");

json.put("message", extras.getString("message"));
json.put("link", extras.getString("link"));

Log.v(ME + ":onMessage ", json.toString());

GCMPlugin.sendJavascript( json );
// Send the MESSAGE to the Javascript application

收到消息后,此代码将起作用 . 但那时,App还没有运行 .

当我点击通知消息时,应用程序照常打开,而不是注册消息事件;从而没有得到JavaScript中的控件来处理推送通知 .

CORDOVA_GCM_script.js的代码位于:

https://github.com/marknutter/GCM-Cordova/blob/master/assets/www/CORDOVA_GCM_script.js

Note :应用程序运行时工作正常 .

EDIT: 通知有时会运行 . JavaScript随机获取消息事件 .

EDIT 2:

我当然知道这个问题 .

从java文件中,它通过单击推送通知消息打开应用程序时触发javascript代码 . 但那时,WebView没有加载,因此无法执行脚本(这是一个事件触发器) . 这是条件,每个使用插件的人都会遇到同样的情况 . 是否有任何解决方法或任何修复方法?

我做错了吗?

3 回答

  • 4

    如果应用程序未运行,则使用GCM-Cordova插件将无法正确处理通知 . 这是因为在插件启动javascript时没有加载WebView .

    Solution:

    • 修改了插件代码,以便在通知到达时将消息数据保存为临时数据 .

    • 创建了另一个插件,其中包含读取此加载数据和清除数据的方法 .

    • 在deviceready上调用我的自定义插件方法并检查是否有任何数据 .

    • 如果有,请清除本地存储的数据并调用方法以显示通知消息 .

    最后能够在两个插件的帮助下解决这个问题 - GCM-Cordova和自定义插件 .

  • 3

    IvenMS - 我也遇到了同样的问题所以你不是唯一的问题 . 如果我正确理解praneetloke,推送通知将无法与当前未运行的PhoneGap应用程序一起使用 .

  • 3

    我找到了一个简单的解决方案 . 在GCMIntentService中,在发送javascript之前检查是否加载了webview:

    while (GCMPlugin.gwebView == null || GCMPlugin.gwebView.webView == null || !GCMPlugin.gwebView.webView.isEnabled()) {
        // Wait until webView is enabled
    }
    GCMPlugin.sendJavascript(json);
    

    这对我有用...也许是一个很好的选择,添加一个超时,以防止无限循环(它不应该发生,但......)

    达维德

相关问题