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

一帅矗、應(yīng)用場景

單點授權(quán)登錄,第三方分享结缚,第三方登錄

二损晤、跳轉(zhuǎn)方法

例如手機有兩個應(yīng)用,app1和app2红竭,app1跳轉(zhuǎn)到app2尤勋,步驟如下:

  1. app2中設(shè)置URL Schemes


    URL Schemes設(shè)置方法
  2. 從app1中跳轉(zhuǎn)到app2的代碼
// 方法1 openURL (iOS2 ~ iOS10)
 NSURL *url = [NSURL URLWithString:@"app2://"];
 [[UIApplication sharedApplication] openURL:url];
// 方法2 openURL:options:completionHandler: (iOS10 ~)
  • openURL這個方法iOS10開始已經(jīng)失效喘落,不過在Xcode8 iOS10測試仍然有效
  • 執(zhí)行方法1或方法2后,手機中如果裝了app2最冰,那么直接跳轉(zhuǎn)到app2
  • 手機中如果沒有裝app2(打開了一個不存在的URL Schemes)瘦棋,應(yīng)用不會閃退也沒有發(fā)現(xiàn)有何異常
  • openURL:options:completionHandler:這個方法中,options中如果傳一個空的字典暖哨,那么跳轉(zhuǎn)的效果與openURL一樣赌朋。
  • openURL:options:completionHandler: 這個方法中是異步的,并且沒有返回值篇裁,completionHander 這個回調(diào)block是在主線程中執(zhí)行的沛慢。
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
        if (success) {
            NSLog(@"跳轉(zhuǎn)成功");
        } else {
            NSLog(@"跳轉(zhuǎn)失敗");
        }
    }];
  • 應(yīng)用跳轉(zhuǎn)就這么簡單~~
  1. 關(guān)于白名單的設(shè)置和說明
    一般從app1跳轉(zhuǎn)到app2,跳轉(zhuǎn)前需要判斷手機中app2是否存在达布,如果存在才進(jìn)行跳轉(zhuǎn)团甲,如果不存在,需要提示用戶黍聂,否則點擊跳轉(zhuǎn)后沒任何效果的話可能會被蘋果拒絕上架躺苦,判斷手機中的某個應(yīng)用是否存在的方法如下:
NSURL *url = [NSURL URLWithString:@"app2://"];
 [[UIApplication sharedApplication] canOpenURL:url];
  • iOS9開始,如果要正確執(zhí)行canOpenURL這個方法产还,必須要在Info.plist中設(shè)置白名單匹厘,如果沒有設(shè)置白名單,Xcode控制臺會輸出如下錯誤日志
- canOpenURL: failed for URL: "app2://" - error: "This app is not allowed to query for scheme app2"

白名單設(shè)置方法如下所示:


白名單設(shè)置方法
  • 注意脐区,白名單的設(shè)置只會影響canOpenURL這個方法愈诚,對openURL無影響,網(wǎng)上很多文章對這塊描述有誤導(dǎo)牛隅。

三扰路、應(yīng)用間傳值

傳值主要通過URL的方式,URL示例如下:

@"app2://oauth?param1=xxxxx&param2=yyyy"

app1成功跳轉(zhuǎn)到app2后倔叼,需要在app2的AppDelegate的代理方法中對URL作參數(shù)解析,示例如下:

// 方法一
// NS_DEPRECATED_IOS(2_0, 9_0)
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return YES;
}

// 方法二
// NS_DEPRECATED_IOS(2_0, 9_0)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return YES;
}

// 方法三
// NS_AVAILABLE_IOS(9_0)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    NSLog(@"%@", options);
    /* options 打印結(jié)果
     {
     UIApplicationOpenURLOptionsOpenInPlaceKey = 0;
     UIApplicationOpenURLOptionsSourceApplicationKey = "com.epoint.app1"; // 可獲取Bundle id 
     }
     */
    
    //將url轉(zhuǎn)為字符串
     NSString * urlString = url.absoluteString;
    //判斷是通過什么跳轉(zhuǎn)過來的
    if ([urlString containsString:@"app2"]) {
        NSLog(@"在這里執(zhí)行頁面跳轉(zhuǎn)即可宫莱。");
        ViewController *vc = (ViewController *)self.window.rootViewController;
        vc.label.text = url.absoluteString;
    }
    
    return YES;
}
  • app1跳轉(zhuǎn)到app2丈攒,如果app2是后臺徹底殺死狀態(tài)打開,也會執(zhí)行上述代理方法授霸。
  • 在 iOS 9 及 iOS 10 中巡验,如果同時實現(xiàn)了上面三個方法,那么只會調(diào)用方法三
  • 在 iOS 9 及 iOS 10 中碘耳,如果僅實現(xiàn)了方法一與方法二显设,那么僅調(diào)用方法二
  • 在 iOS 9 及 iOS 10 中,如果僅實現(xiàn)了方法一辛辨,那么就調(diào)用方法一
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捕捂,一起剝皮案震驚了整個濱河市瑟枫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌指攒,老刑警劉巖慷妙,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異允悦,居然都是意外死亡膝擂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門隙弛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來架馋,“玉大人,你說我怎么就攤上這事全闷〔婕牛” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵室埋,是天一觀的道長办绝。 經(jīng)常有香客問我,道長姚淆,這世上最難降的妖魔是什么孕蝉? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮腌逢,結(jié)果婚禮上降淮,老公的妹妹穿的比我還像新娘。我一直安慰自己搏讶,他們只是感情好佳鳖,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著媒惕,像睡著了一般系吩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妒蔚,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天穿挨,我揣著相機與錄音,去河邊找鬼肴盏。 笑死科盛,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的菜皂。 我是一名探鬼主播贞绵,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恍飘!你這毒婦竟也來了榨崩?” 一聲冷哼從身側(cè)響起谴垫,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜡饵,沒想到半個月后弹渔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡溯祸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年肢专,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焦辅。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡博杖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筷登,到底是詐尸還是另有隱情剃根,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布前方,位于F島的核電站狈醉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏惠险。R本人自食惡果不足惜苗傅,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望班巩。 院中可真熱鬧渣慕,春花似錦、人聲如沸抱慌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抑进。三九已至强经,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寺渗,已是汗流浹背夕凝。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留户秤,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓逮矛,卻偏偏與公主長得像鸡号,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子须鼎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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