You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac端应用通过点击通知启动时如何捕获对应UserNotification内容

Mac端点击通知冷启动应用捕获通知内容解决方案

核心遗漏排查点

  • 代理注册时机错误
    必须在applicationDidFinishLaunching:执行的最开始阶段(优先于所有其他业务初始化逻辑)完成UNUserNotificationCenter.currentNotificationCenter.delegate的赋值,同时完成通知类别、权限的注册。如果注册时机晚于系统触发通知响应的时间点,didReceiveNotificationResponse回调会被系统直接丢弃,不会触发。
  • 误用iOS平台的launchOptions键名
    Mac端AppKit框架下,launchOptions中通知对应的键名和iOS不通用:
    • 远程通知对应键为NSApplicationLaunchOptionsRemoteNotificationKey
    • 本地通知对应键为NSApplicationLaunchOptionsLocalNotificationKey
      直接使用iOS的UIApplicationLaunchOptionsRemoteNotificationKey会读取不到值,出现launchOptions返回空的假象。
  • getDeliveredNotificationsWithCompletionHandler调用时机错误
    该接口必须在UNUserNotificationCenter代理注册完成、通知权限申请通过之后调用,提前调用会返回空数组。冷启动场景下调用该接口时,用户点击过的通知只要还未被系统从通知中心清除,就可以正常读取到内容。
  • Catalyst适配特殊要求
    如果是iOS项目编译为Mac Catalyst应用,需要额外在Signing & Capabilities中添加「Background Modes」能力,勾选「Remote notifications」选项,否则冷启动点击推送通知的事件不会传递到应用层。

验证流程

  1. 清空应用缓存,完全退出应用
  2. 触发本地/远程通知后点击通知启动应用
  3. 在didFinishLaunchingWithOptions中先打印完整launchOptions字典,确认是否包含通知对应的key
  4. 优先注册通知代理后,等待300ms再调用getDeliveredNotificationsWithCompletionHandler打印返回结果
  5. 确认didReceiveNotificationResponse回调是否在代理注册完成后触发

内容的提问来源于stack exchange,提问作者Lucian Thorr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:45:03