如何从浏览器打开MAUI macOS应用?配置URL Scheme后无效求解决方案
MAUI macOS 应用通过浏览器URL唤起的解决方案
第一步:修正Plist配置错误
你当前的plist配置存在键名错误,重复使用了CFBundleURLTypes,正确的键应为CFBundleURLRole来定义应用角色。修正后的配置如下:
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.xxx.xxxx</string> <key>CFBundleURLSchemes</key> <array> <string>fooo</string> </array> <key>CFBundleURLRole</key> <string>Viewer</string> </dict> </array>
第二步:在MAUI中处理URL唤起事件
- 修改MacCatalyst平台的
AppDelegate.cs(路径:Platforms/MacCatalyst/AppDelegate.cs),重写OpenUrl方法捕获URL:
using Foundation; using UIKit; namespace YourAppNamespace; [Register("AppDelegate")] public class AppDelegate : MauiUIApplicationDelegate { protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); public override bool OpenUrl(UIApplication application, NSUrl url, NSDictionary options) { var urlString = url.AbsoluteString; // 切换到MAUI主线程处理URL MainThread.BeginInvokeOnMainThread(() => { var app = (App)Application.Current; app.HandleOpenUrl(urlString); }); return base.OpenUrl(application, url, options); } }
- 在共享项目的
App类中添加URL处理逻辑:
public partial class App : Application { public App() { InitializeComponent(); MainPage = new MainPage(); } public void HandleOpenUrl(string url) { // 自定义URL解析与业务逻辑,示例:处理fooo://item/123这类链接 if (url.StartsWith("fooo://")) { var parts = url.Split(new[] { "://", "/" }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length > 1) { // 导航到对应页面 MainPage.Navigation.PushAsync(new DetailPage(parts[1])); } } } }
第三步:验证与排查
- 清理项目后重新构建部署到Mac设备
- 在浏览器地址栏输入
fooo://test测试唤起 - 若仍不生效,检查:
- plist修改已同步到部署包
CFBundleURLName与项目Bundle ID完全一致- 测试前关闭应用所有运行实例
内容的提问来源于stack exchange,提问作者Azharq92 syed
相关产品推荐
相关产品推荐

