應用間跳轉、通信

應用間跳轉

?app應用的跳轉的原理

?如何實現(xiàn)兩個app應用之間的跳轉

?如何實現(xiàn)兩個app之間跳轉到指定的頁面

一:應用的跳轉原理

從一個應用跳轉到另一個應用并不陌生,常見于第三方登錄霸褒,分享,支付等盈蛮。集成起來也很簡單废菱,跟著第三方sdk集成文檔,通常sdk集成都需要在工程中配置一堆東西,需要配置的URL Schemes:

1殊轴、概念補充

?協(xié)議:雙方互相遵守的一種規(guī)范衰倦,只有遵守共同的協(xié)議規(guī)范才能進行彼此的通信。比如最熟悉的網絡協(xié)議--NSURL

?URL:資源的路徑或地址梳凛。在IOS中有一個專門用于包裝資源路徑的類--NSURL

?一個完整URL的組成

例如:http://123.0.0.1/path?page=100

“http://”:協(xié)議類型

“123.0.0.1”:服務器ip地址

“/path”:資源存放的是路徑

“page=100”:請求的參數(shù)

?NSURL包裝一個完整地址

NSURL *url = [NSURL URLWithString:@"http://123.0.0.1/path?page=100"];

NSLog(@"scheme(協(xié)議):%@",url.scheme);

NSLog(@"host(域名):%@",url.host);

NSLog(@"path(路徑):%@",url.path);

NSLog(@"query(參數(shù)):%@",url.query);

打印結果如下:

2016-12-0214:50:38.442 TestDemo[5632:406869] scheme(協(xié)議):http2016-12-0214:50:38.442 TestDemo[5632:406869] host(域名):123.0.0.12016-12-0214:50:38.442 TestDemo[5632:406869] path(路徑):/path2016-12-0214:50:38.442 TestDemo[5632:406869] query(參數(shù)):page=100

2:跳轉的原理

在iOS中耿币,從一個app打開另一個app,必然牽扯到兩個app之間的通信和交互梳杏,像這種涉及到整個應用程序層面的事情韧拒,蘋果有一個專門的類來管理--UIApplication。在ios中UIApplication其實代表的應用程序十性。我們要打開另一個應用程序叛溢,如何實現(xiàn)呢?

/** 通過應用程序打開一個資源路徑@param url 資源路徑的地址@return 返回成功失敗的信息 */

- (BOOL)openURL:(NSURL*)url;

它的一些我們非常熟悉的用法:

//撥打系統(tǒng)電話

NSURL *url = [NSURL URLWithString:@"tel://10086"];?

[[UIApplication sharedApplication] openURL:url];

//發(fā)送系統(tǒng)短信

NSURL *url = [NSURL URLWithString:@"sms://1383838438"];

?[[UIApplication sharedApplication] openURL:url];

只要執(zhí)行以上兩個方法就會從你當前的應用跳轉到系統(tǒng)的撥打電話界面劲适、發(fā)送短信界面楷掉,這就是應用間的跳轉∠际疲可以這樣理解:撥打電話烹植、發(fā)送短信他兩就是手機自帶的兩個app頁面。

我們仔細分析下傳給它們的NSURL參數(shù)愕贡,就會發(fā)現(xiàn)NSURL的scheme(協(xié)議)不一樣草雕,打電話時"tel://"協(xié)議,發(fā)短信時"sms://"協(xié)議

一個總結:一個應用可以打開另一個應用的必然條件是固以,另一個應用必須配置scheme(協(xié)議)墩虹,這樣應用程序才能根據(jù)協(xié)議找到需要打開的應用。

二憨琳、實現(xiàn)兩個app間的跳轉

創(chuàng)建兩個示例demo,TestDemo和Test2Demo诫钓,現(xiàn)在需要實現(xiàn)從Test2Demo跳轉到TestDemo中
1、在被跳轉的TestDemo中配置一個協(xié)議scheme,這里命名為test(名字可以隨意配置篙螟,最好是英文并且和項目相關)

targets -> info -> URL Types ->URL Scheme ->填寫協(xié)議


配置協(xié)議

注意:不需要填寫成"test://"

2菌湃、在Test2Demo執(zhí)行跳轉的方法中實現(xiàn)下面的方法

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

? ? ? ? ? ?NSURL *url = [NSURL URLWithString:@"test://"];

? ? ? ? ? ?if ([[UIApplication sharedApplication] canOpenURL:url]) { ? ?

? ? ? ? ? ? ? ? ? ?[[UIApplication sharedApplication] openURL:url];??

? ? ? ? ? ?}else{

? ? ? ? ? ? ? ? ? ?NSLog(@"沒有安裝應用");

? ? ? ? ? }

}

如果是iOS9.0以下,已經大功告成了遍略。但是惧所,如果是iOS9.0以后,請看下一步墅冷。

3纯路、配置協(xié)議的白名單

