我已经为我的应用集成了推送通知。为了捕获通知,我使用了这个代理。
我的app委托中的 -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
。
因此,当应用程序在后台运行时,如果通知发出,当我点击它时,这个委托会激活。如果应用程序即使在后台运行也没有运行,如果单击ntification则会触发
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Sofar效果很好。然后我想在后台捕捉通知。所以我找到了
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
这适用于它。
所以我只是将之前的didReceive
方法更改为这个新的didReceive
方法。现在我的问题是当应用程序启动推送通知时(如果应用程序不在后台或前台运行,并在点击通知时),我的应用程序崩溃。即使我无法调试并抓住这种情况。
这两位代表之间有什么区别。当应用程序启动时,我的第二位代表会发出通知吗?请帮帮我。
答案 0 :(得分:1)
通常在收到通知时会执行此方法(当应用处于活动状态时) - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
但是如果应用程序被系统关闭或杀死,那么点击notificatin首先调用" didFinishLaunchingWithOptions"方法 我的方法,我们必须检查从应用程序开始通知或重新开始,我们可以使用此代码调用" didReceiveRemoteNotification"方法再次
UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (notification) {
[self application:application didReceiveRemoteNotification:(NSDictionary*)notification];
}