Cocoa:让 App 支持 URL Scheme

2,367 阅读2分钟

iPhone 用户应该对 URL Scheme 不会陌生,特别是 Workflow 这个应用把 URL Scheme 功能用到了极致。还不是很熟悉的朋友可以围观少数派的这篇文章《URL Schemes 使用详解》

和 iOS app 一样,macOS 的 app 也可以支持 URL Scheme,CurrencyX 1.4 版本中,我们为 app 增加了下面三种 URL 的支持:

currencyx://x-callback-url/list?amount=100&base=cny
currencyx://x-callback-url/trend?code=cny|usd
currencyx://x-callback-url/search?key=cny

用户可以通过 URL scheme 来填充数据,查看趋势图和搜索了,普通用户可能没什么用,一些 app 高级玩家应该会需要。

配置 Scheme

这个和 iOS 里的一样,不啰嗦了

接收 Apple Event

这一步和 iOS 是不一样的,但也很简单,直接上代码:

func applicationWillFinishLaunching(notification: NSNotification){
    NSAppleEventManager.sharedAppleEventManager().setEventHandler(self, andSelector:#selector(handleGetURLEvent(_:  withReplyEvent:)), forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL))
}

@objc func handleGetURLEvent(event: NSAppleEventDescriptor!, withReplyEvent: NSAppleEventDescriptor!) {
    if let urlString = event.paramDescriptorForKeyword(AEKeyword(keyDirectObject))?.stringValue, url = NSURL(string: urlString) {
        // 解析出参数,do what you want       
    }
}

注意

你需要在applicationWillFinishLaunching里面注册 event handler 而不是applicationDidFinishLaunching,如果是后者,当 App 没有启动时接收到 URL Scheme 的 event,是不会进入到你的方法里的。

x-callback-url

上面步骤结束后,你就可以通过 currencyx://xxx?key=value 这样的 URL 来和 app 通信的,但是没有一个规范的话,每个开发者都随意给自己的 app 定一个,那就百花齐放了,x-callback-url 的出现就是给这个事情来一个标准,实现了遵守这个规范的 scheme 控制的 app 就能愉快的互相调用了。简单的说就是遵循下面这种格式: [scheme]://[host]/[action]?[x-callback parameters]&[action parameters]

详细内容可以访问: x-callback-url 1.0 DRAFT, R3 了解

第三方库

了解了原理之后,推荐一个第三方库来做这件事情:phimage / CallbackURLKit

参考资料

本文比较简单,happy coding 🍉

支持我们

  • SalesX 是给 Apple 开发者使用的菜单栏工具,第一时间把 app 销售情况推送给你,7 天免费试用
  • CurrencyX 是 Mac 上小而美的汇率 app

如果你觉得文章对你有帮助,可以买一个支持我们

关注我们公众号,获取最新文章推送