MAUI如何处理深链接 Deep Linking教程

1次阅读

maui通过各平台原生机制实现深链接,android需配置intent-Filter并重写onnewintent,ios推荐universal links并配置aasa文件与associated domains,maui侧统一用shell导航并解析url参数。

MAUI如何处理深链接 Deep Linking教程

MAUI本身不直接提供统一的深链接(Deep Linking)抽象层,但支持通过各平台原生机制实现,并可封装为跨平台调用逻辑。关键在于:注册自定义URI Scheme(Android/iOS通用)或配置通用链接(iOS专属),再在应用启动或前台切换时捕获并解析URL。

Android端:注册自定义Scheme并接收Intent

Platforms/Android/AndroidManifest.xml中添加<intent-filter></intent-filter>

  • 确保Activity(通常是MainActivity)包含以下配置:
<intent-filter>   <action android:name="android.intent.action.VIEW" />   <category android:name="android.intent.category.DEFAULT" />   <category android:name="android.intent.category.BROWSABLE" />   <data android:scheme="myapp" /> </intent-filter>
  • Platforms/Android/MainActivity.cs中重写OnNewIntent,获取传入URI:
  • 调用base.OnNewIntent(intent)后,用intent.Data.ToString()提取完整URL(如myapp://notes/123
  • 建议将解析逻辑抽离到共享服务,例如IDeepLinkHandler,便于统一调度导航

iOS端:支持Universal Links(推荐)与Custom URL Scheme

Universal Links更安全、不可被其他App劫持,需两步配合:

  • 服务器端:在域名根目录部署.well-known/apple-app-site-association文件(无扩展名,json格式),声明你的App ID和可处理路径
  • 客户端:在Platforms/iOS/Info.plist中启用Associated Domains,添加applinks:yourdomain.com
  • Platforms/iOS/AppDelegate.cs中实现ContinueUserActivity方法,从NSUserActivity中提取WebpageURL
  • 若退而求其次用Custom Scheme(如myapp://),需在Info.plist中配置CFBundleURLTypes,并在OpenUrl回调中处理

MAUI侧:统一接收与路由分发

不要在各平台代码里直接跳转页面,而是触发一个跨平台事件

  • 定义全局事件或使用IApplicationOnResume + 自定义属性暂存URL
  • App.xaml.csOnResume或Shell初始化后检查是否有待处理链接
  • Shell.Current.GoToAsync()Navigation.PushAsync()导航到对应页面,参数从URL query中解析(如?id=456
  • 可结合[QueryProperty]特性自动绑定参数,减少手动解析

调试与验证要点

深链接容易因配置遗漏失败,务必检查:

  • Android模拟器或真机上用adb shell am start -W -a android.intent.action.VIEW -d "myapp://open?tab=settings"测试
  • iOS真机上用safari访问https://yourdomain.com/path,确认是否自动唤起App(Universal Links)
  • 确保Debug模式下也能捕获链接——某些平台只在冷启动时触发,热启动需额外监听
  • 首次安装后,iOS可能缓存旧的AASA文件,修改后需删除App重装或等待24小时

基本上就这些。不复杂但容易忽略配置细节,尤其是iOS的域名验证和Android的intent-filter位置。把Scheme命名保持小写、无特殊字符,能省掉不少坑。

text=ZqhQzanResources