iOS應(yīng)用之間的調(diào)用


引言:
項(xiàng)目需求不同應(yīng)用之間的相互調(diào)用崎苗,類似分享到微信狐粱、QQ、新浪微博應(yīng)用之間的調(diào)用等益缠,廢話不多說脑奠,記錄一下,心得體驗(yàn)幅慌!


一宋欺、 Url Scheme
在iOS中應(yīng)用之間的調(diào)用需要設(shè)置 Url Scheme,例如:如果“應(yīng)用One”調(diào)用“應(yīng)用Two”胰伍,那么應(yīng)用Two需要設(shè)置自己的 Url Scheme齿诞,并且“應(yīng)用One”需要知道“應(yīng)用Two”的 Url Scheme才可以調(diào)用應(yīng)用Two。

1.自定義 Url Scheme

  • info.plist
    利用info.plist自定義骂租,如圖所示:
1.自定義 Url Scheme.png

Url Scheme可以隨意自定義祷杈,也就是你喜歡怎樣就怎樣,O(∩_∩)O~渗饮,太嘚瑟了但汞,不過呢,利用bundle identifier是可以的互站,親測(cè)OK私蕾。(PS:此處有個(gè)取巧的地方,后面會(huì)介紹)胡桃。

  • 簡(jiǎn)便自定義
    其實(shí)也是在info.plist中踩叭,Xcode為廣大開發(fā)者提供了簡(jiǎn)便工程配置,如圖紅色框中所示:
2.自定義 Url Scheme.png

其實(shí)是相同的設(shè)置翠胰,只不過Xcode提供了更加直觀的方式容贝。

  • XML 自定義
    將info.plist顯示為XML格式,進(jìn)行更改之景,對(duì)于熟悉XML格式的同學(xué)斤富,比較適合。

3.自定義 Url Scheme.png

如何圖紅框內(nèi)的數(shù)據(jù)結(jié)構(gòu)闺兢,其實(shí)就是前兩種方法的數(shù)據(jù)結(jié)構(gòu)茂缚。
二戏罢、應(yīng)用之間調(diào)用的實(shí)現(xiàn)
上面自定義的Url Scheme 都是在應(yīng)用Two內(nèi)設(shè)置的屋谭,下面應(yīng)用One需要其Url Scheme 并調(diào)起應(yīng)用Two脚囊。應(yīng)用One內(nèi)的代碼非常簡(jiǎn)單,此處說明一下桐磁,調(diào)用其他應(yīng)用就是打開某個(gè)Url悔耘,格式為:
@"自定義Url Scheme://"
協(xié)議頭為你需要調(diào)用的應(yīng)用的自定義的Url Scheme,協(xié)議內(nèi)容可以為空我擂。
在應(yīng)用One控制器內(nèi)實(shí)現(xiàn)了簡(jiǎn)單的按鈕的點(diǎn)擊跳轉(zhuǎn)效果衬以,代碼如下:

- (IBAction)jumpApplication {
    
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@://",
[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"LSApplicationQueriesSchemes"] lastObject]]];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
    
}

上述代碼中,@“LSApplicationQueriesSchemes” 是在iOS9中才需要的校摩,iOS9開始應(yīng)用之間的調(diào)用看峻,需要設(shè)置白名單,也就是將應(yīng)用Two自定義的Url Scheme 添加到應(yīng)用One中的白名單中衙吩,@“LSApplicationQueriesSchemes”所對(duì)應(yīng)的數(shù)組內(nèi)互妓。添加方法類似添加分享到微信、QQ等的白名單坤塞,這里就不贅述了冯勉。iOS9在首次調(diào)用的時(shí)候會(huì)提示用戶是否打開XX應(yīng)用。

4.open application.png

點(diǎn)擊Open就可以調(diào)轉(zhuǎn)到應(yīng)用Two了

5.跳轉(zhuǎn)到應(yīng)用Two.png

當(dāng)然這還設(shè)置到一個(gè)返回前個(gè)應(yīng)用的操作摹芙,iOS9提供了箭頭所指的返回方式灼狰,Coder也可以自定義!
三浮禾、反跳轉(zhuǎn)
反跳轉(zhuǎn)原理同跳轉(zhuǎn)交胚!
首先,在應(yīng)用One跳轉(zhuǎn)到應(yīng)用Two時(shí)盈电,不管應(yīng)用Two是否正在運(yùn)行蝴簇,都會(huì)調(diào)用應(yīng)用Two的代理方法。

