iOS中使用本地通知

72 阅读3分钟

前言

本地通知在iOS系统中扮演着非常重要的作用,不管是系统闹铃程序的提醒,还是很多生日app的提醒。都使用了本地通知这一系统特性。好在系统为我们开放了这一特性,我们只需要使用简单的API即可使用此功能。下面我们一起来看看具体如何使用本地通知

请求授权

在使用之前,我们需要让用户授权,是否可以使用本地通知的特性来提醒用户。如果用户授权通过,那么我们便可以正常使用后续的注册,取消功能。否则,将会收到successfalse的条件状态,那么我们将无法使用本地通知。具体授权如下:

let options: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(options: options) { success, error in
  if success {
    print("Success")
  } else {
    print("Error")
  }
}

注册通知前,我们需要向系统询问授权的项目。在上述代码中,

.alert 代表通知的弹框

.badge 代表手机桌面上的红色数字图标

.sound 代表我们来通知时的声音

通常情况我们只需要注册着三个选项就够了。

当我们点击请求授权按钮,就会弹出授权页面

image.png

点击Allow便可以进行后续操作 点击Don’t Allow 将会收到将会收到successfalse的条件状态,将无法收到通知

添加通知

添加通知总共有三种维度

1. 时间维度

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5.0, repeats: false)

此处的时间是毫秒为单位,repeats指示是否为重复

2. 日历时间维度

// 每周 星期二 晚上 十点 八分 提醒
var dateComponents = DateComponents()
dateComponents.hour = 22
dateComponents.minute = 8
dateComponents.weekday = 3 // 星期二 sunday是1

let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)

以上是日历维度,我们可以指定参数。上述示例意思为:在每星期周二晚上十点八分重复提醒

3. 位置维度

let locationCoordinate2D = CLLocationCoordinate2D(
  latitude: 100.00,
  longitude: 100.00
)

let region = CLCircularRegion(
  center: locationCoordinate2D,
  radius: 100,
  identifier: UUID().uuidString
)
region.notifyOnExit = true
region.notifyOnEntry = true

let trigger = UNLocationNotificationTrigger(region: region, repeats: true)

上述是以位置为中心,比如我们去天安门,我们就可以把天安门的坐标点设置给locationCoordinate2D属性,然后指定一个距离radius。再指定进入范围或者退出范围是否提醒。这样就可以达成地理位置的提醒功能。很多app都有这个功能,有一个大头针扎在地图上,然后有一个圆形,并且圆形的半径是可以拖动。其实就是用了这个功能。基于地理位置的提醒功能

以上是三种触发方式,最终的添加通知代码如下:

let content = UNMutableNotificationContent()
content.title = "这是我的第一个本地通知"
content.subtitle = "好像很容易哟"
content.sound = .default
content.badge = 1

// Trigger
// 1. Time
// 2. Calendar
// 3. Location


        
let request = UNNotificationRequest(
            identifier: UUID().uuidString,
            content: content,
            trigger: trigger
)
UNUserNotificationCenter.current().add(request)

我们添加通知之前需要设置标题等重要信息,以便于用户看了你的通知提醒就知道是什么事情。另外还需要设置一个badge,通常为1。当通知时间到了,app的右上角机会显示一个角标为1的红色圈圈。声音你也可以自定义,选择一个声音放入app中,在content.sound=你的自定义音乐名称即可。

取消通知

取消就很简单了,我们可以取消还未到来的通知,也可以取消已经到达的通知。都非常方便

func cancelNotification() {
  UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
  UNUserNotificationCenter.current().removeAllDeliveredNotifications()
}

好了,本地通知就介绍这么多。

如果你觉得写的不错,就分享,评论,点赞吧。

大家有什么看法呢?欢迎留言讨论。

公众号:RobotPBQ