CallbackURLKit - 应用间通信

License Platform Language Issues Cocoapod

Become a Patron! Buy me a coffee

开始在应用中集成 URL scheme,为什么不遵守 x-callback-url 规范呢。

CallbackURLKit.register(action: "play") { parameters, ... in
  self.player.play()
}

想要与众多已经实现了 x-callback-url 的其他应用交互,你也可以使用此框架。

CallbackURLKit.perform(action: "open", urlScheme: "googlechrome-x-callback",
                             parameters: ["url": "http://www.google.com"])

用法

在其他应用上执行操作

在你的代码中导入 CallbackURLKit 后,你可以在任何地方调用

try CallbackURLKit.perform(action: "actionName", urlScheme: "applicationName",
    parameters: ["key1": "value1"])

你也可以使用一个新的 Manager 或共享实例

try Manager.shared.perform(action: "actionName", urlScheme: "application-name",
    parameters: ["key1": "value1"])

在 iOS9 中声明目标应用的 URL scheme

你必须在 Info.plist 文件中的 LSApplicationQueriesSchemes 键(字符串数组)下,将你的应用想要查询的任何 URL scheme 加入白名单

xcode-white-list

创建一个客户端类

或者,你可以创建一个新的 Client 对象,在其中定义目标应用的 URL scheme。

let client = Client(urlScheme: "application-url-scheme")
try client.perform(action:(..)

或者创建一个新的 Client 类,添加一些实用方法,这些方法可以隐藏实现细节并允许进行一些参数检查。

class GoogleChrome: Client {
  init() {
    super.init(urlScheme:"googlechrome-x-callback")
  }
  func open(url: String, ...) {
    self.perform(action: "open", parameters: ["url": url], ...)
  }
}

查看 Clients 目录中的完整示例。(你可以提交 PR 来添加新的 Client 类)

你可以使用 client.appInstalled 检查应用程序是否响应 URL scheme

使用回调闭包

回调允许你从目标应用程序接收数据,但在执行此操作之前,你需要向你的应用添加 x-callback-url 支持

然后你可以指定 3 个 x-callback 中的一个:success、failure 和 cancel。

try client.perform(action: "actionName",
    onSuccess: { parameters in
    },

onFailure: { error in
    },
    onCancel: {
    }
)

向你的应用添加 x-callback-url 支持

注册你的 URL scheme

应用可以声明它们支持的任何自定义 URL scheme。使用 Info 标签的 URL Types 部分来指定你的应用处理的自定义 URL scheme。 xcode

或者直接在 Info.plist 文件中注册你的 URL Scheme

Apple 文档:使用 URL Schemes 与应用通信

使用 URL scheme 设置框架

然后你必须将 scheme 设置到此框架管理器

let manager =  Manager.shared
manager.callbackURLScheme = "my-application-scheme"
// or get the first from Info.plist using utility method
manager.callbackURLScheme = Manager.urlSchemes?.first

处理传入的 URL

最后,要处理传入的 URL,你的应用代理应该实现以下方法。

在 iOS 上

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    manager.handleOpen(url: url)
    return true
}

在 OSX 上,如果你对 URL 事件没有其他需求,你可以让管理器完成所有工作,方法是在 applicationDidFinishLaunching 中调用 Manager.instance.registerToURLEvent() 方法

添加新操作

客户端应用程序将使用以下 URL 结构与你的应用程序交互。

[url-scheme]://x-callback-url/[action]?[x-callback 参数]&[action 参数]

一个操作由其名称(URL 路径)和可选的操作参数定义。

manager["myActionName"] = { parameters, success, failure, cancel in
  // action code, using or not the parameters
  ...
  // notify the client app with one of the callback
  success(nil) // or failure(exception)
}

你也可以使用以下方式在共享的 Manager 实例上注册一个操作

CallbackURLKit.register(action: "myActionName") { parameters, success, failure, cancel in

}

安装

使用 CocoaPods

CocoaPods 是 Objective-C 和 Swift 的集中式依赖管理器。点击此处了解更多。

  1. 将项目添加到你的 Podfile

    use_frameworks!
    
    pod 'CallbackURLKit'
  2. 运行 pod install 并打开 .xcworkspace 文件以启动 Xcode。

客户端

要获取已实现的 Clients,请使用其中一个 subspec

pod 'CallbackURLKit/GoogleChrome'
pod 'CallbackURLKit/Ulysses' // https://ulyssesapp.com

链接