gpt4 book ai didi

macos - 如何处理默认 URL 方案

转载 作者:行者123 更新时间:2023-12-03 16:01:19 31 4
gpt4 key购买 nike

我想在我的应用程序中构建 URI(或 URL 方案)支持。

我在 + (void)initialize 中执行了 LSSetDefaultHandlerForURLScheme() ,并在 info.plist 中设置了特定的 URL 方案。所以我有没有 Apple ScriptApple Events 的 URL 方案。

当我在我最喜欢的浏览器中调用 myScheme: 时,系统会激活我的应用程序。

问题是,当scheme被调用时如何处理。或者更好地说:当调用 myScheme: 时,如何定义我的应用程序应该执行的操作。

是否有我必须实现的特殊方法或者我必须在某处注册一个方法?

最佳答案

正如您提到的 AppleScript,我想您正在 Mac OS X 上工作。

注册和使用自定义 URL 方案的一个简单方法是在 .plist 中定义该方案:

<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>URLHandlerTestApp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>urlHandlerTestApp</string>
</array>
</dict>
</array>

要注册该方案,请将其放入 AppDelegate 的初始化中:

[[NSAppleEventManager sharedAppleEventManager]
setEventHandler:self
andSelector:@selector(handleURLEvent:withReplyEvent:)
forEventClass:kInternetEventClass
andEventID:kAEGetURL];

每当您的应用程序通过 URL 方案激活时,定义的选择器就会被调用。

事件处理方法的 stub ,显示如何获取 URL 字符串:

- (void)handleURLEvent:(NSAppleEventDescriptor*)event
withReplyEvent:(NSAppleEventDescriptor*)replyEvent
{
NSString* url = [[event paramDescriptorForKeyword:keyDirectObject]
stringValue];
NSLog(@"%@", url);
}

Apple 的文档:Installing a Get URL Handler

更新我刚刚注意到在 applicationDidFinishLaunching: 中安装事件处理程序的沙盒应用程序存在问题。启用沙箱后,当通过单击使用自定义方案的 URL 启动应用程序时,不会调用处理程序方法。通过提前安装处理程序,在 applicationWillFinishLaunching: 中,该方法将按预期被调用:

- (void)applicationWillFinishLaunching:(NSNotification *)aNotification
{
[[NSAppleEventManager sharedAppleEventManager]
setEventHandler:self
andSelector:@selector(handleURLEvent:withReplyEvent:)
forEventClass:kInternetEventClass
andEventID:kAEGetURL];
}

- (void)handleURLEvent:(NSAppleEventDescriptor*)event
withReplyEvent:(NSAppleEventDescriptor*)replyEvent
{
NSString* url = [[event paramDescriptorForKeyword:keyDirectObject]
stringValue];
NSLog(@"%@", url);
}
<小时/>

在 iPhone 上,处理 URL 方案激活的最简单方法是实现 UIApplicationDelegate 的 application:handleOpenURL: - Documentation

关于macos - 如何处理默认 URL 方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1991072/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com