iOS應(yīng)用間跳轉(zhuǎn)

應(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一、A跳B的簡(jiǎn)單跳轉(zhuǎn) 今天,我們就研究一下,在iOS中如何實(shí)現(xiàn),應(yīng)用間的跳轉(zhuǎn)。 基本實(shí)現(xiàn)思路: 為app2,定義一...
    麥穗0615閱讀 1,515評(píng)論 4 4
  • 一、應(yīng)用場(chǎng)景 單點(diǎn)授權(quán)登錄,第三方分享,第三方登錄 二、跳轉(zhuǎn)方法 例如手機(jī)有兩個(gè)應(yīng)用,app1和app2,app1...
    RogerHXJ閱讀 2,285評(píng)論 1 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,973評(píng)論 19 139
  • 就我個(gè)人所知,iOS中存在3種方式可以打開(喚醒)其它手機(jī)App(除開系統(tǒng)級(jí)應(yīng)用),分別是: 第三方登錄、分享、支...
    HelloiWorld閱讀 2,936評(píng)論 3 6
  • 天啦嚕,隔壁那姑娘唱得太好了,簡(jiǎn)直跟原唱一模一樣,她是怎么做到的? 1· 無可厚非,我們?cè)谘堇[一首歌曲的需要注意的...
    唐詩遠(yuǎn)閱讀 32,512評(píng)論 91 319