iOS App 本地提醒怎么做?2026 学生入门教程
📋 本文目录
症状:待办 App 能保存作业,却不会在提醒时间通知你。
最快解法:先取得用户授权,再设置通知内容和触发条件,最后验收提醒结果,以及用户拒绝授权时的反馈。
正在做课程表、待办或学习计划 App 的学生,可以跟着完成一次本地提醒练习。
刚学 Swift 和 iOS 开发的初学者,可以借此理清权限、通知内容和触发条件的先后关系。
如果你主要使用 Windows 或学校电脑,也能据此判断何时需要 Mac 完成 Xcode 构建与验收。
开始前:设备安排的提醒,还是服务器发来的推送
先把需求说清楚:如果用户创建“今晚复习”后,App 已经知道提醒内容和时间,可以从本地通知开始。App 把提醒请求交给系统安排,不需要为了这条已知的课程提醒先搭建服务器。
如果提醒取决于服务器之后才知道的事件,例如老师发布新作业或账户收到新消息,就要考虑服务器推送。前者由 App 在设备上创建,后者由服务器发起,再通过 Apple 推送服务传送;两种通知的来源不同,通知展示的时间也不能当作精确计时器承诺。Apple 的 User Notifications 文档说明了本地通知与远程通知的基本区别,并指出系统不保证通知一定按预期时间送达。
| 课程需求 | 建议做法 | 匹配度评分 | 主要边界 |
|---|---|---|---|
| 提醒自己复习已录入的课程或提交作业 | 本地通知 | ★★★★★ | App 已知道内容和时间,仍要处理授权与系统设置 |
| 通知用户有新的服务器消息或协作事件 | 服务器推送 | ★★★★☆ | 需要服务端产生事件并发起通知 |
| 只确认待办内容已经保存 | App 内状态提示 | ★★★★★ | 不必为保存提示请求通知权限 |
评分表示对课程练习场景的匹配度,不代表送达速度或设备性能。第一次制作提醒功能时,本地通知通常更适合练习“授权、内容、触发条件、验收”这条完整流程。
授权阶段:解释用途,再请求许可
通知授权决定系统是否允许 App 使用提醒横幅、声音或图标标记等交互。Apple 建议在用户理解用途的场景中请求授权,例如用户刚创建第一条课程提醒时;首次请求后,系统会记录用户的选择,重复调用不会再次弹出同一首次授权提示。Apple 的通知授权说明和 requestAuthorization API 文档介绍了授权请求的调用方式与时机。
因此,不要在 App 刚启动、用户还不知道提醒用途时就弹出授权框。只请求项目实际会用到的权限;如果用户拒绝,待办列表仍应能保存和查看,页面也应说明通知未启用,而不是把拒绝当成程序故障。
用户还可能之后在系统设置中更改选择。每次进入提醒流程时,读取当前授权状态及允许的交互,再决定是否继续安排通知;UNUserNotificationCenter 的 notificationSettings() 可用于获取这些设置。读取通知设置的 API 文档
设置阶段:内容写明“提醒什么”,条件说明“何时提醒”
按这条操作顺序完成一次课程提醒练习:
- 在 Xcode 项目中导入
UserNotifications,选定一个实际任务,例如提醒用户复习已经录入的课程。 - 用户点击“设置提醒”时,先解释为什么需要通知,再请求所需授权。
- 根据授权结果继续或回退。未授权时保留待办功能并提示当前状态;已授权时再准备通知。
- 用
UNMutableNotificationContent填写标题和正文。标题写清课程或任务,正文说明要做的动作,避免只写“提醒”。 - 创建触发条件,再把内容和条件组成
UNNotificationRequest,交给UNUserNotificationCenter安排。
Apple 的本地通知调度说明展示了如何组合通知内容、触发条件与请求。简单理解,内容像是写给自己的便签,触发条件则是告诉系统什么时候把它拿出来。
下面的 Swift 示例用单次时间间隔触发器进行短暂测试。代码中的 5 秒只是测试设置,不代表通知一定在精确时刻显示;系统会尽力及时送达,但不保证送达时间。关于时间间隔触发器的参数,可查看 Apple 的初始化方法说明。
import UserNotifications
func scheduleStudyReminder() async {
let center = UNUserNotificationCenter.current()
do {
let granted = try await center.requestAuthorization(
options: [.alert, .sound]
)
guard granted else {
// 通知未获准,待办功能仍可使用。
return
}
let settings = await center.notificationSettings()
guard settings.authorizationStatus == .authorized else {
// 授权状态不符合预期,不显示“提醒已安排”。
return
}
let content = UNMutableNotificationContent()
content.title = "课程复习"
content.body = "打开待办,完成今天的复习计划。"
let trigger = UNTimeIntervalNotificationTrigger(
timeInterval: 5,
repeats: false
)
let request = UNNotificationRequest(
identifier: "study-reminder",
content: content,
trigger: trigger
)
try await center.add(request)
} catch {
print("提醒设置失败:\(error)")
}
}
如果你要安排重复提醒,先核对课程需求。时间间隔触发器在重复使用时,间隔需至少为 60 秒;课程任务完成或取消后,也要移除不再需要的待处理请求,避免旧提醒继续出现。以上限制见 Apple 的时间间隔触发器初始化说明。
常见疑问:权限变化和通知来源怎么处理
申请通知权限后,用户拒绝了怎么办?
继续允许用户添加、编辑和查看待办,并清楚说明通知目前未启用。不要反复请求授权,也不要把“提醒已安排”显示成成功状态。用户之后可能会在系统设置里更改选择;重新进入提醒流程时,先读取当前通知设置,再判断是否能安排通知。
标题正文和触发时间分别在哪里设置?
标题、正文等信息写入 UNMutableNotificationContent,触发时间由触发器描述,例如经过一段时间后触发,或按日历日期匹配。UNNotificationRequest 把通知内容与触发条件组合起来,再交给通知中心安排。这样拆开后,改提醒文字和改提醒时间不会混成同一件事。
哪类提醒更适合交给服务器发起?
如果 App 已经知道作业截止时间,设备本地安排通常就能满足课程练习。若提醒依赖服务端后来发生的事件,例如新消息或多人协作状态变化,则由服务器发起的远程通知更合适;单靠设备无法预先知道那个事件何时发生。
系统权限打开了,为什么 App 前台时没看到横幅?
App 在前台时,通知会先交给 App 处理;你需要检查是否设置了通知中心代理,并在 userNotificationCenter(_:willPresent:withCompletionHandler:) 中决定如何呈现。Apple 的通知处理说明解释了前台通知的处理方式。提交提醒请求成功,不代表 App 前台必定显示横幅。
触发阶段:分别检查前台与后台结果
验收时分别观察 App 正在使用和不在前台的情形。前台通知交给 App 处理;你若希望系统显示提醒,就需要在代理回调中选择相应的呈现方式。App 在后台或未运行时,系统会根据通知请求处理提醒,但结果仍受授权状态与系统设置影响。
如果看不到提醒,按这个顺序排查:
- 检查提交通知请求时有没有错误,并确认触发条件符合测试安排。
- 重新读取通知授权状态,确认提醒、声音等交互没有被关闭。
- 检查通知标题和正文是否有内容,以及系统设置是否允许该 App 通知。
- 分别测试前台与后台结果;前台不显示时,检查代理回调的实现。
- 记录实际运行设备、系统设置与观察结果,再对照课程要求定位问题。
验收阶段:允许、拒绝和再次测试都要通过
完成代码后,不要只看项目能否编译。用下面的验收条件检查完整流程:
- ✅ 允许通知后,App 提交包含正确内容和触发条件的请求。
- ✅ 拒绝通知后,页面明确说明提醒未启用,待办和课程表仍可使用。
- ✅ 用户更改系统设置后,App 再次进入提醒流程能读取新的授权状态。
- ✅ 分别检查前台与后台表现,并确认前台呈现逻辑符合预期。
- ✅ 课程任务完成或删除后,检查旧请求是否还需要;不需要时将其取消。
- ✅ 验收记录对应真实运行环境,不把一次测试结果写成所有设备上的保证。
决策条件:若课程只要求提醒设备上已经录入的任务,先用本地通知完成练习;若触发取决于服务器之后发生的事件,再评估服务器推送;若用户拒绝通知权限,则保留核心功能并明确提示状态,不把通知流程当作待办功能的前置条件。
如果你主要使用 Windows 或受限制的学校电脑,缺点是不能在现有环境直接完成原生 Xcode 构建与运行验收,还可能遇到安装权限不足、调试环境不一致的问题。确认课程确实需要 Xcode 后,可以先了解 MacDate 的 Mac 学习环境;如果你在比较长期自购方案,也可以参考 Mac mini M4 价格指南。短期课程练习或临时验收时,按需租用 Mac 能让你进入 macOS 环境完成构建和检查;若你长期高频使用,或需要连接手边的实体设备,先比较自购方案会更合适。