SwiftUI 本地推送(Local Notification)教程目录
1. 本地推送简介
- 1.1 什么是本地推送?
- 1.2 本地推送的应用场景(提醒、定时任务、用户交互等)
- 1.3 本地推送与远程推送的区别
2. 前提条件
- 2.1 开发环境要求(Xcode 13+、iOS 15+)
- 2.2 需要的基础知识(SwiftUI 基础、Swift 语法)
核心内容
3. 请求用户通知权限
- 3.1 在
AppDelegate
或 SwiftUI Lifecycle 中配置权限请求 - 3.2 使用
UNUserNotificationCenter
请求权限 - 3.3 处理用户授权结果(允许/拒绝)
- 3.4 权限类型详解(声音、横幅、角标等)
4. 创建并触发本地推送
- 4.1 构建通知内容(
UNMutableNotificationContent
)- 标题、副标题、正文
- 声音、角标、附加数据(
userInfo
)
- 4.2 设置通知触发器(
UNTimeIntervalNotificationTrigger
或UNCalendarNotificationTrigger
)- 基于时间的触发(如 5 秒后)
- 基于日历的触发(如每天上午 10 点)
- 4.3 将通知添加到队列(
UNUserNotificationCenter.add()
) - 4.4 在 SwiftUI 中触发通知的完整代码示例
5. 处理用户交互
- 5.1 点击通知打开应用时的处理
- 在
onReceive
或AppDelegate
中捕获userInfo
- 在
- 5.2 自定义通知操作按钮(
UNNotificationAction
) - 5.3 在 SwiftUI 中跳转到特定视图(使用
NavigationLink
或状态绑定)
6. 调试与常见问题
- 6.1 在模拟器和真机上的调试技巧
- 6.2 常见问题解决:
- 通知不显示(权限、静默模式、勿扰模式)
- 时间触发器不生效
- 用户点击通知无响应
高级功能
7. 本地推送的高级用法
- 7.1 动态更新或取消已计划的推送
- 7.2 重复推送(每日、每周等)
- 7.3 在通知中显示图片或视频(
UNNotificationAttachment
) - 7.4 后台任务与本地推送的结合(如定时更新数据后触发通知)
8. SwiftUI 与 Combine 的集成
- 8.1 使用
ObservableObject
管理通知逻辑 - 8.2 通过 Combine 监听通知事件
附录
- A. 完整示例项目
- 包含请求权限、定时推送、交互处理的完整代码
- B. 官方文档与推荐资源
- Apple Developer 文档:
UserNotifications
框架 - 第三方库推荐(如简化通知处理的工具库)
- Apple Developer 文档:
- C. 注意事项
- iOS 系统限制(如后台任务时长)
- 用户隐私与推送频率建议
相关文章:
SwiftUI 本地推送(Local Notification)教程目录
1. 本地推送简介 1.1 什么是本地推送?1.2 本地推送的应用场景(提醒、定时任务、用户交互等)1.3 本地推送与远程推送的区别 2. 前提条件 2.1 开发环境要求(Xcode 13、iOS 15)2.2 需要的基础知识(SwiftUI …...
大数据技术与Scala
集合高级函数 过滤 通过条件筛选集合元素,返回新集合。 映射 对每个元素应用函数,生成新集集合 扁平化 将嵌套集合展平为单层集合。 扁平化映射 先映射后展平,常用于拆分字符串。 分组 按规则将元素分组为Map结构。 归约 …...
golang通过飞书邮件服务API发送邮件功能详解
一.需求 需要实现通过飞书邮件服务API发送邮件验证码功能:用户输入邮箱, 点击发送邮件,然后发送邮件验证码, 这里验证码有过期时间, 保存到redis缓存中 二.实现 实现的部分代码如下: 控制器部分代码 // 发送邮件控制器 func EmailSendController(userId uint64, m proto.Messa…...
BoostSearch搜索引擎项目 —— 测试用例设计 + web自动化测试代码
web自动化代码: https://gitee.com/chicken-c/boost-search/tree/master/AutoTest...
MySQL学习笔记集--触发器
触发器 MySQL触发器(Trigger)是一种特殊的存储过程,它在指定的数据库表上指定的事件(INSERT、UPDATE、DELETE)之前或之后自动执行。触发器可以用来强制执行复杂的业务逻辑、数据完整性规则、自动更新数据等。 触发器…...
算力驱动未来:从边缘计算到高阶AI的算力革命
算力驱动未来:从边缘计算到高阶AI的算力革命 摘要 本文深入探讨了不同算力水平(20TOPS至160TOPS)在人工智能领域的多样化应用场景。从边缘计算的实时目标检测到自动驾驶的多传感器融合,从自然语言处理的大模型应用到AI for Scie…...
4.8刷题记录(双指针)
今天刷的部分是代码随想录中的双指针专题代码随想录 由于里面包含的题目大部分之前刷过,并且用双指针做过。所以今天仅仅复习,不再进行代码的搬运。 1.19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 分析:此题无…...
在shell脚本中,$@和$#的区别与联系
在 Shell 脚本里,$ 和 $* 都是用于表示传递给脚本或函数的所有参数,下面详细介绍它们的区别与联系。 联系 表示所有参数:二者都能够代表传递给脚本或者函数的全部参数。当你在执行脚本时带上了多个参数,$ 和 $* 都能把这些参数呈…...
IP节点详解及国内IP节点获取指南
获取国内IP节点通常涉及网络技术或数据资源的使用,IP地址作为网络设备的唯一标识,对于网络连接和通信至关重要。详细介绍几种修改网络IP地址的常用方法,无论是对于家庭用户还是企业用户,希望能找到适合自己的解决方案。以下是方法…...
Google Play上架:解决android studio缓存问题(内容清理不干净导致拒审)
在as打包中,经常会遇到改变工程参数或者对应文件参数的情况,比如 修改android gradle版本 快捷键:ctrl + alt + shift + s 修改SDK文件路径 快捷键:ctrl + alt + shift + s 修改Gradle存储下载文件的默认位置 快捷键:ctrl + alt + s 先打开设置 修改compile...
蓝桥杯备赛 Day 21 图论基础
图的基础 ![[图的基础.png]] 1.图的存储方式 (1)邻接表(常用) vector<pair<int,int>> g[N]; //g[x]存放x的所有出点信息,二维数组 g[i][j]{first,second},first是从i出发的第j个出点,second表示边权 例如上图: g[1]{{2,0}.{3,0}} g[6]{{3,7}} g[4]{{5,0},{6,0}…...
MySQL数据库应用技术试卷
建一个以自己名字拼音为命名的数据库。(3分) CREATE DATABASE example; 令这个数据库为当前所使用的数据库。(2分) USE example; 写出如下student表结构语句。(95分) 表1: 列名 数据类型 …...
openssl源码分析之加密模式(modes)
openssl实现分组加密模式(例如AES128-CBC的CBC部分)的模块名字叫做modes,源代码位于 https://gitee.com/gh_mirrors/openssl/tree/master/crypto/modes 博主又打不开github了TT,只能找个gitee镜像 头文件是modes.h。 该模块目前…...
【Unity】Unity Transform缩放控制教程:实现3D模型缩放交互,支持按钮/鼠标/手势操作
【Unity 】Transform缩放控制教程:实现3D模型缩放交互,支持按钮/鼠标/手势操作 在Unity开发中,Transform组件承担着场景中物体的空间信息控制,包括位置、旋转和缩放。而缩放(Scale)操作,作为三…...
集成nacos2.2.1出现的错误汇总
总结 1.jdk问题 jdk要一致 2.idea使用问题 idea启动nacos要配置,idea启动类要启动两次,并配置两次vm参数 3.项目依赖问题 依赖要正确添加,有的模块就是不能用公共模块的pom配置,需要独立配置,先后启动顺序也要注意…...
从零到有的游戏开发(visual studio 2022 + easyx.h)
引言 本文章适用于C语言初学者掌握基本的游戏开发, 我将用详细的步骤引领大家如何开发属于自己的游戏。 作者温馨提示:不要认为开发游戏很难,一些基本的游戏逻辑其实很简单, 关于游戏的开发环境也不用担心,我会详细…...
海外高防服务器延迟优化——跨国业务安全加速的底层逻辑
本文深度解析海外高防服务器延迟优化的技术实现路径,揭示跨国业务场景下DDoS防护与网络性能的平衡法则。从物理线路选择到协议栈调优,从流量调度算法到安全检测机制重构,系统阐述降低20ms-50ms延迟的工程实践方案,并附2023年东南亚…...
常用环境部署(二十六)——Centos搭建MQTT服务端EMQX
1、安装docker https://blog.csdn.net/wd520521/article/details/112609796?spm1011.2415.3001.5331 2、安装EMQX4.4.4 (1)使用docker pull指令安装emqx镜像 docker pull emqx/emqx:4.4.4 (2)查看镜像 docker images 3、启…...
ecovadis认证基本概述,ecovadis认证审核有效期
EcoVadis认证基本概述 1. 什么是EcoVadis认证? EcoVadis是全球领先的企业可持续发展(ESG)评级平台,专注于评估企业在**环境(E)、劳工与人权(S)、商业道德(L)…...
2.8.4 iOS覆盖率SDK开发
iOS系统的覆盖率SDK,通过搭建本地的pod仓库,直接在podfile中添加指定的下载地址,就可以实现对被测试的app注入覆盖率SDK。 2.8.4.1 开发iOS覆盖率获取Pod私有库 在网上查找了相应的开发方法后,决定开发自己的依赖库,开发方法及步骤如下: 1,开发新的包 (1)通过Xcode创…...
Redhat(6)-ansible-变量
变量 1.作用域 Global scope:命令行中设置。 Play scope:play中设置。 Host scope :inventory中定义、facts收集或任务中注册,在主机组和主机上设置。 1.全局变量 1.1cmd命令 #1.全局变量 #显示变量 echo %PATH1.2.ansible变量 全局变量 var变量不加…...
麦科信光隔离探头在碳化硅(SiC)MOSFET动态测试中的应用
碳化硅(SiC)MOSFET 是基于宽禁带半导体材料碳化硅(SiC)制造的金属氧化物半导体场效应晶体管,相较于传统硅(Si)MOSFET,具有更高的击穿电压、更低的导通电阻、更快的开关速度以及更优异…...
android audiorecord
这里写目录标题 初始化失败记录 AudioRecord 初始化及参数介绍基本初始化参数详解1. audioSource (音频源)2. sampleRateInHz (采样率)3. channelConfig (声道配置)4. audioFormat (音频格式)5. bufferSizeInBytes (缓冲区大小) 完整初始化示例使用注意事项 参考地址 初始化失败…...
有一个变量 在有些线程没有加锁 有些线程加锁了,那我在这些加锁的线程中能起到对应的作用吗
这是一个非常经典、但也很危险的问题。 🧨 简单结论: 如果一个变量在某些线程访问时没有加锁,即使其他线程对它加了锁,也: ❌ 不能保证线程安全! ❌ 加锁的部分不会“保护”未加锁的部分! &am…...
【人工智能】AI大模型开发数学基础指南
目录 学习内容**1. 线性代数****2. 概率与统计****3. 微积分****4. 优化理论****5. 信息论****6. 数值计算****7. 离散数学****8. 统计学进阶****如何学习?****总结** 如何学习**1. 明确学习目标****2. 分阶段学习计划****阶段 1:夯实基础****阶段 2&…...
直流减速电机控制实验:Simulink应用层开发(3)
文章目录 1 阶段目标2 单元测试方法3 单元测试过程3.1 按键指令识别测试3.2 电机状态转换测试4 代码生成5 总结1 阶段目标 本文是《直流减速电机控制实验》的第四部分,会通过图文结合的方式,手把手带读者操作Simulink工具进行直流减速电机的应用层开发。 本章主要将《直流减…...
隔行换色总结
功能效果展示: 第一种思路: 使用数组,将数组的内容渲染到页面上,序号也就是将数组的下标输出到第一个td上,将数组的内容输出到第二个td上,(使用拼接字符串) 具体操作: …...
【kind管理脚本-2】脚本使用说明文档 —— 便捷使用 kind 创建、删除、管理集群脚本
当然可以,以下是为你这份 Kind 管理脚本写的一份使用说明文档,可作为 README.md 或内部文档使用: 🚀 Kind 管理脚本说明文档 本脚本是一个便捷的工具,帮助你快速创建、管理和诊断基于 Kind (Kubernetes IN Docker) 的…...
Python星球日记 - 第13天:封装、继承与多态
🌟引言: 上一篇:Python星球日记 - 第12天:面向对象编程(OOP)基础 名人说:不要人夸颜色好,只留清气满乾坤(王冕《墨梅》) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、引言二、封装的概念与实现1. 公有属性与私有属性2. 使用getter和sett…...
基于AT89C52单片机的GSM上报智能家居报警温度烟雾防盗系统
点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/90579530?spm1001.2014.3001.5503 功能介绍: 1、功能:具有温度、烟雾、入侵报警功能,采用LCD1602液晶显示屏实时显示温度值与…...
北重数控滑台厂家:机器人地轨究竟是如何运作的,又在哪些领域发光发热呢?
机器人地轨是指利用机器人技术在地面上移动或执行任务的轨道系统。这种系统通常包括导轨、传动装置、传感器和控制系统等组成部分。机器人地轨的运作原理是通过控制传动装置沿着导轨移动,同时利用传感器获取周围环境信息并通过控制系统进行实时调节。 机器人地轨在…...
2025最新系统 Git 教程(三)
2.3 Git 基础 - 查看提交历史 查看提交历史 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的工具是 git log 命令。 我们使用一个非常简单的 simplegit 项目作为示例。 运行下面的命令获取该项目&…...
显示器各类异常处理方法
显示器各类异常处理方法 导航 文章目录 显示器各类异常处理方法导航画面无显示/黑屏/无HDMI信号输入显示器闪烁显示器花屏显示画面模糊或扭曲显示器颜色异常显示器出现死点或亮点 画面无显示/黑屏/无HDMI信号输入 首先应该检查的是显示器电源(真的有人弄掉电源…...
Error 1062 (23000): Duplicate entry ‘‘ for key ‘id‘`
目录 Error 1062 (23000): Duplicate entry for key id1. **问题分析**2. **解决方法****步骤 1:检查 id 字段的值****步骤 2:检查表结构****步骤 3:检查现有数据****步骤 4:检查插入逻辑****步骤 5:修改表结构&#…...
谈谈模板方法模式,模板方法模式的应用场景是什么?
一、模式核心理解 模板方法模式是一种行为设计模式,通过定义算法骨架并允许子类重写特定步骤来实现代码复用。 如同建筑图纸规定房屋结构,具体装修由业主决定,该模式适用于固定流程中需要灵活扩展的场景。 // 基础请求处理…...
未来蓉城:科技与生态共舞的诗意栖居-成都
故事背景 故事发生在中国四川成都的2075年,展现科技与自然深度交融的未来城市图景。通过六个充满想象力的生态装置场景,描绘市民在智慧城市中诗意栖居的生活状态,展现环境保护与人文传承的和谐共生。 故事内容 在电子竹林轻轨站,通…...
模仿axios的封装效果来封装fetch,实现baseurl超时等
因为要在cocos游戏项目里面发送网络请求获取数据,并且还有可能用到websocket发送请求,所以这里封装一个fetch放便使用: // fetch封装// 基础配置 const BASE_URL 你的url const TIMEOUT 5000// 请求封装 const http async (url: string, …...
Linux(CentOS10) gcc编译
本例子摘自《鸟哥的linux私房菜-基础学习第四版》 21.3 用make进行宏编译 书中的代码在本机器(版本见下)编译出错,改正代码后发布此文章: #kernel version: rootlocalhost:~/testmake# uname -a Linux localhost 6.12.0-65.el10.x86_64 #1…...
Design Compiler:语法检查工具dcprocheck
相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 dcprocheck是一个在Design Compiler存在于安装目录下的程序(其实它是一个指向snps_shell的符号链接,但snps_shell可以根据启动命令名判…...
根据日期格式化的常见规则和标准
根据日期格式化的常见规则和标准,2025年1月9日17:00可以正常格式化。具体分析如下: 1. 日期合法性验证 日期2025年1月9日不存在逻辑错误(如2月30日等非法日期),且时间17:00(24小时制)符合规范…...
macOS Chrome - 打开开发者工具,设置 Local storage
文章目录 macOS Chrome - 打开开发者工具设置 Local storage macOS Chrome - 打开开发者工具 方式2:右键点击网页,选择 检查 设置 Local storage 选择要设置的 url,显示右侧面板 双击面板,输入要添加的内容 2025-04-08ÿ…...
idea 的 WEB-INF 下没有 classes 编译文件,如何添加?
idea 打开项目却没有在 WEB-INF 下找到 classes 编译文件 添加流程如下: 1、选中 File ->Project Structure 后右击 2、选中 Modules ->选中项目 ->点击 Paths ->修改 output path为:项目绝对路径\WebRoot\WEB-INF\classes 3、修改完成后&…...
EasyExcel结合多线程+控制sheet页全量导出
业务分析 内部平台需要一个导出mysql数据到excel的方法,所以使用了EasyExcel 因为EasyExcel的sheet页是放到一个List里面的,如果把百万量级的数据放到sheet页中全量写入会有OOM风险,所以最终选择的方案是分sheet页写入 同时因为该平台是多…...
【学习笔记】RL4LLM
字数溢出,分了一半出来 上半段:LLMRL 文章目录 8 [RL4LLM] 理解 reasoning model Tokenizer 的 chat template,vllm inferencetokenizerchat templatedistill tokenizerqwen tokenizer apply chat templatevllm inference 9 [RL4LLM] PPO wo…...
在Windows搭建gRPC C++开发环境
一、环境构建 1. CMake Download CMake 2. Git Git for Windows 3. gRPC源码 git clone --recurse-submodules -b v1.67.1 --depth 1 --shallow-submodules https://github.com/grpc/grpc grpc-1.67.1二、使用CMake生成工程文件 mkdir cmake_build cd cmake_build cmake…...
NO.76十六届蓝桥杯备战|数据结构-单调栈|发射站|Largest Rectangle in a Histogram(C++)
什么是单调栈? 单调栈,顾名思义,就是具有单调性的栈。它依旧是⼀个栈结构,只不过⾥⾯存储的数据是递增或者递减的。这种结构是很容易实现的(如下⾯的代码),但重点是维护⼀个单调栈的意义是什么 …...
消息队列(Message Queue)简介
消息队列是一种进程间通信(IPC)机制,允许不同进程通过发送和接收消息进行 异步通信。它的核心特点包括: 解耦:消息队列解耦了生产者和消费者,简化了系统设计。 持久化存储:支持将消息存储在队列…...
动/静态库
1.先了解一下动静态库 上图可以看出来静态库就是由一堆进过链接阶段的.o文件组成的.a文件。在这里必须要强调的是库文件格式一定是libxxx.a/so在你进行路径查找使用的时候要去掉lib和后缀使用! 静态库 概念:在程序编译链接阶段,其代码被完整…...
KWDB创作者计划—边缘计算:从概念到落地的技术解读
引言 随着物联网(IoT)和人工智能(AI)的快速发展,数据量呈爆炸式增长,传统的云计算架构逐渐暴露出延迟高、带宽占用大等问题。边缘计算作为一种新兴的分布式计算范式,正在改变数据处理的方式。本…...
ubuntu根文件系统通过uMTP-Responder实现usb的MTP功能
实现mtp设备 添加服务 /home/flynn/firfly_rootfs/lib/systemd/system/adbd.service #start [Unit] Description Adbd for linux Beforerockchip.service[Service] Typeforking ExecStart/etc/init.d/adbd.sh start ExecStop/etc/init.d/adbd.sh stop ExecReload/etc/init.d…...