后台模式下didReceiveRemoteNotification方法未被调用

4
我正在处理推送通知相关的工作,我收到的数据是以JSON格式显示在通知中心中。如何解析JSON数据,只需提取其描述信息即可。以下是示例图像:

I only need the description


要解析JSON,请查看NSJSONSerialization - justinpawela
@krishna - 你看过这个了吗? - Anbu.Karthik
2个回答

7
如果您的应用程序处于后台/前台模式,请调用此方法。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler

如果您使用了上述方法,您将在控制台中遇到以下错误:
应用程序:didReceiveRemoteNotification:fetchCompletionHandler:],但您仍需要将“remote-notification”添加到Info.plist中支持的UIBackgroundModes列表中。
为解决此问题,请按照下图所示的步骤操作。

enter image description here

如果您的应用程序处于前台模式,请调用此方法。
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo

选择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
}
}

Swift

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
}
}

请查看更新后的答案,兄弟。如果需要帮助,我很乐意为您效劳。我在等待您的回复。 - Anbu.Karthik
感谢@Anbu.Karthik通过更改有效载荷格式...这对我有用。 - krishna
如果我的答案不错,请点赞,这对未来很有用。 - Anbu.Karthik
@Anbu.Karthik 不起作用,请帮我回答我的问题 https://stackoverflow.com/q/63598194/8822337 - BIS Tech

1
如果在后台模式下未调用didReceiveRemoteNotification方法,请按照以下步骤操作:
首先,在目标的功能选项中打开推送通知,并勾选后台模式的远程通知复选框。
然后,
-(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;
}

提问者问道通知中心在后台模式下没有被调用,请更新您的答案或检查我的答案。 - Anbu.Karthik
为什么你在这个方法中使用了 return,而该方法的返回值类型是 void - Alex Nazarov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接