我的推送通知包含自定义数据,可帮助您在点击通知时将应用路由到正确的位置。如果应用程序处于打开状态或在后台运行,这些工作正常,但在应用程序关闭时不起作用。通知打开应用程序,但我的代码没有检测到引用的通知事件,以便我可以路由它。 我在AppDelegate.m
中有这个#ifndef DISABLE_PUSH_NOTIFICATIONS
- (void) application:(UIApplication*)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
// re-post ( broadcast )
NSString* token = [[[[deviceToken description]
stringByReplacingOccurrencesOfString:@"<" withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString:@" " withString:@""];
[[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotification object:token];
}
- (void) application:(UIApplication*)application
didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
// re-post ( broadcast )
[[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotificationError object:error];
}
#endif
我有这个JS代码来捕获我的应用程序中的通知
document.addEventListener('push-notification', function(event) {
//get the notification payload
console.log("incoming PUSH notification!")
console.log(event);
factory.reactToIncomingPushNotification(event)
});
我的问题是,应用程序冷启动后如何在应用程序中引用通知事件?
我有一个带有pushwoosh的cordova /离子应用程序作为提供者。我在IOS上测试。
答案 0 :(得分:0)
如果应用程序终止,并且用户想要通知自定义数据,那么AppDelegate的didFinishLaunchingWithOptions就是您的方法,因为它包含名为 UIApplicationLaunchOptionsRemoteNotificationKey
的密钥中的数据答案 1 :(得分:0)
我的答案是在pushwoosh广播事件上设置超时。在我建立我的听众之前,它正在发送广播。这只发生在冷启动应用程序上。现在,我检测推送通知是否有“开始”按钮。键设置为true。如果是这样,我在dispatchEvent函数上放置了1.3秒的超时。以下是PushNotification.js文件的修改函数。
// file: plugins/pushwoosh-cordova-plugin/www/PushNotification.js
PushNotification.prototype.notificationCallback = function(notification) {
var ev = document.createEvent('HTMLEvents');
ev.notification = notification;
// test for the cold start
var tout = notification.onStart ? 1300 : 10 ;
setTimeout(function() {
ev.initEvent('push-notification', true, true, arguments);
document.dispatchEvent(ev);
}, tout);
};
答案 2 :(得分:0)
我遇到了类似的问题,所以我尝试尽早将事件监听器放在Javascript中。然后我就能收到Pushwoosh的推送通知。这意味着在“推送通知”之前已经触发了DOM事件。你应用程序JS中的监听器已经安装好了。
使用setTimeout似乎通过延迟DOM事件并允许侦听器准备好来掩盖问题。
我建议尽早移动听众。
document.addEventListener('push-notification', function(event) {
...
})
然而,这可能不是一个想法,因为应用可能还没有准备好使用推送通知中的事件。我的解决方案是缓存事件并在我的应用程序完全启动后检查它。
希望这有帮助!