本地推送通知UserNotifications在Swift中的实现方式

这篇文章主要介绍了本地推送通知UserNotifications在Swift中的实现方式,想了解消息推送的同学,一定要看一下

简介

消息推送相信在很多人的眼里都不陌生了吧?像即时聊天微信,好友发信息给你时会在顶部弹下小窗口提醒你。也像是在影院APP预订了电影票,在开场前一小时你也会收到提醒。这类推送是需要经过后端发送请求的,需要服务器发送推送请求,又或者使用如极光推送等第三方渠道。

那么如果我们的APP不需要连网呢?这是不是就不能使用消息推送了?不是的,苹果还提供给我们本地消息通知服务,即便APP不连网也能使用,功能也很强大可靠。本地时钟的应用场景很广泛,例如手机上的时钟、日历等。

那么你知道如何去实现它吗?这篇文章将告知你答案,同时以两个小案例作为例子,以便更好地去理解它。

笔者环境

Xcode - Version 11.5 (11E608c)

Swift - version 5.2.4 (swiftlang-1103.0.32.9 clang-1103.0.32.53).

权限获取

UserNotifications 是 iOS10 推出来的框架,因此你只能在 10 或以上的版本使用它。推送服务和以往一样,也是需要用户授权的,当用户同意后才能正常注册消息通知,当用户拒绝时应该引导用户去打开APP的通知权限。利用requestAuthorization方法弹出并获取通知权限,接收的参数options是具体的授权选项,一般有弹窗、未读数量图标和声音即可,并在回调闭包中可以获取授权结果和错误。

 UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (status, err) in if !status { print("用户不同意授权通知权限") return } }

status 为布尔类型,true 表示用户同意,false 即拒绝。在此种情况下,我们可以使用弹窗去引导用户去打开通知权限,需要明确告知用户打开后有什么好处,如果关闭会造成什么影响等等。如果让用户手动打开设置,找到APP,为APP开启权限,这样未免太过复杂,所幸的是可以通过以下代码为用户直接跳转至该应用的权限设置中心。

 guard let url = URL(string: UIApplication.openSettingsURLString) else { return } if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url, completionHandler: nil) }

应弹窗提示用户,待用户同意后才跳转至设置,不然容易引起用户的不满心理。

触发器

本地消息通知一般有以下三种类型的触发器,它们都是继承于类UNNotificationTrigger:

  • UNTimeIntervalNotificationTrigger - 在经过特定的时间后触发本地消息推送;
  • UNCalendarNotificationTrigger - 在特定的时间点触发本地消息推送;
  • UNLocationNotificationTrigger - 在进入或离开特定的地理位置时触发本地消息推送。

UNTimeIntervalNotificationTrigger

手机上的时钟用过吧,里面的计时器功能就可以用UNTimeIntervalNotificationTrigger实现,比如开始计时30分钟,那么在计时器完成的时候就是使用通知提醒。

那么设置在经过特定的时间后触发本地消息推送,一般都经由以下几个步骤:

  • 首先创建UNMutableNotificationContent类,设定标题和内容,如果你有子标题还可以设置子标题,一般很少见到会设置子标题的应用。
  • 创建触发器,这里就是UNTimeIntervalNotificationTrigger,设定执行秒数和是否循环通知。
  • 创建通知请求UNNotificationRequest,这里需要指定通知的identifier,内容和触发器,至于identifier,你可以随意定义。
  • 最后将通知请求添加到系统的通知中心UNUserNotificationCenter即可。

例子,创建一个通知,在5秒后执行消息推送。实例代码展示如下:

 let content = UNMutableNotificationContent() content.title = "添加朋友 对着月亮敲代码" //content.subtitle = "子标题" content.body = "公众号 gh_6a83a7c19315" content.badge = 1 let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false) let request = UNNotificationRequest(identifier: "Notification", content: content, trigger: trigger) UNUserNotificationCenter.current().add(request) { err in err != nil ? print("添加本地通知错误", err!.localizedDescription) : print("添加本地通知成功") }

有一处小 Tips,UNTimeIntervalNotificationTrigger创建时的repeats选项,如果你设定为循环通知时,即需要每隔N秒触发一次通知,那么你必须至少设置为60秒的时间间隔,如若低于60秒,你将会得到这样一条错误。

*** Terminating app due以上就是本地推送通知UserNotifications在Swift中的实现方式的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 其他教程