用途:指导在 .NET MAUI 应用中实现深度链接,重点覆盖 Android App Links 与 iOS Universal Links 两大平台方案,并给出常见错误与调试清单。
主要能力与要点:
- Android:IntentFilter 上需设置 AutoVerify = true,否则会弹出消歧对话框而非直接打开应用;必须在 OnCreate 与 OnNewIntent 中同时处理 intent,前者用于冷启动,后者用于应用已运行时的热启动,缺失任一场景都会导致链接静默失败;SHA-256 指纹需与当前测试构建的签名密钥一致,debug 与 release 密钥不同,需相应更新 assetlinks.json,否则验证静默失败。
- iOS:Universal Links 在模拟器中不工作,必须在真机测试;AASA 变更经 Apple CDN 传播最长约 24 小时,开发期可使用 ?mode=developer 查询参数或 CDN 诊断命令 swcutil dl -d example.com;需处理 FinishedLaunching、ContinueUserActivity、SceneWillConnect 三个入口点,遗漏任一会导致特定应用状态(冷启动、后台恢复、场景启动)下失败;Associated Domains 权限中必须带 applinks: 前缀。
使用方式:在 AppShell 构造函数中提前注册 Shell 路由,确保深度链接回调触发前路由已存在;Shell 导航需调度到主线程,使用 MainThread.BeginInvokeOnMainThread 包裹 GoToAsync。
适用场景:面向生产环境的 https:// 网页链接跳转。自定义 URI scheme(myapp://)不被验证,任意应用可注册同名 scheme,仅建议用于应用间通信。
限制与调试:文章提供调试清单,包括 Android 验证命令 adb shell pm get-app-links com.example.myapp,需确认状态为 verified 而非 ask;以及 AASA 文件路径 /.well-known/apple-app-site-association 需使用正确的 Team ID。具体实现细节以原文为准。