You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:22:31