我有推送插件https://github.com/phonegap-build/PushPlugin.git 配置了cordova 3.5。当应用程序位于前台时,将调用通知插件回调,并且一切都按预期工作。
当应用程序处于非活动状态(在后台)时,会收到通知,我可以在通知栏中看到它们,但不会调用回调函数。我的代码基于push插件中给出的示例。下面是我简化的代码重现问题,
initialize : function () {
console.info('NOTIFY Ready to register for push notification.');
var pushNotification = window.plugins.pushNotification;
// Register device with push server
pushNotification.register(gcmSuccessHandler, gcmErrorHandler, {
'senderID': GCM_SENDER_ID,
'ecb': 'onNotificationGCM'
});
}
window.onNotificationGCM = function(notification){
//the beep is invoked 3 times only when the app is in foreground
navigator.notification.beep(3);
console.log('EVENT -> RECEIVED:' + notification.event + '');
}
我已经在这个问题上突破了一天多了。任何帮助表示赞赏。
更新 我终于找到了问题所在。我必须清除dalvik缓存并重新启动手机。到目前为止两次发生在我身上。似乎是android中的一个已知问题,https://github.com/phonegap-build/PushPlugin/issues/35。
答案 0 :(得分:13)
我在Cordova 3.5.0和PushPlugin 2.2.0上遇到了类似的问题:当应用程序处于前台但未在后台运行或未运行时,通知有效。我通过阅读PushPlugin的源代码(文件src / com / plugin / gcm / GCMIntentService.java)找到了解决方案:通知的有效负载必须包含“message”和“msgcnt”键。
答案 1 :(得分:4)
Also if you use PhoneGap make sure you have required attributes included in message. From phonegap push plugin doc:
On Android if you want your on('notification') event handler to be called when your app is in the background, JSON you send from GCM will need to include "content-available": "1".
I use Ruby gem Rpush and spent a lot of time figuring out why 'notification' handler isn't fired when app is on background. Code which finally works looks like this:
n = Rpush::Gcm::Notification.new
n.app = Rpush::Gcm::App.find_by_name("MyApp")
n.registration_ids = [ 'xxxxxxxxx' ]
n.data = {
title: "Message Title",
message: "Message Body",
sound: "default",
'content-available' => "1"
}
n.save!
答案 2 :(得分:0)
如果您查看" ecb"的文档。 https://github.com/phonegap-build/PushPlugin#ecb-amazon-fire-os-android-and-ios
Your app may receive a notification while it is active (INLINE).
If you background the app by hitting the Home button on your device, you may later receive a status bar notification.
Selecting that notification from the status will bring your app to the front and allow you to process the notification (BACKGROUND).
所以在后台模式中,你的" onNotificationGCM"方法将仅在以下场景中调用:
答案 3 :(得分:0)
对我来说,onNotification函数也没有被调用,即使应用程序在前台也没有。
在互联网上阅读我确保发件人ID是100%正确的,因为即使错误,寄存器功能也会返回成功。
现在你建议清除Dalvik缓存,这似乎需要安装一个root设备或恢复工具(默认情况下我的Galaxy Nexus测试设备没有)。这仍然导致我尝试重命名应用程序,希望它不会使用当前缓存。这很有用。
我解决问题的步骤:
id
文件config.xml
值
启动并运行onNotification功能开始工作! :)
<强>更新强>
同样的事情又开始了,我试图阻止我的设备生根,因为它需要一个完整的擦除,但我的同样的修复第二次没有再次工作。
在设备生根并安装恢复工具后,擦除Dalvik缓存确实可以解决问题......
答案 4 :(得分:0)
根据FactualHarmony的第3个回答,我也看了下的源代码 /src/android/com/plugin/gcm/GCMIntentService.java。
你必须有&#34;消息&#34;和&#34; msgcnt&#34;在您的消息中输入密钥,以便在应用程序处于后台时使其正常工作,并且对我有用。
希望这有帮助。