Jan*_*Jan 26 push push-notification ios10
我很难确定用户何时点击iOS 10上的用户推送通知.
到目前为止,我一直在使用当时-[UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:]调用的
Case 1:应用程序处于活动状态并且已收到推送Case 2:当用户在录制收到的通知后启动应用程序时这个方法明确说明了
请注意,此行为与application:didReceiveRemoteNotification:形成对比,在这些情况下不会调用,如果实现此方法,则不会调用此行为.
所有这些都按预期工作.
现在iOS 10弃用了这个委托方法并引入了UserNotification我无法使用的框架,因为我仍然以iOS 8和9为目标.
当我的应用程序在iOS 10上运行并且在应用程序处于活动状态时收到推送(Case 1)时,-[AppDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:]会正确调用该应用程序.
同样在iOS 10上,当用户通过点击通知(Case 2)启动应用程序时,不会调用此方法 .
我意识到,当我实现旧版本时,-[UIApplicationDelegate application:didReceiveRemoteNotification:]它就是那个被调用的版本 Case 2
在iOS 8和9,在Case 2它是-[AppDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:]被调用的方法.
这是否意味着我必须更新我的应用程序并为iOS 10实现旧代理?
所以问题是,在不使用UserNotification框架的情况下,在iOS 10上处理所接收推送的用户交互的正确实现是什么.
欢呼声,Jan
Ada*_*don 24
适用于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)
}
Run Code Online (Sandbox Code Playgroud)
and*_*esk 15
我们在这里遇到了同样的问题,我们只能通过使用这里给出的答案代码来解决iOS 10 GM发布时的这个问题:https://forums.developer.apple.com/thread/54332
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSOperatingSystemVersion version = [[NSProcessInfo processInfo] operatingSystemVersion];
if (version.majorVersion == 10 && version.minorVersion == 0) {
[self application: application
didReceiveRemoteNotification: userInfo
fetchCompletionHandler: ^(UIBackgroundFetchResult result) {
}];
}
Run Code Online (Sandbox Code Playgroud)
通过此修复,我们的代码在iOS 9和10上再次开始工作.
我们还必须改变我们在推送通知上处理应用程序状态行为(UIApplicationStateActive,UIApplicationStateInactive和UIApplicationStateBackground)的方式,因为它似乎也在iOS 10上发生了变化
编辑:
Jan*_*Jan 13
这已在iOS 10.1 Beta 1中修复!!
在-[UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:]当用户点击一个通知是正确调用.
| 归档时间: |
|
| 查看次数: |
20196 次 |
| 最近记录: |