應(yīng)用跳轉(zhuǎn).png
- 場(chǎng)景需求:一個(gè)應(yīng)用A(以news應(yīng)用為示例)跳轉(zhuǎn)到另外一個(gè)應(yīng)用B(以weChat為示例),常見需求如下
- 1.應(yīng)用推薦
- 2.支付寶支付
- 3.第三方登錄
- 4.微信分享
- 注意:iOS9中打開一個(gè)應(yīng)用程序的URL必須配置info.plist文件
- 添加LSApplicationQueriesSchemes的key
- 添加對(duì)應(yīng)url的scheme
一: 打開系統(tǒng)的應(yīng)用程序
打開打電話應(yīng)用程序
URL:tel://電話號(hào)碼
打開發(fā)短信應(yīng)用程序
URL:sms://電話號(hào)碼
打開系統(tǒng)的設(shè)置界面,必須先在info.plist中配置URL Schemes
在URL Types中添加prefs
打開Wifi設(shè)置
URL:prefs:root=WIFI
打開定位服務(wù)
URL:prefs:root=LOCATION_SERVICES
打開藍(lán)牙服務(wù)
URL:prefs:root=Bluetooth
打開FaceTime
URL:prefs:root=FACETIME
打開音樂
URL:prefs:root=MUSIC
打開墻紙?jiān)O(shè)置
URL:prefs:root=Wallpaper
配置如圖下圖
sc.png
- 分析:核心代碼:
[[UIApplication sharedApplication] openURL:url]
一:應(yīng)用A跳轉(zhuǎn)應(yīng)用B
1.界面搭建如圖
設(shè)置.png
2.A應(yīng)用打開B應(yīng)用的方法
- (IBAction)jumpToweChat:(id)sender {
NSURL *url = [NSURL URLWithString:@"weixin://"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
}
- (IBAction)jumpToFriends:(id)sender {
NSURL *url = [NSURL URLWithString:@"weixin://session?news"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
}
- (IBAction)jumpToTimeLIne:(id)sender {
NSURL *url = [NSURL URLWithString:@"weixin://timeLine?news"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
}
2.設(shè)置應(yīng)用A和應(yīng)用B的URL Types中的URL Schemes
A.png
B.png
3.在應(yīng)用B中監(jiān)聽跳轉(zhuǎn),進(jìn)行判斷,執(zhí)行不同的跳轉(zhuǎn)
- 在AppDelegate中實(shí)現(xiàn)下面的方法監(jiān)聽
// 已過期
//- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
// 已過期
//- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
/**
* 通過別的應(yīng)用打開我們的應(yīng)用時(shí)會(huì)來到這里
* @param url 通過什么URL打開的
* @param sourceApplication 打開我們應(yīng)用的sourceApplication
*/
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
// 1.獲取通過那一個(gè)URL打開我的應(yīng)用程序
NSString *urlStr = url.absoluteString;
// 2.取出window的根控制器
UINavigationController *rootNav = (UINavigationController *)[UIApplication sharedApplication].keyWindow.rootViewController;
// 首先回到根控制器
[rootNav popToRootViewControllerAnimated:NO];
// 3.取出MainViewController,使用主要控制器就可以跳轉(zhuǎn)到另外兩個(gè)控制器
ViewController *rootVc = rootNav.childViewControllers.firstObject;
// 傳值
rootVc.urlPath = urlStr;
if ([urlStr containsString:@"session"]) { // 好友界面
[rootVc performSegueWithIdentifier:@"session" sender:nil];
}else if ([urlStr containsString:@"timeLine"]) {// 朋友圈界面
[rootVc performSegueWithIdentifier:@"timeLine" sender:nil];
}
return YES;
}
4.從應(yīng)用B跳轉(zhuǎn)到應(yīng)用A
// 這里用storyboard做的,監(jiān)聽程序的跳轉(zhuǎn)
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"session"]) {
SessionViewController *vc = segue.destinationViewController;
vc.urlPath = self.urlPath;
}else if ([segue.identifier isEqualToString:@"timeLine"]) {
TimeLineViewController *vc = segue.destinationViewController;
vc.urlPath1 = self.urlPath;
}
}
5.微信朋友圈界面設(shè)置
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"微信朋友圈";
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(clickLeftButton)];
}
- (void)clickLeftButton
{
// 截取字符串,拿到scheme
NSInteger location = [self.urlPath1 rangeOfString:@"?"].location;
NSString *scheme = [self.urlPath1 substringFromIndex:location + 1];
// 通過scheme返回新聞
NSString *news = [NSString stringWithFormat:@"%@://", scheme];
NSURL *newsUrl = [NSURL URLWithString:news];
if ([[UIApplication sharedApplication] canOpenURL:newsUrl]) {
[[UIApplication sharedApplication] openURL:newsUrl];
}
}
6.微信好友界面設(shè)置
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"微信好友界面";
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(clickLeftButton)];
}
- (void)clickLeftButton
{
// 截取字符串,拿到scheme
NSInteger location = [self.urlPath rangeOfString:@"?"].location;
NSString *scheme = [self.urlPath substringFromIndex:location + 1];
// 通過scheme返回新聞
NSString *news = [NSString stringWithFormat:@"%@://", scheme];
NSURL *newsUrl = [NSURL URLWithString:news];
if ([[UIApplication sharedApplication] canOpenURL:newsUrl]) {
[[UIApplication sharedApplication] openURL:newsUrl];
}
}
示例圖:
demo.gif