use*_*169 6 objective-c push-notification apple-push-notifications ios
我已经为我的应用程序集成了推送通知。为了捕捉通知,我使用了这个委托。
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo在我的应用程序委托中。
所以当应用程序在后台运行时,如果通知来了,当我点击它时,这个委托就会触发。如果应用程序即使在后台也没有运行,如果点击 ntification 然后它会触发
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
到目前为止它运作良好。然后我想在后台捕捉通知。所以我发现
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
这对它有用。
所以我只是将我以前的didReceive方法更改为这种新didReceive方法。现在我的问题是当应用程序通过推送通知启动时(如果应用程序不在后台或前台运行,并且当出现时单击通知)我的应用程序崩溃。即使我无法调试和捕捉这种情况。
这两个代表有什么区别。当应用程序通过通知启动时,我的第二个代表是否会触发?请帮我。
通常,当通知到来时,此方法会执行(当应用程序处于活动状态时) - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
但是,如果应用程序被系统关闭或终止,则单击通知首先调用“didFinishLaunchingWithOptions”方法,在该方法中,我们必须检查应用程序是从通知启动还是从新启动,我们可以使用此代码来调用“didReceiveRemoteNotification” ” 再次方法
UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (notification) {
[self application:application didReceiveRemoteNotification:(NSDictionary*)notification];
}
Run Code Online (Sandbox Code Playgroud)