日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS应用之间跳转

發(fā)布時(shí)間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS应用之间跳转 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本篇博文將涉及到以下知識(shí)點(diǎn):

  • app應(yīng)用跳轉(zhuǎn)的原理解析
  • 如何實(shí)現(xiàn)兩個(gè)app應(yīng)用之間的跳轉(zhuǎn)
  • 如何實(shí)現(xiàn)兩個(gè)app之間跳轉(zhuǎn)到指定界面

二、應(yīng)用跳轉(zhuǎn)原理

相信從一個(gè)應(yīng)用跳轉(zhuǎn)到另一個(gè)應(yīng)用大家并不陌生,最常見的莫過于第三方登錄,支付寶支付等等。這些東西大家都耳熟能詳,集成進(jìn)來也很簡單,跟著第三方sdk集成文檔一步步走下來就是了,通常sdk集成文檔都需要你在工程中配置一堆堆的東西,但是配置的這些東西,你真的明白了嗎?比如下面這個(gè),第三方登錄或分享需要你配置的URL Schemes:


第三方登錄或分享需要你配置

不明白呢沒關(guān)系,開始我也不明白,但是這篇博文看完后,相信你會(huì)明白的,下面正式進(jìn)入主題:

1、一些概念的補(bǔ)充

  • 協(xié)議:雙方互相遵守的一種規(guī)范,只有遵守共同的協(xié)議規(guī)范才能進(jìn)行彼此的通信。比如我們最熟悉的網(wǎng)絡(luò)協(xié)議——http協(xié)議。
  • URL:資源的路徑或地址。在IOS中有一個(gè)專門用于包裝資源路徑的類——NSURL。
  • 一個(gè)完整URL的組成 例如:http://123.0.0.1/path?page=100 “http://”:協(xié)議類型 “123.0.0.1”:服務(wù)器ip地址 “/path”:資源存放的是路徑 “page=100”:請求的參數(shù)
  • NSURL包裝一個(gè)完整地址 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); 打印結(jié)果如下: 2016-12-02 14:50:38.442 TestDemo[5632:406869] scheme(協(xié)議):http 2016-12-02 14:50:38.442 TestDemo[5632:406869] host(域名):123.0.0.1 2016-12-02 14:50:38.442 TestDemo[5632:406869] path(路徑):/path 2016-12-02 14:50:38.442 TestDemo[5632:406869] query(參數(shù)):page=100

2、跳轉(zhuǎn)的原理

在iOS中,從一個(gè)app打開另一個(gè)app,這必然牽扯到兩個(gè)app之間的交互和通信,像這種涉及到整個(gè)應(yīng)用程序?qū)用娴氖虑?#xff0c;蘋果有一個(gè)專門的類來管理——UIApplication。在ios中UIApplication其實(shí)就是代表著應(yīng)用程序,這點(diǎn)從它的命名就可以窺之。而我們要打開另一個(gè)應(yīng)用程序,如何實(shí)現(xiàn)呢?

很簡單,其實(shí)就是UIApplication下面這個(gè) 的API