在Test2Demo的info.plist文件中增加一個LSApplicationQueriesSchemes字段,把它設置為數(shù)組類型寞忿,并配置需要跳轉的協(xié)議名單


配置協(xié)議的白名單

到此驰唬,兩個應用間的跳轉已經完全實現(xiàn),總結其實只有三步。很多情況下叫编,我們需要跳轉到另一個應用的指定頁面辖佣,如何處理請往下看。

三搓逾、跳轉到指定的界面

想要跳轉到指定的界面卷谈,必然是上一個app告訴下一個app(被跳轉的app)需要跳轉到哪個界面,如何告訴它便涉及到兩個app間的通信霞篡。從上面可以知道世蔗,兩個app之間的跳轉只需要配置一個scheme,然后通過UIApplication調用它的對象方法openURL:即可實現(xiàn),除此之外再也沒有任何代碼了朗兵。而這之間是如何通信的呢污淋?

1、在"test://"協(xié)議后面的域名加上一些字段用來標記需要跳轉的界面

//進入更多界面

- (IBAction)intoMore:(id)sender {

NSURL *url = [NSURL URLWithString:@"test://more"];

if ([[UIApplication sharedApplication] canOpenURL:url]) {??

? ? ? [[UIApplication sharedApplication] openURL:url];? ?

?}else{

? ? ? NSLog(@"沒有安裝應用");

}

}

//進入設置界面

- (IBAction)intoSet:(id)sender {

NSURL *url = [NSURL URLWithString:@"test://set"];

??if ([[UIApplication sharedApplication] canOpenURL:url]) { ? ? ?

? ? ? ? ?[[UIApplication sharedApplication] openURL:url];? ? }

else{

? ? ? ? ?NSLog(@"沒有安裝應用");

}

}

2余掖、來到被跳轉的應用TestDemo的AppDelegate類的.m文件中寸爆,監(jiān)聽其代理方法application:handleOpenURL:

//當應用程序將要被其他程序打開時,會先執(zhí)行此方法盐欺,并傳遞url過來//注:下面這個方法9.0后就過期了赁豆,請注意適配,9.0后用這個方法:application:openURL:options:

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{

NSLog(@"url:%@",url.absoluteString);

NSLog(@"host:%@",url.host);

if ([url.host isEqualToString:@"more"]) {

? ? ? NSLog(@"進入更多界面");//到此做界面的跳轉?

?? }

if ([url.host isEqualToString:@"set"]) {

? ? ?NSLog(@"進入設置界面");//到此做界面的跳轉? ??

}

returnYES;

}

當Test2Demo點擊進入更多界面打印如下:

2016-12-0217:11:17.680 TestDemo[6507:495044] url:test://more2016-12-0217:11:17.681 TestDemo[6507:495044] host:more2016-12-0217:11:17.681 TestDemo[6507:495044] 進入更多界面

當Test2Demo點擊進入設置界面打印如下:

2016-12-0217:10:38.745 TestDemo[6507:495044] url:test://set2016-12-0217:10:38.745 TestDemo[6507:495044] host:set2016-12-0217:10:38.745 TestDemo[6507:495044] 進入設置界面

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末冗美,一起剝皮案震驚了整個濱河市魔种,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌墩衙,老刑警劉巖务嫡,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漆改,居然都是意外死亡心铃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門挫剑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來去扣,“玉大人,你說我怎么就攤上這事樊破∮淅猓” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵哲戚,是天一觀的道長奔滑。 經常有香客問我,道長顺少,這世上最難降的妖魔是什么朋其? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任王浴,我火速辦了婚禮,結果婚禮上梅猿,老公的妹妹穿的比我還像新娘氓辣。我一直安慰自己,他們只是感情好袱蚓,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布钞啸。 她就那樣靜靜地躺著,像睡著了一般喇潘。 火紅的嫁衣襯著肌膚如雪体斩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天响蓉,我揣著相機與錄音硕勿,去河邊找鬼哨毁。 笑死枫甲,一個胖子當著我的面吹牛,可吹牛的內容都是我干的扼褪。 我是一名探鬼主播想幻,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼话浇!你這毒婦竟也來了脏毯?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤幔崖,失蹤者是張志新(化名)和其女友劉穎食店,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赏寇,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡吉嫩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗅定。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡渠退,死狀恐怖忙迁,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情碎乃,我是刑警寧澤姊扔,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站梅誓,受9級特大地震影響恰梢,放射性物質發(fā)生泄漏晨川。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一删豺、第九天 我趴在偏房一處隱蔽的房頂上張望共虑。 院中可真熱鬧,春花似錦呀页、人聲如沸妈拌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尘分。三九已至,卻和暖如春丸氛,著一層夾襖步出監(jiān)牢的瞬間培愁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工缓窜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留定续,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓禾锤,卻偏偏與公主長得像私股,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子恩掷,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容