CallbackURLKit - 应用间通信
在应用中开始集成URL方案,为什么不遵循 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 方案
必须在 Info.plist 下 LSApplicationQueriesSchemes 键(一个字符串数组)中将您应用想要查询的任何 URL 方案列入白名单。
创建客户端类
或者,您可以创建一个新的Client
对象,在该对象中您可以为目标应用的URL方案进行定义。
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], ...)
}
}
在客户端目录中查看完整示例。(您可以通过PR添加新的Client
类)
您可以使用client.appInstalled
检查应用是否对URL方案做出响应。
使用回调闭包
回调允许您从目标应用接收信息或状态,但在这样做之前,您需要为您的应用添加 x-callback-url 支持。
然后,您可以指定以下三个 x-callbacks 之一:成功、失败和取消
try client.perform(action: "actionName",
onSuccess: { parameters in
},
onFailure: { error in
},
onCancel: {
}
)
为您的应用添加 x-callback-url 支持
注册您的 URL 方案
应用程序可以声明它们支持的任何自定义 URL 方案。使用信息标签的 URL 类型部分来指定您的应用程序处理的自定义 URL 方案。
或者在 Info.plist 文件中直接注册您的 URL 方案
- 添加 URL Types,然后在项目 0
- 将文档角色设置为 Editor。
- URL 标识符设为您的应用程序包标识符。
- 创建一个 URL Schemes 字段,并将项目 0 设置为要使用的 URL Scheme。
Apple 文档: 使用 URL 方案与应用程序通信。
使用URL方案设置框架
然后您必须将方案设置为此框架管理器
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 parameters]&[action parameters]
动作由其名称(URL路径)定义,并可选的眼睛blink action parameters
。
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的集中化依赖管理器。请访问此处了解更多信息。
-
将项目添加到您的Podfile中。
use_frameworks! pod 'CallbackURLKit'
-
运行
pod install
并打开.xcworkspace
文件以启动Xcode。
客户
要获取已实现的客户,请使用以下子规格之一
pod 'CallbackURLKit/GoogleChrome'
pod 'CallbackURLKit/Ulysses' // https://ulyssesapp.com