iOS - URL Scheme
2021-06-17 本文已影响0人
ienos
一、关于 URL 在 iOS 中的结构
[Scheme]://[Host]/[Path]?[Query]
例如: URLDemoApp://x-callback-url/gohome?x-success=otherapp://
-
url.absoluteString
-URLDemoApp://x-callback-url/gohome?x-success=otherapp://
-
url.relativeString
-URLDemoApp://x-callback-url/gohome?x-success=otherapp://
-
url.scheme
-URLDemoApp
-
url.host
-x-callback-url
-
url.path
-/gohome
-
url.query
-x-success=otherapp://
-
url.pathComponents
-["/", "gohome"]
-
url.lastPathComponent
-gohome
>> 如何拆分 url.query 中的所有参数
- Swift 代码
// 遍历所有参数
for parameter in url.query?.components(separatedBy: "&") ?? [] {
let pairComponents = parameter.components(separatedBy: "=")
// key
let key = pairComponents.first?.removingPercentEncoding
// value
let value = pairComponents.last?.removingPercentEncoding
}
二、A 如何跳转 XCallbackURL
利用 URL Scheme 协议,定义应用之间进行跳转 Scheme 就是 URL 最初的位置 [Scheme]://[Host]/[Path]?[Query]
在 iOS 系统中,可以通过 URL 的 Scheme 找到对应的应用,例如标识 XCallbackURL 的 Scheme 为 xcallback
>> 如何设置 XCallbackURL 对应的 Scheme(一对多,可以添加多个)
-
方式一 在 Target 中设置
Scheme - 方式二 在 info.plist 的 Source Code 中设置
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.agiletortoise.xcallback</string>
<key>CFBundleURLSchemes</key>
<array>
<string>xcallback</string>
</array>
</dict>
</array>
设置完 XCallbackURL 对应的 URL Scheme,之后,可以在 A 中添加跳转代码,然后跳转到 XCallbackURL
>> 在 A 项目中添加跳转代码
// canOpenURL 需要在 info.plist 中添加白名单,才会返回 true
/* info.plist -> Source Code
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
*/
// url: xcallback://
if([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
NSLog(@"Unable to open url");
}
三、A 跳转到 B,B 的处理逻辑
- A 唤起 B,会回调 B 中的 AppDelegate 以下的代理方法
// B 的 AppDelegate
// iOS 9 之后废弃
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
// sourceApplication 传递的是 app id
// B 的处理逻辑
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
// B 的处理逻辑
}
四、A 跳转到 B,B 处理完逻辑后,跳转 A
使用 x-callback-url 规范,规定 URL 结构,然后进行在 B 进行对应的代码处理
x-callback-url 定义的格式如下
[scheme]://[host]/[action]?[x-callback parameters]&[action parameters]
关于 x-callback parameters
-
x-source
- A 的应用名称 -
x-success
- 当 A 跳转 B 并 B 处理成功,B 会打开的 url -
x-error
- 当 A 跳转 B 并 B 处理失败, B 会打开的 url -
x-cancel
- 当 A 跳转 B 并 B 取消时,B 会打开的 url
>> 参考资料