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

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

一文教你使用Python实现本地分页

《一文教你使用Python实现本地分页》这篇文章主要为大家详细介绍了Python如何实现本地分页的算法,主要针对二级数据结构,文中的示例代码简洁易懂,有需要的小伙伴可以了解下... 在项目开发的过程中,遇到分页的第一页就展示大量的数据,导致前端列表加载展示的速度慢,所以需要在本地加入分页处理,把所有数据先放

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

一文详解Java Condition的await和signal等待通知机制

《一文详解JavaCondition的await和signal等待通知机制》这篇文章主要为大家详细介绍了JavaCondition的await和signal等待通知机制的相关知识,文中的示例代码讲... 目录1. Condition的核心方法2. 使用场景与优势3. 使用流程与规范基本模板生产者-消费者示例

deepseek本地部署使用步骤详解

《deepseek本地部署使用步骤详解》DeepSeek是一个开源的深度学习模型,支持自然语言处理和推荐系统,本地部署步骤包括克隆仓库、创建虚拟环境、安装依赖、配置模型和数据、启动服务、调试与优化以及... 目录环境要求部署步骤1. 克隆 DeepSeek 仓库2. 创建虚拟环境3. 安装依赖4. 配置模型

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja