iOS 10远程通知
在iOS 10中,通知发生了很大变化。 远程和本地通知方法是统一的。 您可以使用通知扩展名添加图像之类的媒体。 在本文中,我将讨论如何设置通知类型和注册远程通知。 在下一部分中,我将向您展示如何处理远程通知和可操作的通知。
远程通知过程
首先,了解如何使用远程通知会很有帮助。 远程通知涉及以下步骤:
- 配置您的通知类型并注册远程通知
- 注册到APN的远程通知
- 将设备令牌注册到服务器(推送通知提供程序)
- 在提供商和APN之间进行通信
- 处理远程通知
步骤3和4是服务器端过程。
步骤1.配置通知类型并注册远程通知
1)配置通知类型
您需要请求授权才能接收通知。 在此阶段,您可以设置通知类型,例如警报,声音和标志。
- 在iOS 9及以下版本中
使用`registerUserNotificationSettings`方法 - 在iOS 10中
使用`requestAuthorization(options:completionHandler:)`方法。
func requestAuthorization(options:UNAuthorizationOptions = [],
completeHandler:@转义(Bool,Error?)-> Void)
- 选项描述您要提供的通知类型。
- completeHandler具有两个参数: Grant和error
–如果未发生错误,则错误为nil 。
– 授予的返回true或false取决于以下情况。
这不是我期望的结果。 为什么?
授予所请求选项的授权时,此参数的值为* true *。 当一个或多个选项的授权被拒绝时,该值为* false *。
在Apple文档中,他们谈论的是请求的选项,而不是通知设置。 但是实际的测试结果与上面的列表不同。 即使用户更改了授权选项(例如在设置应用中禁用警报),它也没有返回“ false”值。
首次启动应用程序时,“授权请求”对话框仅出现一次。 因此,我建议您将`.alert`选项设置为默认选项。如果您从`registerUserNotificationSettings`或`requestAuthorization(options:completionHandler:)`中省略了该选项,则无法在设置应用程序中为您的应用程序通知找到警报选项。
2)注册远程通知
- 调用registerForRemoteNotifications()方法。
- 如果注册成功,它将自动调用` application:didRegisterForRemoteNotificationsWithDeviceToken`委托方法。 如果失败,则调用application:didFailToRegisterForRemoteNotificationsWithError委托方法。
样例代码
// appDelegate.swift
导入用户通知
@UIApplicationMain
类AppDelegate:UIResponder,UIApplicationDelegate {
var window:UIWindow?
func application(_ application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?)->布尔{
// 1.注册通知类型
如果#available(iOS 10.0,*){
UNUserNotificationCenter
。当前()
.requestAuthorization(选项:[.alert,.sound,.badge])
{
授予,错误
如果授予&&错误==无{
debugPrint(“ granted”)
// 2.注册您的应用以获取远程通知。
application.registerForRemoteNotifications()
}其他{
//禁用通知服务。 例如)通知提供商服务器。
debugPrint(error?.localizedDescription ??“未授予授权。请在设置应用程序中检查您的应用程序通知设置”)
}
}其他{
让设置= UIUserNotificationSettings(类型:[.alert,.badge,.sound],类别:无)
//要安全地调用registerForRemoteNotifications,请在下面的iOS9中使用application:didRegister委托方法
}
}
...
...
@available(iOS,不建议使用:10.0)
AppDelegate扩展名{
func application(_ application:UIApplication,didRegister notificationSettings:UIUserNotificationSettings){
application.registerForRemoteNotifications()
}
}
参考文献
- http://qiita.com/tokorom/items/6c6864fa8e841e50e37b
- https://gist.github.com/KentarouKanno/d7c7768deea70076264f2208a878de68