close
当前位置: 物联网在线 > 技术文库 > ios >

iOS 开发中,怎样用好 Notifications?

iOS 开发中,怎样用好 Notifications?

前言

在 iOS 开发中,有这样一个场景:某件重要的事情必须立刻让用户知道,甚至不惜以打断用户当前操作为代价来强调这份重要性。这就是通知(Notifiations)。目前常用的框架为 UserNotifications,它主要用来在锁屏和应用界面通过弹窗来显示通知。另一个框架是 Notification Center ,以它实现的跨 object 通知以及原生的 KVO(Key-Value-Observing) 是 iOS 中观察者模式的主要实现手段。

本文内容:

UserNotifications 介绍

本地通知(Local Notifications)

远程通知(Remote Notifications)

观察者模式(Observer Pattern)

UserNotifications 介绍

UserNotifications 是 iOS 10 刚刚引入的全新框架。与以往版本的本地通知和远程通知分别处理不同,这次苹果把两者的 API 统一。从此以后, 无论处理本地通知还是远程通知,都是用 UserNotifications 框架 。

UserNotifications 的流程也十分简单,主要分以下 4 步:

iOS 开发中,怎样用好 Notifications?

UserNotifications 流程

注册

通过调用 requestAuthorization 这个方法,通知中心会向用户发送通知许可请求。在弹出的 Alert 中点击同意,即可完成注册。

创建

如果是本地推送,则在 AppDelegate 中设置推送参数;如果是远程推送,则无需设置参数,推送的内容和触发时间都在远程服务器端配置。

推送

这一步就是系统或者远程服务器推送通知。伴随着一声清脆的响声(或自定义的声音),通知对应的UI显示到手机界面的过程。

响应

当用户看到通知后,点击进去会有相应的响应选项。如下图:

iOS 开发中,怎样用好 Notifications?

例如 Instagram 这个 App ,用户看到它的通知后有3个选项:一是 Like , 点击之后就是给你朋友的照片点赞;另一个是 Quick Reply,点击之后可以评论照片;最后是 View Post,点击之后是进入 Instagram 主 App 进行照片浏览。用户不同的选择决定了之后的操作,笔者称这个过程是对 Notification 的 响应

本地通知

因为通知是针对整个 App 级别的功能,所以一般在 AppDelegate 中完成注册和创建的过程。代码如下:

/// 注册 UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { accepted, error in   if !accepted {     print("Notification access denied.")   } }   /// 创建 funcscheduleNotification(atdate: Date) {   /// 触发机制   letcalendar = Calendar(identifier: .gregorian)   letcomponents = calendar.dateComponents(in: .current, from: date)   letnewComponents = DateComponents(calendar: calendar, timeZone: .current, month: components.month, day: components.day, hour: components.hour, minute: components.minute)   lettrigger = UNCalendarNotificationTrigger(dateMatching: newComponents, repeats: false)     /// 通知内容   letcontent = UNMutableNotificationContent()   content.title = "Tutorial Reminder"   content.body = "Just a reminder to read your tutorial over at Soapyigu's Swift30Projects!"   content.sound = UNNotificationSound.default()     /// 传入参数   letrequest = UNNotificationRequest(identifier: "textNotification", content: content, trigger: trigger)     /// 将创建好的通知传入通知中心   UNUserNotificationCenter.current().removeAllPendingNotificationRequests()   UNUserNotificationCenter.current().add(request) { errorin     if leterror = error {       print("Uh oh! We had an error: \(error)")     }   } }

在创建过程中,有以下几点值得注意:

触发机制。如果是时间触发,就用 UNCalendarNotificationTrigger;如果是地点触发,就用 UNLocationNotificationTrigger。

通知内容。除了标题(title)、内容(body)、声音(sound)外,还可以添加副标题(subTitle)甚至是图片。添加图片的示例代码如下:

/// 将图片添加到通知中 if letpath = Bundle.main.path(forResource: "Swift", ofType: "png") {     /// 通过本地图片 Swift.png 的路径创建 URL   leturl = URL(fileURLWithPath: path)     do {     letattachment = try UNNotificationAttachment(identifier: "Swift", url: url, options: nil)       /// 设置内容的附件,将图片传入     /// 你可以传多个图片进入,但只会显示第一个图片     /// 当然你也可以根据不同情况显示不同图片     content.attachments = [attachment]   } catch {     print("The attachment was not loaded.")   } }

Identifier。一个 App 可能有多种本地通知,它们之间是通过 Identifier 进行区分的。


(责任编辑:ioter)

用户喜欢...

ADI开发套件可简化空气质量传感器系统设计

空气质量检测对于健康和安全至关重要,在教室和其他教育场所等特定区域甚至是强制性要求。不过对开发人员而言,空气传感器系统的设计可能问题重重。空气质量传感器在设置期间往往看起...


大联大友尚集团推出ST物联网开发套件,为开发物联网带来最高灵活性

致力于亚太地区市场的领先半导体元器件分销商---大联大控股宣布,其旗下友尚推出意法半导体(ST)最新的ST...


使用 LoRa 进行低速率、长距离物联网应用开发

设计人员可以使用各种各样的无线技术将产品连接到物联网 (IoT)。每种技术适用于不同的应用,需要设计人员仔细考虑作用距离和数据速率、成本、功耗、体积和外形等因素。 本文将介绍 LoR...


嵌入式开发32位MCU加速取代8位MCU应用

目前在嵌入式MCU开发领域,8位MCU仍占据1/3以上份额,在工业控制、安防、物联网、消费类电子等诸多领域,8位MCU的身影依然处处可见,根据IHS的预测,2018年8位MCU的市场规模将增长到78亿美元...


恩智浦PCA8538评估板评测

PCA8538是恩智浦(NXP)公司推出的最新的基于COG技术的液晶显示节段驱动器,该芯片最多可以支持918个像素。爱板网第...


为微软HoloLens开发应用需要注意什么?

如今在AR/VR/MR领域,微软的混合现实设备HoloLens获得了极大的关注,HoloLens实现了现实世界与虚拟世界的融合,两个世...


炸掉天的物联网开发套件 (IDK)

ON Semiconductor 推出一款可配置的快速原型开发平台,适合工业物联网、智能城市/楼宇和移动健康应用 ON Semiconductor的多功能产品采用独特的模块化结构,包含硬件和软件,提供可配置的平台,能...


Microchip PIC32MK开发套件

Microchip Technology PIC32MK开发套件提供了一个用于评估PIC32MK 32位MCU的平台。 该套件提供的低成本解决方案设有CAN、USB、ADC和GPIO型输入。 PIC32MK板还设有SSD1963显卡驱动器和30引脚连接器。 此开发套...


Intel® RealSense™机器人开发套件

IntelRealSense机器人开发套件 Intel RealSense机器人开发套件是包含一个信用卡大小的AAEON UP电路板和IntelRealSense摄像头(R200)的套件。 该套件允许设计人员创建自己的机器人原型,以识别物体或人以及...


视觉和感应平台 Intel® RealSense™ ZR300开发套件

IntelRealSenseZR300开发套件 IntelRealSenseZR300开发套件是一款先进的视觉和感应平台,内置Intel RealSense ZR300摄像头。 该设备实际上将三个摄像头的功能融为一体:1 个1080p高清摄像头、1个红外摄像头...