Push notification 在iOS 10上处理用户通知

Push notification 在iOS 10上处理用户通知,push-notification,push,ios10,Push Notification,Push,Ios10,我很难确定用户何时点击iOS 10上的用户推送通知 到目前为止,我一直在使用-[uiapplicationelegate应用程序:didReceiveMemoteNotify:fetchCompletionHandler:][/code>,它在 案例1:应用程序处于活动状态并接收推送 案例2:当用户在录制收到的通知后启动应用程序时 此方法注释明确表示 请注意,此行为与application:didReceiveEmotentification:相反,在这些情况下不会调用它,如果实现此方法,也

我很难确定用户何时点击iOS 10上的用户推送通知

到目前为止,我一直在使用
-[uiapplicationelegate应用程序:didReceiveMemoteNotify:fetchCompletionHandler:][/code>,它在

  • 案例1
    :应用程序处于活动状态并接收推送
  • 案例2
    :当用户在录制收到的通知后启动应用程序时
此方法注释明确表示

请注意,此行为与application:didReceiveEmotentification:相反,在这些情况下不会调用它,如果实现此方法,也不会调用它

所有这些工作都如期完成

现在,iOS 10不赞成这种委托方法,并引入了
UserNotification
框架,我无法使用该框架,因为我的目标仍然是iOS 8和9

当我的应用程序在iOS 10上运行并且在应用程序处于活动状态时接收到推送时(
案例1
),将正确调用
-[AppDelegate应用程序:DidReceiveEmotentification:fetchCompletionHandler:

同样在iOS 10上,当用户通过点击通知(
case2
)启动应用程序时,此方法不被称为

我意识到,当我实现较旧的
-[uiapplicationelegate应用程序:didReceiveEmotentification:
时,它就是在
案例2中被调用的

在iOS 8和iOS 9上,在
案例2中
调用的是
-[AppDelegate应用程序:DidReceiveMemotentification:fetchCompletionHandler:
方法

这是否意味着我必须更新我的应用程序并仅为iOS 10实现旧的委托

因此,问题是,在不使用
UserNotification
框架的情况下,处理iOS 10上接收的推送的用户交互的正确实现是什么

干杯,
Jan

我们在这里遇到了同样的问题,我们只能在iOS 10 GM版本上使用下面给出的答案上的代码来解决这个问题:

有了这个补丁,我们的代码在iOS 9和iOS 10上重新开始工作

我们还必须改变处理推送通知的方式,因为在iOS 10上似乎也发生了变化

编辑

  • 在最新的iOS 10版本上,应用程序状态行为似乎恢复正常
    • iOS 10的Swift代码:

      func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
          // Override point for customization after application launch.
      
          if #available(iOS 10.0, *) {
              let center = UNUserNotificationCenter.currentNotificationCenter()
              center.delegate = self
          }
      
          // ...
      
          return true
      }
      
      @available(iOS 10.0, *)
      func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {
      
          print(response.notification.request.content.userInfo)        
      }
      
      @available(iOS 10.0, *)
      func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
      
          print(notification.request.content.userInfo)
      }
      

      这已在iOS 10.1 Beta 1中修复



      当用户点击通知时,会正确调用
      -[UIApplicationLegate应用程序:DidReceiveMemotonification:fetchCompletionHandler:

      如果您为iOS 9编译应用程序,它应该是向后兼容的,因此从理论上讲,您可以忽略弃用通知,因为您不会以iOS 10为目标,但是iOS 9中应该使用这种方法。我现在面临着同样的问题,而且已经有了一个openradar,我建议你关注它,因为这种行为似乎是iOS 10测试版上的一个bug。仍然没有在iOS 10 beta 7中修复相同的fir iOS 10 beta 8:/相同的iOS 10 GM:/n这是否意味着在iOS 10上我们必须使用iOS 10上不推荐使用的回调需要使用UseNotification framework。我已经为iOS10实现了代码:iOS10上的应用程序状态是如何变化的?我们遇到了这里描述的问题:但我还没有在GM上进行测试,因此,我无法确认这是否仍然是一个问题…@andresk你能告诉我,当应用程序在后台并收到用户通知时,会执行哪种方法吗?需要在iOS 10.0.2中进行更正。如果有人得到一些关于它的官方信息,我就要迟到了!10.0.2是什么时候发布的?iOS 10.0.2是在2016年10月14日左右发布的。我正在使用iOS 10.0.2,问题仍然存在(如果我理解正确的话,我也会遇到同样的问题10.1.1。对于iOS 10:当用户收到通知(不点击)时,这两个委托方法没有回调,并且您仍然必须使用非委托的:
      -[AppDelegate应用程序:DidReceiveMemotentification:fetchCompletionHandler:]
      。正确吗?您可以在
      willPresentNotification
      功能中获得它@Honey@DungTran这是正确的。我刚才问了这个问题。如果应用程序在前台,你在接收时会收到2次回调。我只是认为这些回调在语义上是不同的。
      didReceiveEmotonication
      只是用于接收…它更多的是为了更新你的应用。
      willPresent
      更多的是为了通知。是的,我测试了它。在iOS 10中,func
      DidReceiveMemotentification
      不是用
      UserNotification
      调用的。@DungTran我很抱歉我的意思是
      application:DidReceiveMemotentification:fetchCompletionHand‌ler
      func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
          // Override point for customization after application launch.
      
          if #available(iOS 10.0, *) {
              let center = UNUserNotificationCenter.currentNotificationCenter()
              center.delegate = self
          }
      
          // ...
      
          return true
      }
      
      @available(iOS 10.0, *)
      func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {
      
          print(response.notification.request.content.userInfo)        
      }
      
      @available(iOS 10.0, *)
      func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
      
          print(notification.request.content.userInfo)
      }