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