6.應(yīng)用Two的代理方法.png

注意上面的紅框內(nèi)的方法在iOS9開始已經(jīng)廢棄了挣轨,統(tǒng)一使用下面紅框內(nèi)的代理方法军熏。
這里解釋一下之前為什么使用bundle Identifier作為自定義的Url Scheme:

  • 下面的代理方法中的options參數(shù)是個(gè)字典,字典中利用@"UIApplicationOpenURLOptionsSourceApplicationKey"
    鍵可以取到應(yīng)用One的bundle identifier卷扮,利用相同的原理在跳回前個(gè)應(yīng)用荡澎。
  • Url Scheme需有唯一性,否則應(yīng)用在跳轉(zhuǎn)的時(shí)候不知到底要跳轉(zhuǎn)哪個(gè)應(yīng)用晤锹,而bundle identifier具有此性質(zhì)摩幔。
  • 下面的代理方法中的url也可以拿到前個(gè)應(yīng)用的Url Scheme
    例如:
    在應(yīng)用One中openUrl時(shí)添加協(xié)議體,將應(yīng)用One的Url Scheme傳遞過來鞭铆,如:@“com.neunn.ApplicationTwo://com.neunn.ApplicationOne
    但是這的需要截取字符串拿到應(yīng)用One的Url Scheme或衡,比較麻煩焦影,所以取巧使用了bundle Identifier。
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{

    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    [userDefault setObject:[options objectForKey:@"UIApplicationOpenURLOptionsSourceApplicationKey"] forKey:@"key"];
    [userDefault synchronize];
    return YES;
}

這樣在應(yīng)用Two的控制器內(nèi)實(shí)現(xiàn)的反跳轉(zhuǎn)代碼封断,如下:

- (IBAction)jumpBack {
    
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@://",[[NSUserDefaults standardUserDefaults] objectForKey:@"key"]]];
//    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
//    }
    
}

取出在代理方法內(nèi)存儲(chǔ)的Url Scheme拼接為符合格式的Url斯辰,Done!
但是這里需要注意的是:
iOS9中如果使用上述代碼中注釋的
[UIApplication sharedApplication] canOpenURL:url]
判斷是否可以打開的話坡疼,還是會(huì)提示設(shè)置應(yīng)用Two的白名單彬呻,才可以打開應(yīng)用One,這里沒必要判斷柄瑰,直接打開就可以了闸氮。
當(dāng)然你也可以判斷失敗后,代碼修改info.plist文件已達(dá)到設(shè)置白名單教沾,可以跳轉(zhuǎn)的目的蒲跨。
:iOS9之后在沒有添加白名單的情況下,并不影響[UIApplication sharedApplication] openURL:url]的使用授翻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末或悲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子藏姐,更是在濱河造成了極大的恐慌隆箩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羔杨,死亡現(xiàn)場(chǎng)離奇詭異捌臊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)兜材,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門理澎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人曙寡,你說我怎么就攤上這事糠爬。” “怎么了举庶?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵执隧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我户侥,道長(zhǎng)镀琉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任蕊唐,我火速辦了婚禮屋摔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘替梨。我一直安慰自己钓试,他們只是感情好装黑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弓熏,像睡著了一般恋谭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上硝烂,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天箕别,我揣著相機(jī)與錄音铜幽,去河邊找鬼滞谢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛除抛,可吹牛的內(nèi)容都是我干的狮杨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼到忽,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼橄教!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喘漏,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤护蝶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后翩迈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體持灰,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年负饲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堤魁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡返十,死狀恐怖妥泉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洞坑,我是刑警寧澤盲链,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站迟杂,受9級(jí)特大地震影響刽沾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逢慌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一悠轩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧攻泼,春花似錦火架、人聲如沸鉴象。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纺弊。三九已至,卻和暖如春骡男,著一層夾襖步出監(jiān)牢的瞬間淆游,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國打工隔盛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留犹菱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓吮炕,卻偏偏與公主長(zhǎng)得像腊脱,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子龙亲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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