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)

用户喜欢...

三相无刷PMSM 支持所有电机控制解决方案的快速开发系统

The FlexMC Motor Control Development PlatformTM是支持所有电机控制解决方案的快速开发系统。 FlexMC KitTM通过基于模型的强大设计工具帮助您加快产品上市并提高性能。 ADI/Boston Engineering解决方案集硬件、...


SmartMotion 开发解决方案具有 Microchip Technology SAMG55 主机控制器和 InvenSense 运动传感器

SmartMotion 开发平台 TDK 的 SmartMotion 开发解决方案具有 Microchip Technology SAMG55 主机控制器和 InvenSense 运动传感器 TDKSmartMotion 平台是InvenSense运动传感器设备的全面开发套件。该平台围绕Microchip的...


Maxim 的 MAX-HEALTH-BAND 开发平台优化了设计周期,用于开发高精度小型高功效可穿戴健康和健身应用

Maxim的 MAX-HEALTH-BAND 是一个开发和评估平台,包括心率和活动监视器,使设计人员能够为他们的可穿戴设计提取生命体征和原始数据。该平台基于小型高能效 IC,包括经过优化的 MAX86140 光学脉搏...


智能音箱VocalFusion™立体声开发套件

ocalFusion立体声开发套件采用紧凑型四麦克风线性阵列,使开发人员和OEM能够为消费电子产品和物联网产品添加远场语音捕获。线性设计经过优化,可集成到智能电视,条形音箱,机顶盒,数字...


Microchip 的 Amazon 网络服务 (AWS) IoT 套件用于安全物联网应用的快速原型开发

来自Microchip Technology的 AT88CKECC-AWS-XSTK-B零接触安全配置套件帮助设计人员快速、可靠地开发出物联网设备,符合 AWS 安全规定。新的安全模型要求设备必须使用相互身份验证在 AWS 云上获得远程...


CN0398开发板和ADuCM360_demo_cn0398开源软件包解决了土壤测量系统设

保持适当的土壤湿度和pH值是植物健康的基本要求,无论是用于大规模农业还是简单的家庭菜园。然而,为了测量这些土壤特性,开发人员需要设计出具有成本效益的高精度模拟信号链,能够将...


为开发人员提供边缘计算的理念:具有智能酒演示的工业物联网

我们与很多边缘计算,嵌入式开发和工业物联网(IIoT)开发人员合作,您知道我们在找什么?他们问我们的物联网用例适用于多种业务。换句话说,大多数公司都有工业控制,自动化,计量,...


物联网原型开发使用简单的单板设计

物联网,特别是工业物联网(IIoT)不仅负责为许多业务部门创造变革性的影响,还负责实现嵌入式IIoT解决方案开发方式的根本转变。许多面临此类项目的工程师选择选择市售的单板计算机(...


Raspberry Pi智能语音助手应用程序的快速原型开发

语音助手已经迅速成为一个重要的产品功能,这要归功于流行的基于智能语音的产品,如Amazon Echo和Google Home。虽然语音服务提供商为开发人员提供了应用程序编程接口(API)支持,所以他们不...


解决物联网设备开发的挑战

随着越来越多的消费者和业务团队遇到物联网的概念并理解其带来的机遇,渴望在数百万个个人场景中利用其潜力将是不可阻挡的。这种可能性是无限的:保持打印机/复印机的安装基础,管理...