iOS 10 中的远程通知

Remote Notifications in iOS 10

所以我们都知道 Apple 今年夏天推出了 UserNotifications Framework,它很棒。 根据 Apple 的 API 参考资料和关于此框架的 WWDC Session,我们现在有一种注册推送通知的新方法,如下所示:

 UNUserNotificationCenter.current().requestAuthorization(options: [options], completionHandler: {})

但显然此方法不会从 APNs 服务器获取 deviceToken,因此 Apple 在 UIKit 中保留了一些 API,如下所示:

UIApplication.shared.registerForRemoteNotifications()
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data){}

这是注册和获取远程通知的 deviceToken 的两种方法。

所以如果我只想注册远程通知,我还需要做 requestAuthorization 事情吗?或者 requestAuthorization 只是为了注册本地通知?

另外,即使我只想注册远程通知,如果我需要实现它们,我应该在哪里写registerForRemoteNotifications()?我应该把它写在 requestAuthorization 中的 completionHandler 中,还是应该把它写在外面,就好像这两个 requestregister 的东西是 运行 并行的?

如果您只想注册远程通知,您仍然需要requestAuthorization,因为这是您询问用户是否可以显示警报和声音的方式,这适用于本地和远程通知。

您可以在 requestAuthorization 完成处理程序之外调用 registerForRemoteNotifications 并允许它们并行 运行。

更新:

registerForRemoteNotifications 获取用户的令牌无论他们是否他们已经批准推送通知。

如果用户拒绝,这有什么用?

在未来的任何时候(在您的应用程序调用 requestAuthorization 以表明它想要发送通知之后),用户可以进入“设置”应用程序,点击您的应用程序,然后打开允许通知设置。

如果您已经在使用用户的令牌发送通知,则这些通知将在用户启用权限后开始发送,您无需执行任何操作。