技术问询:如何从iOS应用唤起LinkedIn Learning App或跳转App Store
在iOS应用中实现LinkedIn Learning的跳转逻辑(安装则打开,未安装则跳App Store)
嘿,这个需求在iOS开发里太常见了,我帮你梳理一下完整的实现步骤,分配置和代码两部分,保证你能快速搞定👇
前置准备:配置Info.plist
iOS 9及以后,系统限制了应用可以查询的第三方URL Scheme,所以第一步必须在你的Info.plist里添加允许查询的Scheme:
- 打开项目的
Info.plist文件 - 添加一个名为
LSApplicationQueriesSchemes的数组类型键 - 在数组里新增字符串元素:
linkedinlearning
这一步是核心前提,如果不配置,就算用户安装了LinkedIn Learning,你的应用也检测不到。
代码实现(Swift & Objective-C)
我们的逻辑优先级是:优先用Universal Links(体验更好,无弹窗)打开应用,失败则尝试URL Scheme,最后如果都不行,就跳转到App Store对应页面。
Swift 版本
import UIKit // 封装成工具函数,方便在任意页面调用 func openLinkedInLearning() { // 1. 优先尝试Universal Link(LinkedIn Learning的通用链接) guard let universalLink = URL(string: "https://www.linkedin.com/learning/") else { return } if UIApplication.shared.canOpenURL(universalLink) { UIApplication.shared.open(universalLink, options: [:], completionHandler: { success in if !success { // Universal Link打开失败,兜底用URL Scheme self.tryOpenWithScheme() } }) } else { tryOpenWithScheme() } } private func tryOpenWithScheme() { // 2. 尝试URL Scheme打开LinkedIn Learning guard let schemeURL = URL(string: "linkedinlearning://") else { return } if UIApplication.shared.canOpenURL(schemeURL) { UIApplication.shared.open(schemeURL, options: [:], completionHandler: nil) } else { // 3. 未安装应用,跳转到App Store guard let appStoreURL = URL(string: "itms-apps://itunes.apple.com/us/app/linkedin-learning/id1084807225?mt=8") else { return } UIApplication.shared.open(appStoreURL, options: [:], completionHandler: nil) } }
Objective-C 版本
#import <UIKit/UIKit.h> - (void)openLinkedInLearning { // 1. 优先尝试Universal Link NSURL *universalLink = [NSURL URLWithString:@"https://www.linkedin.com/learning/"]; if ([[UIApplication sharedApplication] canOpenURL:universalLink]) { [[UIApplication sharedApplication] openURL:universalLink options:@{} completionHandler:^(BOOL success) { if (!success) { [self tryOpenWithScheme]; } }]; } else { [self tryOpenWithScheme]; } } - (void)tryOpenWithScheme { // 2. 尝试URL Scheme NSURL *schemeURL = [NSURL URLWithString:@"linkedinlearning://"]; if ([[UIApplication sharedApplication] canOpenURL:schemeURL]) { [[UIApplication sharedApplication] openURL:schemeURL options:@{} completionHandler:nil]; } else { // 3. 跳转到App Store NSURL *appStoreURL = [NSURL URLWithString:@"itms-apps://itunes.apple.com/us/app/linkedin-learning/id1084807225?mt=8"]; [[UIApplication sharedApplication] openURL:appStoreURL options:@{} completionHandler:nil]; } }
关键注意事项
- 为什么优先用Universal Links?:iOS 10+使用URL Scheme打开第三方应用时,会弹出“是否允许打开XXX”的确认弹窗,而Universal Links(LinkedIn官方已配置好)能直接唤起应用,用户体验更流畅。
- App Store链接用
itms-apps://:这个协议会直接唤起App Store应用,而https://开头的链接会先打开Safari再跳转,体验差很多。 - 测试提示:一定要用真实设备测试,模拟器无法安装LinkedIn Learning,会直接跳转到App Store。
- 版本兼容:代码里的
open(_:options:completionHandler:)是iOS 10+API,如果需要兼容iOS 9,可以补充openURL:的兜底逻辑(不过现在iOS 9用户占比极低)。
内容的提问来源于stack exchange,提问作者Imran Qadir Baksh - Baloch




