该应用程序位于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
注意:应用正常运行时效果正常。
编辑: 通知有时会运行。 JavaScript随机获取消息事件。
编辑2:
我绝对知道这个问题。
从java文件中,它通过单击推送通知消息打开应用程序时触发javascript代码。但那时,WebView没有加载,因此无法执行脚本(这是一个事件触发器)。这是条件,每个使用插件的人都会遇到同样的情况。是否有任何解决方法或任何修复方法?
我做错了吗?
答案 0 :(得分:4)
如果应用程序未运行,则使用GCM-Cordova插件将无法正确处理通知。这是因为在插件启动javascript时没有加载WebView。
<强>解决方案:强>
最后能够在两个插件的帮助下解决这个问题 - GCM-Cordova和自定义插件。
答案 1 :(得分:3)
IvenMS - 我也遇到同样的问题,所以你不是唯一一个。如果我正确理解praneetloke,推送通知将无法与当前未运行的PhoneGap应用程序一起使用。
答案 2 :(得分:3)
我找到了一个简单的解决方案。 在GCMIntentService中,在发送javascript之前检查是否加载了webview:
while (GCMPlugin.gwebView == null || GCMPlugin.gwebView.webView == null || !GCMPlugin.gwebView.webView.isEnabled()) {
// Wait until webView is enabled
}
GCMPlugin.sendJavascript(json);
这对我有用...也许是一个很好的选择,也可以添加一个超时以防止无限循环(它不应该发生但是......)
的Davide