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
中,还是应该把它写在外面,好像这两个request
和register
是并行运行的?
【问题讨论】:
【参考方案1】:如果您只想注册远程通知,您仍然需要requestAuthorization
,因为这是您询问用户是否可以显示警报和声音的方式,这适用于本地和远程通知。
您可以在 requestAuthorization
完成处理程序之外调用 registerForRemoteNotifications
并允许它们并行运行。
更新:
registerForRemoteNotifications
为您获取用户的令牌无论他们是否已批准推送通知。
如果用户拒绝,这有什么用处?
在未来的任何时候(在您的应用调用requestAuthorization
表示它想要发送通知之后),用户可以进入“设置”应用,点按您的应用,然后打开“允许通知”设置。
如果您已经使用用户的令牌发送通知,则这些通知将在用户打开权限时开始发送,无需您执行任何操作。
【讨论】:
我真的很困惑,这在逻辑上并不清晰,我的意思是,我们实现代码的方式。就像,如果在完成处理程序中我发现granted == false
这意味着用户拒绝了应用程序的通知请求,那么我们仍然并行执行 registerForRemoteNotifications
有什么意义呢?
刚刚在我的应用中进行了一些测试,以便更新我的答案。我同意文档非常不清楚。
猜苹果只是需要改进它。以上是关于iOS 10 中的远程通知的主要内容,如果未能解决你的问题,请参考以下文章