/**通過應(yīng)用程序打開一個(gè)資源路徑 @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];

看到這里也許有人會(huì)有疑問:撥打系統(tǒng)電話、發(fā)送系統(tǒng)短信跟我本篇要講的應(yīng)用間的跳轉(zhuǎn)有什么關(guān)系呢?

呵呵,不要著急,重點(diǎn)來了:你難道不覺得撥打系統(tǒng)電話、發(fā)送系統(tǒng)短信其實(shí)就是應(yīng)用間的跳轉(zhuǎn)嗎?只要一執(zhí)行以上兩個(gè)方法就會(huì)從你當(dāng)前的應(yīng)用跳轉(zhuǎn)到系統(tǒng)的撥打電話界面、發(fā)送短信界面,這難道還不夠應(yīng)用間的跳轉(zhuǎn)嗎?其實(shí)你也可以這么理解:撥打系統(tǒng)電話、發(fā)送短信它倆就是手機(jī)本身自帶的兩個(gè)app應(yīng)用。

寫到這里答案已經(jīng)呼之欲出,上面打電話和發(fā)短信的實(shí)現(xiàn)代碼大同小異,唯一的區(qū)別是傳遞的NSURL參數(shù)不一樣,導(dǎo)致他們跳轉(zhuǎn)到不同的應(yīng)用場景。我們再仔細(xì)分析下傳給它們的NSURL參數(shù),就會(huì)發(fā)現(xiàn)NSURL的scheme(協(xié)議)不一樣,打電話時(shí)“tel://”協(xié)議,發(fā)短信是“sms://”協(xié)議。(對協(xié)議有疑問的童鞋可以拉上去看)

一個(gè)總結(jié):一個(gè)應(yīng)用能打開另一個(gè)應(yīng)用的必然條件是,另一個(gè)應(yīng)用必須配置一個(gè)scheme(協(xié)議),這樣應(yīng)用程序才能根據(jù)協(xié)議找到需要打開的應(yīng)用。

三、實(shí)現(xiàn)兩個(gè)app間的跳轉(zhuǎn)

創(chuàng)建兩個(gè)示例Demo,TestDemo和Test2Demo,現(xiàn)在需要實(shí)現(xiàn)從Test2Demo跳轉(zhuǎn)到TestDemo中

1、在被跳轉(zhuǎn)的TestDemo配置一個(gè)協(xié)議scheme,這里命名為test(名字可隨意配置,當(dāng)然最好是英文并且跟你項(xiàng)目相關(guān))

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


配置協(xié)議

注意:不需要填寫成“test://”

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

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {NSURL *url = [NSURL URLWithString:@"test://"]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; }else{ NSLog(@"沒有安裝應(yīng)用"); } }

ok,到這里如果你的系統(tǒng)是ios9.0以下,已經(jīng)大大功告成了。但是,如果是9.0以后,請看下一步。

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

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


配置協(xié)議白名單

到此,兩個(gè)應(yīng)用間的跳轉(zhuǎn)已經(jīng)完全實(shí)現(xiàn),其實(shí)說穿了就三步,so easy!但是,很多時(shí)候,我不僅要跳轉(zhuǎn)到一個(gè)應(yīng)用上,而且還需要跳轉(zhuǎn)到應(yīng)用的指定界面,想知道怎么處理請接著往下看。

四、跳轉(zhuǎn)到指定界面

想要跳轉(zhuǎn)到指定界面,必然是上一個(gè)app告訴下一個(gè)app(被跳轉(zhuǎn)的app)需要跳轉(zhuǎn)到哪個(gè)界面,而如何告訴它這里便涉及到兩個(gè)app的通信。我們從上面可以知道,兩個(gè)app之間的跳轉(zhuǎn)只需要配置一個(gè)scheme,然后通過UIApplication調(diào)用它的對象方法openURL:即可實(shí)現(xiàn),除此之外再也沒有實(shí)現(xiàn)任何代碼了。而這之間是如何通信的呢?

答案依然是協(xié)議,請看下面步驟:

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

//進(jìn)入更多界面 - (IBAction)intoMore:(id)sender {NSURL *url = [NSURL URLWithString:@"test://more"]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; }else{ NSLog(@"沒有安裝應(yīng)用"); } } //進(jìn)入設(shè)置界面 - (IBAction)intoSet:(id)sender { NSURL *url = [NSURL URLWithString:@"test://set"]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; }else{ NSLog(@"沒有安裝應(yīng)用"); } }

2、來到被跳轉(zhuǎn)的應(yīng)用TestDemo的AppDelegate類的.m文件中,監(jiān)聽其代理方法application:handleOpenURL:

//當(dāng)應(yīng)用程序?qū)⒁黄渌绦虼蜷_時(shí),會(huì)先執(zhí)行此方法,并傳遞url過來 //注:下面這個(gè)方法9.0后就過期了,請注意適配,9.0后用這個(gè)方法:application:openURL:options: -(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { NSLog(@"url:%@",url.absoluteString); NSLog(@"host:%@",url.host); if ([url.host isEqualToString:@"more"]) { NSLog(@"進(jìn)入更多界面"); //到此做界面的跳轉(zhuǎn) } if ([url.host isEqualToString:@"set"]) { NSLog(@"進(jìn)入設(shè)置界面"); //到此做界面的跳轉(zhuǎn) } return YES; }

當(dāng)Test2Demo點(diǎn)擊進(jìn)入更多界面打印如下:

2016-12-02 17:11:17.680 TestDemo[6507:495044] url:test://more 2016-12-02 17:11:17.681 TestDemo[6507:495044] host:more 2016-12-02 17:11:17.681 TestDemo[6507:495044] 進(jìn)入更多界面

當(dāng)Test2Demo點(diǎn)擊進(jìn)入設(shè)置界面打印如下:

2016-12-02 17:10:38.745 TestDemo[6507:495044] url:test://set 2016-12-02 17:10:38.745 TestDemo[6507:495044] host:set 2016-12-02 17:10:38.745 TestDemo[6507:495044] 進(jìn)入設(shè)置界面



文/夜_闌珊(簡書作者)
原文鏈接:http://www.jianshu.com/p/6b746f95b568
著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),并標(biāo)注“簡書作者”。

轉(zhuǎn)載于:https://www.cnblogs.com/oc-bowen/p/6137397.html

總結(jié)

以上是生活随笔為你收集整理的iOS应用之间跳转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。