用途:当 MAUI 应用需要定时本地提醒、远程推送通知,或通过 URL 打开应用并跳转到指定内容时使用本技能。
主要能力:区分本地通知调度、推送令牌注册、通知点击处理、自定义 URI 方案与已验证网页链接等入口;在写应用逻辑前先添加平台声明与权限;在合适时机申请通知权限并处理被拒绝状态;将通知点击与深度链接统一归一到一个应用导航服务,用 Shell 路由或显式导航抽象进行跳转;为令牌注册、载荷解析、冷启动与恢复处理添加诊断。
推送要点:Android 后端使用官方 FCM HTTP v1 / Firebase Cloud Messaging v1 API 与 service-account OAuth 凭据,不使用旧版 server key;OAuth 2.0 是凭据流程而非 API 版本。iOS 使用 APNs 设备令牌,需对齐沙箱/生产环境。Azure 通知中心为可选基础设施,仅在需要代理安装、标签、模板或多平台分发时使用。登录后上传刷新后的令牌/安装 ID 并关联用户,登出时解除关联。推送载荷不得包含 PII、访问令牌或机密内容,只发送路由/实体 ID,应用打开后再获取敏感数据。
深度链接:自定义 URI 方案用于应用私有回调或简单打开(如 myapp://orders/42),需 Android intent filter、iOS/Mac Catalyst CFBundleURLTypes、Windows 协议注册;Android App Links 使用带 autoVerify 的 intent filter 与托管的 assetlinks.json;iOS Universal Links 使用 Associated Domains 权限与托管的 apple-app-site-association。用一个解析器接受所有启动来源:冷启动 URL、后台恢复 URL、本地通知点击、推送通知点击。
用法与限制:将原生启动回调接入统一链接处理器,Android 在 OnCreate 与 OnNewIntent 中读取 Intent.Data,iOS 使用 OpenUrl;已验证 HTTPS 链接可重写 App.OnAppLinkRequestReceived(Uri)。冷启动链接或通知点击需排队等待 MAUI 导航界面就绪,不要在 Shell.Current 存在前调用 Shell.Current.GoToAsync;排队解析期间显示待处理状态,到达后聚焦目标标题或用 SemanticScreenReader.Announce 播报。
排查与验证:确认包 ID/bundle ID 与 FCM/APNs/Azure 注册一致、APNs 环境与构建匹配、Android 通知渠道在发布前创建、Android 13+ 运行时权限已授予、关联文件可无重定向访问、链接载荷映射到已注册 Shell 路由;验证权限与平台声明齐全、令牌上传刷新与登出解除、载荷不含敏感信息、冷启动与恢复均可用。