目录
一、配置
要通过 URL Scheme 实现从 App A 跳转到 App B,然后从 App B 返回到 App A,你可以按照以下步骤进行:
一、配置 App B 的 URL Scheme
首先,App B 需要支持 URL Scheme,以便 App A 能够调用它。
1、在 App B 中配置 URL Scheme
在 App B 的 Info.plist 文件中,注册一个唯一的 URL Scheme。例如,将 Scheme 命名为 appb。
打开 App B 的 Info.plist 文件。 添加以下配置:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>appb</string>
<key>CFBundleURLSchemes</key>
<array>
<string>appb123456</string>
</array>
</dict>
</array>
2、处理 URL 调用
在 App B 中的 AppDelegate 中,实现 URL Scheme 处理逻辑。
这个方法会处理从 App A 调用的 URL,并执行相应操作。App B被调用起来后会来到这个方法中。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
if ([url.scheme isEqualToString:@"appb123456"]) {
NSLog(@"App B launched with URL: %@", url.absoluteString);
// 处理传入的参数
}
return YES;
}
3、App A 跳转到 App B
在 App A 中,你需要构造一个 URL,并使用这个 URL Scheme 来跳转到 App B。
NSURL *url = [NSURL URLWithString:@"appb123456://xxxx/yyy?key=value"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
if (success) {
NSLog(@"Successfully launched App B.");
} else {
NSLog(@"Failed to launch App B.");
}
}];
} else {
NSLog(@"App B is not installed.");
}
4、LSApplicationQueriesSchemes 这个配置项是干什么用的?
LSApplicationQueriesSchemes 是 iOS 中的一个 Info.plist 配置项,用于声明你的应用可以查询哪些 URL Scheme(即哪些 URL Scheme 可以通过 canOpenURL: 方法检测是否已安装对应的应用)。在iOS 9 及以后,Apple 引入了隐私和安全机制,限制了应用可以查询的 URL Scheme 数量(50个)
没有在 Info.plist 中声明它要查询的 URL Scheme,调用 canOpenURL: 时会返回NO,即使目标应用已经安装。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>appb123456</string> <!-- App B 的 URL Scheme -->
<string>wechat</string> <!-- 微信的 URL Scheme,示例 -->
<string>alipay</string> <!-- 支付宝的 URL Scheme,示例 -->
</array>
二、说明
iOS9之前,app通过scheme方式被调起之后会来到该方法,已经废弃,需要兼容iOS9之前的话需要实现该方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
与上边方法类似,只是提供了更多的信息,iOS9时已经被废弃
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
iOS9及之后,app通过scheme方式被调起会来到该方法
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
通过Universal Links,App被调起会来到该方法
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler;
行者常至,为者常成!