iOS 10 中的远程通知

Posted

技术标签:

【中文标题】iOS 10 中的远程通知【英文标题】:Remote Notifications in iOS 10 【发布时间】:2016-09-29 19:00:35 【问题描述】:

所以我们都知道 Apple 在今年夏天推出了 UserNotifications 框架,这很棒。 根据 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 是并行运行的?

【问题讨论】:

【参考方案1】:

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

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

更新:

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

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

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

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

【讨论】:

我真的很困惑,这在逻辑上并不清晰,我的意思是,我们实现代码的方式。就像,如果在完成处理程序中我发现 granted == false 这意味着用户拒绝了应用程序的通知请求,那么我们仍然并行执行 registerForRemoteNotifications 有什么意义呢? 刚刚在我的应用中进行了一些测试,以便更新我的答案。我同意文档非常不清楚。 猜苹果只是需要改进它。

以上是关于iOS 10 中的远程通知的主要内容,如果未能解决你的问题,请参考以下文章

iOS 10 中的远程通知

ios10新特性-UserNotification

iOS:如果之前启用,则禁用远程通知

在 iOS 10 中使用远程通知(富媒体推送通知)在通知栏中显示图像

应用程序未运行时的 iOS 10 远程通知

如何接收 iOS 10 远程用户通知