iOS App 本地提醒怎么做?2026 学生入门教程

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 文档

设置阶段:内容写明“提醒什么”,条件说明“何时提醒”

按这条操作顺序完成一次课程提醒练习:

  1. 在 Xcode 项目中导入 UserNotifications,选定一个实际任务,例如提醒用户复习已经录入的课程。
  2. 用户点击“设置提醒”时,先解释为什么需要通知,再请求所需授权。
  3. 根据授权结果继续或回退。未授权时保留待办功能并提示当前状态;已授权时再准备通知。
  4. 用 UNMutableNotificationContent 填写标题和正文。标题写清课程或任务,正文说明要做的动作,避免只写“提醒”。
  5. 创建触发条件,再把内容和条件组成 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 环境完成构建和检查;若你长期高频使用,或需要连接手边的实体设备,先比较自购方案会更合适。