iOS10 本地通知

2024-04-21 13:32
文章标签 本地 通知 ios10

本文主要是介绍iOS10 本地通知,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用户通知根据通知信息的来源,可以分为本地通知和远程通知。本地通知是由iOS操作系统根据条件在本机上触发的,例如闹钟就是基于时间触发提醒通知的。远程通知是第三方远程推送给用户的iOS设备的。这种通知常用于商家推销自家的产品。

下面主要讲述开发本地通知的过程:

  1. 请求授权
  2. 通知创建和发送
  3. 通知接收后的处理

请求授权

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound) completionHandler:^(BOOL granted,NSError* _Nullable error){if(!error){NSLog(@"授权成功");}else{NSLog(@"授权失败");}}];return YES;
}

通知的创建和发送

  1. 创建通知内容
  2. 创建触发器
  3. 创建通知请求对象
  4. 添加通知请求到通知中心
创建通知内容

用户通知内容由 UNNotificationContent 和 UNMutableNotificationContent 两个类描述,其中前者是不可变的,后面是可变的用户通知内容类,主要的属性如下:
- title : 通知主标题
- subtitle : 通知副标题
- body : 通知内容
- badge : 应用图标标记数字,NSNumber 类型
- sound : 通知到达的音效,UNNotificationSound 类型
- attachments : 通知内容附件集合,可以保存多个 UNNotificationAttachment 对象

视图控制器 ViewController.mscheduleNotification: 方法的代码如下:

UNMutableNotificationContent* content = [[UNMutableNotificationContent alloc] init];content.body = @"通知内容:大家好,新年快乐!";content.sound = [UNNotificationSound defaultSound];content.subtitle = @"通知副标题";content.title = @"通知标题";
创建触发器

本地通知触发器有三种类型:时间中断触发器、日历触发器和位置触发器。

这里主要讲一下时间中断触发器:

通过UNTimeIntervalNotificationTrigger 类的静态工厂方法 + triggerWithTimeInterval:repeats: 创建并初始化 UNTimeIntervalNotificationTrigger 对象,在 ViewController.mcreateTimeTrigger 方法的代码如下:

- (UNTimeIntervalNotificationTrigger*)createTimeTrigger
{UNTimeIntervalNotificationTrigger* trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:10 repeats:NO];return trigger;
}
创建通知请求对象

我们需要将前面创建的内容和触发器封装到通知请求对象 UNNotificationRequest 中,其中通知请求对象用于管理本地通知内容和触发计划。在 ViewController.mscheduleNotification: 方法的代码如下:

UNNotificationRequest* request = [UNNotificationRequest requestWithIdentifier:@"TimeTrigger" content:content trigger:[self createTimeTrigger]];//创建触发器
添加通知请求到通知中心

事实上,现在我们还没有开启通知计划,这需要将通知添加到通知中心。在 ViewController.mscheduleNotification: 方法的代码如下:

[[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError* _Nullable error){if(!error){NSLog(@"添加到通知中心");}}];

上述代码将通知对象添加到通知中心,这样就开启了通知计划,等到触发器条件满足时发送通知。

通知接收后的处理

用户接收到通知后,有可能对通知进行一些操作,其中会涉及到的类有:UNNotificationActionUNNotificationCategory,以及委托协议 UNUserNotificationCenterDelegate ,下面简单说明一下:
- UNNotificationAction : 是动作,封装了用户进行的操作。它还有一个子类 UNTextInputNotificationAction ,该子类能够接收用户输入文本操作
- UNNotificationCategory : 是类别,它定义了一组操作
- UNUserNotificationCenterDelegate : 是响应动作的委托对象方法,当用户接收到通知并且执行了操作后,会回调该委托对象方法。

content.categoryIdentifier = @"myCategory";UNNotificationAction* action = [UNNotificationAction actionWithIdentifier:@"myAction" title:@"点赞" options:UNNotificationActionOptionNone];UNNotificationCategory* category = [UNNotificationCategory categoryWithIdentifier:@"myCategory" actions:@[action] intentIdentifiers:@[@""] options:UNNotificationCategoryOptionNone];NSSet* categories = [NSSet setWithObject:category];
[[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:categories];
[UNUserNotificationCenter currentNotificationCenter].delegate = self;

实现 UNUserNotificationCenterDelegate 协议方法:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler
{if([response.actionIdentifier isEqualToString:@"myAction"]){NSLog(@"点赞了");}completionHandler();
}

注意

  • 通知能够显示在通知栏中显示的前提是,接收通知的应用处于非活动状态,也就是应用退到后台。所以在测试上面的案例时,当点击开启按钮后,需要点击设备的Home键退出应用

大大的坑点

由于我之前设置的触发器的时间间隔是3秒,退出app后始终没有发送本地通知。将时间间隔设置为10秒后,就有效果了,这一点原因还不知道。

项目地址


转载自 关东升的《iOS开发指南》

这篇关于iOS10 本地通知的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923200

相关文章

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

如何关闭Mac的Safari通知? 3招教你关闭Safari浏览器网站通知的技巧

《如何关闭Mac的Safari通知?3招教你关闭Safari浏览器网站通知的技巧》当我们在使用Mac电脑专注做一件事情的时候,总是会被一些消息推送通知所打扰,这时候,我们就希望关闭这些烦人的Mac通... Safari 浏览器的「通知」功能本意是为了方便用户及时获取最新资讯,但很容易被一些网站滥用,导致我们

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

一文详解如何查看本地MySQL的安装路径

《一文详解如何查看本地MySQL的安装路径》本地安装MySQL对于初学者或者开发人员来说是一项基础技能,但在安装过程中可能会遇到各种问题,:本文主要介绍如何查看本地MySQL安装路径的相关资料,需... 目录1. 如何查看本地mysql的安装路径1.1. 方法1:通过查询本地服务1.2. 方法2:通过MyS

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基