在后台模式下不调用didReceiveRemoteNotification

我正在推送通知,我收到的数据是JSON格式。 如何parsing显示在下面的通知中心的JSON数据:

我只需要描述

如果你的应用程序在后台/前台模式下调用这个方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler 

如果您使用上述方法,您将在控制台中遇到以下错误

应用程序:didReceiveRemoteNotification:fetchCompletionHandler:],但是您仍然需要将“远程通知”添加到Info.plist中支持的UIBackgroundModes的列表中。

解决这个问题

按照步骤的形象

在这里输入图像说明

如果您的应用程序在前景模式下调用此方法

 - (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo 

selectno-2

  - (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { UIApplicationState state = [application applicationState]; // user tapped notification while app was in background if (state == UIApplicationStateInactive || state == UIApplicationStateBackground) { // go to screen relevant to Notification content } else { // App is in UIApplicationStateActive (running in foreground) // perhaps show an UIAlertView } } 

迅速

 func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { var state: UIApplicationState = application.applicationState() // user tapped notification while app was in background if state == .Inactive || state == .Background { // go to screen relevant to Notification content } else { // App is in UIApplicationStateActive (running in foreground) // perhaps show an UIAlertView } } 

如果didReceiveRemoteNotification方法在后台模式下不被调用,请按照以下步骤操作

首先打开推送通知并勾选目标function中背景模式的远程通知checkbox

然后

 -(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { if( [UIApplication sharedApplication].applicationState == UIApplicationStateInactive ) { NSLog( @"INACTIVE" ); } else if( [UIApplication sharedApplication].applicationState == UIApplicationStateBackground ) { NSLog( @"BACKGROUND" ); } else { NSLog( @"FOREGROUND" ); } return YES; }