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

来源:这里教程网 时间:2026-02-21 17:43:09 作者:

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侧:统一接收与路由分发

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

定义全局事件或使用
IApplication
OnResume
+ 自定义属性暂存URL
App.xaml.cs
OnResume
或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命名保持小写、无特殊字符,能省掉不少坑。

相关推荐

热文推荐