如何从.NET 7 iOS应用启动MAUI应用并获取返回数据
解决.NET 7 iOS应用启动.NET MAUI应用并返回数据的问题
你目前的核心问题是搞混了两个关键配置的作用范围,以下是明确的配置步骤和代码调整方案:
1. .NET MAUI应用(被启动的目标应用)的URL Scheme配置
MAUI应用需要在自身的info.plist中注册能响应的URL Scheme,用到的键是CFBundleURLTypes,而非LSApplicationQueriesSchemes。具体配置如下:
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>mymauiappscheme</string> <!-- 替换为你自定义的Scheme名称 --> </array> <key>CFBundleURLName</key> <string>com.yourcompany.yourmauiapp</string> <!-- 替换为MAUI应用的Bundle ID,确保唯一 --> </dict> </array>
这个配置的作用是告诉iOS:该MAUI应用可以接收以mymauiappscheme://开头的URL请求。
2. .NET 7 iOS应用(发起启动的源应用)的配置
LSApplicationQueriesSchemes是源应用用来声明“我需要查询并启动某个Scheme的应用”的配置,必须放在iOS应用的info.plist里,而非MAUI应用中。配置示例:
<key>LSApplicationQueriesSchemes</key> <array> <string>mymauiappscheme</string> <!-- 和MAUI应用配置的Scheme完全一致 --> </array>
只有添加这个配置,你的iOS应用调用CanOpenUrl时才会返回true,允许启动目标MAUI应用。
3. 源iOS应用启动MAUI应用的代码调整
可以在启动时携带参数,方便MAUI应用接收上下文:
var targetUrl = new NSUrl("mymauiappscheme://?requestId=123&content=test"); if (UIApplication.SharedApplication.CanOpenUrl(targetUrl)) { // 启动MAUI应用 UIApplication.SharedApplication.OpenUrl(targetUrl); }
4. MAUI应用接收参数并返回数据
在MAUI应用的App.xaml.cs中重写OpenUrlAsync方法,解析传入的参数,处理后返回数据给源iOS应用:
protected override async Task OpenUrlAsync(Uri uri, BrowserLaunchOptions options) { // 解析URL中的查询参数 var queryParams = System.Web.HttpUtility.ParseQueryString(uri.Query); var requestId = queryParams["requestId"]; var content = queryParams["content"]; // 这里编写你的业务逻辑处理代码 // 处理完成后,通过源iOS应用的Scheme返回结果 var sourceAppScheme = "myiosscheme"; // 替换为源iOS应用注册的Scheme var returnUrl = new NSUrl($"{sourceAppScheme}://?result=success&requestId={requestId}"); UIApplication.SharedApplication.OpenUrl(returnUrl); return await base.OpenUrlAsync(uri, options); }
5. 源iOS应用接收返回数据
在iOS应用的AppDelegate.cs中重写OpenUrl方法,接收MAUI应用返回的数据:
public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options) { var queryParams = System.Web.HttpUtility.ParseQueryString(url.Query); var result = queryParams["result"]; var requestId = queryParams["requestId"]; // 这里处理MAUI返回的结果数据 return true; }
常见错误说明
你之前尝试在MAUI应用中配置LSApplicationQueriesSchemes是无效的,因为这个键的作用是让源应用获得查询目标Scheme的权限,而非给目标应用注册Scheme。目标应用必须通过CFBundleURLTypes来注册自己的Scheme,这样iOS才能识别并允许其他应用启动它。
内容的提问来源于stack exchange,提问作者user3844333
相关产品推荐
相关产品推荐

