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)

用户喜欢...

新传感器开发推动BLDC电机控制性能

转向BLDC电机 近年来,在许多终端市场和应用中,用高效无刷直流电动机(BLDC)取代交流电动机或机械泵已经取得了重大进展。使用BLDC电机的一些主要优点包括:更高的功率和热效率,更高的...


推荐3大硬件到云设计套件,简化物联网连接和应用开发

Simplicity是IoT开发板的游戏名称,旨在降低复杂性和上市时间。 即插即用的物联网模块和设计套件通过开箱即用的解决方案进一步简化了与云的智能设备连接。它们为电子行业的众多设计人员创...


Semtech利用LoRaWAN推出用于物联网开发的免费开源工具集

Semtech希望通过免费的,开源的,以LoRaWAN为重点的物联网开发教育工具来揭开RF的神秘色彩。 Semtech宣布推出两个新的免费教育工具系列,以帮助设计人员了解LoRaWAN以及如何在设计中实现它,尤...


使用毫米波雷达套件快速开发精密目标检测设计

设计人员在设计运动传感器时面临着持续的竞争压力。传感器不仅要体积更小、更精确,并且还要在智能建筑、工厂自动化、交通运输和无人机等多种行业应用中具有更远的检测范围。虽然毫米...


面向基于微控制器的快速原型设计与开发的 CircuitPython 基础知识

虽然 Python 语言让编程变得更加简单,但它最初的设计目的是在拥有足够的处理、内存和外设资源的个人电脑及其他机器上运行。而对于面临较严格的资源和接口限制的嵌入式系统,针对微控制...


农业物联网 系统开发案例

联合国预测,到2050年世界人口将达到近100亿,高于目前居住在全球的近80亿人。如果这些预测成立,我们的星球将很快每天再喂食2,000,000,000个口。获得营养丰富且价格合理的食品,如水果,蔬...


使用 Electric Imp 平台快速启动物联网产品开发

设计互联网连接产品需要掌握众多技能。开发人员必须知道如何编写嵌入式软件和构建电路板,还要了解如何保护设备安全,以及如何将设备连接到网络以便进行远程更新和管理。 为单个物联...


开发工具调整 MCU 的功耗

构成物联网 (IoT) 的众多器件关联在一起的其中一个原因是对低能耗的要求。为了满足这一要求,需要在一个整体策略内,从多个层面进行优化。一个成功的设计不仅需要选择低功耗的元器件,...


IoT 开发者调查报告

Eclipse 基金会物联网工作小组发布了第五年的全球物联网开发人员调查,参与调查的开发人员有 1,717 人。 受访者关注物联网的领域,第一名是物联网平台,接下来是家庭自动化以及工业自动化...


电机控制开发之无人机技术

到 2050 年,全球人口可能接近 100 亿。联合国粮食及农业组织 (UN FAO) 2017 粮食及农业未来报告指出,农业产量需增产 50% 才可提供充足的粮食。 联合国粮食及农业组织指出了若干亟待解决的粮食...