1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      【iOS開發(fā)】打開另一個(gè)APP(URLScheme與openURL)

      目標(biāo)

      平常我們做iOS開發(fā),會(huì)經(jīng)常遇到打開其他的APP的功能。本篇文章講的就是打開別人的APP的一些知識(shí)。我們的目標(biāo)是:

      讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國際域名空間、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、臺(tái)兒網(wǎng)站維護(hù)、網(wǎng)站推廣。打開別人的APP 讓別人打開我們的APP iOS9的適配問題 使用URL Schemes傳遞數(shù)據(jù) 準(zhǔn)備工作 建立一個(gè)名為OpenApp的工作空間,用來存放我們的兩個(gè)工程
      建立這個(gè)工作空間主要是為了讓我們后面建立的兩個(gè)工程能在一個(gè)Xcode頁面上管理,方便講解和管理。挺簡單的,不清楚的可以看我之前的文章【iOS開發(fā)】在一個(gè)Xcode頁面建立多個(gè)工程

      建立一個(gè)workspace來存放我們的工程

      建立一個(gè)名為MyApp的iOS工程。這個(gè)MyApp是“我的app”,用來打開另一個(gè)APP的。
      添加工程到我們剛才創(chuàng)建的OpenApp.xcworkspace。并且在工程的Main.storyboard添加一個(gè)button,待會(huì)兒我們會(huì)用來寫方法。

      MyApp工程

      建立一個(gè)名為WXApp的iOS工程。這個(gè)工程是我們模擬的“微信APP”,是被人打開的那個(gè)APP。
      為了區(qū)分兩個(gè)應(yīng)用,我們?cè)贛ain.storyboard上加一個(gè)label,“我是微信App”。

      在workspace建立WXApp工程

      WXApp

      好了,準(zhǔn)備工作就這么簡單。

      打開別人的APP與讓別人打開我們的APP

      想要打開別人的APP或者讓別人打開我們的APP,那就需要通過URL Schemes了。

      什么是URL Schemes?

      URL Schemes是蘋果給出的用來跳轉(zhuǎn)到系統(tǒng)應(yīng)用或者跳轉(zhuǎn)到別人的應(yīng)用的一種機(jī)制。同時(shí)還可以在應(yīng)用之間傳數(shù)據(jù)。

      通過對(duì)比網(wǎng)頁鏈接來理解 iOS 上的 URL Schemes,應(yīng)該就容易多了。
      URL Schemes 有兩個(gè)單詞:

      URL,我們都很清楚,http://www.apple.com
      就是個(gè) URL,我們也叫它鏈接或網(wǎng)址; Schemes,表示的是一個(gè) URL 中的一個(gè)位置——最初始的位置,即 ://
      之前的那段字符。比如 http://www.apple.com
      這個(gè)網(wǎng)址的 Schemes是 http
      根據(jù)我們上面對(duì) URL Schemes 的使用,我們可以很輕易地理解,在以本地應(yīng)用為主的 iOS 上,我們可以像定位一個(gè)網(wǎng)頁一樣,用一種特殊的 URL 來定位一個(gè)應(yīng)用甚至應(yīng)用里某個(gè)具體的功能。而定位這個(gè)應(yīng)用的,就應(yīng)該是這個(gè)應(yīng)用的 URL 的 Schemes 部分,也就是開頭兒那部分。 在WXApp上設(shè)置一個(gè)URL Schemes

      為了能讓別的App(包括我們剛才創(chuàng)建的MyApp)能夠打開WXApp,我們需要為WXApp添加一個(gè)URL Schemes。
      步驟:選中WXApp工程->Info->URL Types->點(diǎn)擊“+”->在URL Schemes欄填上 weixin

      添加一個(gè)URL Schemes

      備注:一個(gè)應(yīng)用是可以有多個(gè)URL Schemes的。你可以再次點(diǎn)擊“+”來添加一個(gè)URL Schemes

      我們看看info.plist文件里面是怎樣的。

      info.plist文件里面的URL Schemes

      然后我們r(jià)un一下WXApp。(注意一下你run的target是哪個(gè))

      在模擬器run一下WXApp

      這樣,WXApp就向系統(tǒng)“注冊(cè)”了一個(gè)URL Schemes,其他的應(yīng)用可以通過openurl:方法來打開WXApp了。

      MyApp打開WXApp

      現(xiàn)在我們?cè)贛yApp里面打開WXApp。方法非常簡單。
      在ViewController里面添加一個(gè)方法

      - (IBAction)openWXApp:(UIButton *)sender { [self demo1]; } - (void)demo1 { //創(chuàng)建一個(gè)url,這個(gè)url就是WXApp的url,記得加上:// NSURL *url = [NSURL URLWithString:@"weixin://"]; //打開url [[UIApplication sharedApplication] openURL:url]; }

      然后run一下MyApp

      run MyApp

      運(yùn)行了之后點(diǎn)擊“打開微信”button,會(huì)彈出“MyApp”想要打開“WXApp”提示框,點(diǎn)確認(rèn)之后就可以跳轉(zhuǎn)到WXApp了。

      點(diǎn)擊“打開微信”button

      打開了WXApp

      iOS9之后,在一個(gè)應(yīng)用跳轉(zhuǎn)到了另一個(gè)應(yīng)用之后,左上角會(huì)有個(gè)返回到上一個(gè)應(yīng)用的按鈕。這樣,我們?cè)贛yApp里面點(diǎn)擊“打開微信”按鈕,跳轉(zhuǎn)到WXApp之后,再點(diǎn)擊“Back to MyApp”,又回到MyApp了。閑著無聊就可以反復(fù)點(diǎn)擊這兩個(gè)按鈕來兩個(gè)應(yīng)用間跳轉(zhuǎn)了,哈哈。

      值得一說的是,這個(gè)URL Schemes并不是唯一的。也就是說,多個(gè)應(yīng)用之間設(shè)置的URL Schemes是可以相同的。
      那么問題來了,假如兩個(gè)應(yīng)用的URL Schemes相同的話,使用openURL:方法會(huì)打開哪個(gè)應(yīng)用呢?
      樓主親自用手機(jī)試了一下。
      步驟是:

      將MyApp安裝到手機(jī)上,點(diǎn)擊“打開微信”button,微信打開了。 然后將WXApp也安裝到手機(jī)上。再次點(diǎn)擊MyApp的“打開微信”button,結(jié)果打開的是WXApp。
      結(jié)論:如果兩個(gè)應(yīng)用有URL Schemes是相同的,后安裝的應(yīng)用的URL Schemes會(huì)把早安裝的應(yīng)用的URL Schems覆蓋掉。 在safari打開WXApp

      沒錯(cuò),注冊(cè)了URL Schemes的應(yīng)用,用safari瀏覽器也是可以打開的。我就經(jīng)常用這個(gè)來驗(yàn)證應(yīng)用是否設(shè)置了我想要的URL Schemes
      在safari打開WXApp,直接在safari的地址欄輸入weixin://,enter就可以打開了

      用safari打開WXApp

      用safari打開WXApp

      iOS9中的適配 配置URL Schemes白名單
      其實(shí)在打開WXApp的時(shí)候,正常情況下,我們應(yīng)該是先用canOpenURL:方法先判斷能否打開這個(gè)url,然后再用openURL方法打開該URL的。這樣可以帶來更好的用戶體驗(yàn)。因?yàn)橛脩舨灰欢ò惭b了WXApp。假如用戶沒有安裝的話點(diǎn)擊“打開微信”button是沒有任何反應(yīng)的。這時(shí)候我們應(yīng)該先判斷是否能夠打開這個(gè)url(也就是判斷用戶有沒有安裝WXApp),沒有安裝的話就給個(gè)溫馨提示,比如:“U四不四灑,沒安裝WXApp,怎么打開啊!”。
      更重要的是,假如點(diǎn)擊之后沒效果,很有可能被蘋果拒絕哦。

      - (IBAction)openWXApp:(UIButton *)sender { // [self demo1]; [self demo2]; } //先判斷再打開WXApp - (void)demo2 { //創(chuàng)建一個(gè)url,這個(gè)url就是WXApp的url,記得加上:// NSURL *url = [NSURL URLWithString:@"weixin://"]; //先判斷是否能打開該url if ([[UIApplication sharedApplication] canOpenURL:url]) { //打開url [[UIApplication sharedApplication] openURL:url]; }else { //給個(gè)提示或者做點(diǎn)別的事情 NSLog(@"U四不四灑,沒安裝WXApp,怎么打開啊!"); }

      但是我們發(fā)現(xiàn)用了canOpenURL:方法之后,并沒有如我們想像中打開了WXApp。一看,Xcode控制臺(tái)提示:

      Xcode控制臺(tái)錯(cuò)誤提示

      為什么會(huì)這樣呢?
      因?yàn)閕OS9的時(shí)候蘋果加強(qiáng)了權(quán)限,只有在info.plist文件中加入了URL Schemes白名單才能使用canOpenURL:方法來判斷是否能打開該url。該白名單的上限是50個(gè)。也就是說,你最多只能使用canOpenURL:方法判斷50個(gè)URL Schemes。當(dāng)然,平常我們都用不了那么多,就算是集成分享功能,50個(gè)肯定夠了。

      備注:只是對(duì)canOpenURL:方法有限制,openURL:方法是沒有限制的。

      言歸正傳,我們需要在MyApp的info.plist里面將weixin設(shè)置為白名單。
      步驟:點(diǎn)擊info.plist->右鍵->Open As->Source Code->添加下面的代碼

      LSApplicationQueriesSchemes weixin

      這樣就可以了。

      使用URL Schems傳遞數(shù)據(jù)

      URL Schemes除了可以用來打開APP之外,還可以用來在兩個(gè)App之間傳遞少量的數(shù)據(jù)。
      在百度上搜索“ios”,會(huì)生成一個(gè)url,下面來以這個(gè)url來大概介紹url的組成。

      url為:https://www.baidu.com/s?ie=UTF-8&wd=ios

      https就是協(xié)議,也就是scheme www.baidu.com 是域名 /s是路徑 ?后面的是query,也就是查詢參數(shù)。這個(gè)url有兩個(gè)參數(shù),分別是ie=UTF-8和wd=ios

      我們iOS的URL Schemes中也是差不多的。
      而且,在openURL的時(shí)候,如果url中帶有參數(shù),只要URL Schemes是正確的,那同樣可以打開App,而且,后面的參數(shù)也會(huì)帶到我們打開的App那里。
      咱們做個(gè)Demo就一目了然了。
      在MyApp中,寫個(gè)demo3方法,url為weixin://www.shixueqian.com/abc?title=hello&content=helloworld

      - (IBAction)openWXApp:(UIButton *)sender { // [self demo1]; // [self demo2]; [self demo3]; } //使用URL Schemes傳遞數(shù)據(jù) - (void)demo3 { //創(chuàng)建一個(gè)url,這個(gè)url就是WXApp的url,記得加上:// NSURL *url = [NSURL URLWithString:@"weixin://www.shixueqian.com/abc?title=hello&content=helloworld"]; //打開url [[UIApplication sharedApplication] openURL:url]; }

      在WXApp的AppDelegate.m中,實(shí)現(xiàn)application: openURL:(NSURL *)url sourceApplication: annotation:回調(diào)

      - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSLog(@"url=====%@ n sourceApplication=======%@ n annotation======%@", url, sourceApplication, annotation); return YES; }

      run了之后,我們發(fā)現(xiàn),我們依舊可以通過點(diǎn)擊openURL:方法打開WXApp。而且在WXApp被打開的時(shí)候,會(huì)執(zhí)行application: openURL:(NSURL *)url sourceApplication: annotation:回調(diào)方法。在這個(gè)回調(diào)方法中,我們可以得到MyApp傳過來的url等信息。
      控制臺(tái)打印如下:

      log結(jié)果

      完整的url信息都傳過來了,我們就可以利用這個(gè)url里面的路徑和參數(shù)等信息了,想干嘛就干嘛。這就實(shí)現(xiàn)了從MyApp向WXApp傳遞數(shù)據(jù)了。

      備注:
      蘋果一共給了3個(gè)openURL的回調(diào)。
      分別是:

      - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url NS_DEPRECATED_IOS(2_0, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED; - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED; - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options NS_AVAILABLE_IOS(9_0); // no equiv. notification. return NO if the application can\'t open for some reason

      為什么會(huì)有3個(gè)呢?這3個(gè)回調(diào)又有什么區(qū)別?(為方面講解,分別設(shè)置ABC3個(gè)回調(diào))

      3個(gè)回調(diào)的功能基本一樣,都是在別人通過URL Schemes打開應(yīng)用的時(shí)候會(huì)執(zhí)行的。
      不同之處: A回調(diào)是在iOS2.0的時(shí)候推出的,參數(shù)只有url。 B回到是在iOS4.2的時(shí)候推出的,參數(shù)有url sourceApplication annotation. C回調(diào)是iOS9.0的時(shí)候推出的,參數(shù)有url options。options有下面幾個(gè)key

      // Keys for application:openURL:options: UIKIT_EXTERN NSString *const UIApplicationOpenURLOptionsSourceApplicationKey NS_AVAILABLE_IOS(9_0); // value is an NSString containing the bundle ID of the originating application UIKIT_EXTERN NSString *const UIApplicationOpenURLOptionsAnnotationKey NS_AVAILABLE_IOS(9_0); // value is a property-list typed object corresponding to what the originating application passed in UIDocumentInteractionController\'s annotation property UIKIT_EXTERN NSString *const UIApplicationOpenURLOptionsOpenInPlaceKey NS_AVAILABLE_IOS(9_0); // value is a bool NSNumber, set to YES if the file needs to be copied before use 這幾個(gè)回調(diào)是有優(yōu)先級(jí)的。C>B>A。也就是說,如果你3個(gè)回調(diào)都實(shí)現(xiàn)了,那么程序只會(huì)執(zhí)行C回調(diào)。其他回調(diào)是不會(huì)執(zhí)行的。(當(dāng)然,iOS9以下只會(huì)執(zhí)行B回調(diào))。


      本文名稱:【iOS開發(fā)】打開另一個(gè)APP(URLScheme與openURL)
      URL分享:http://www.ef60e0e.cn/article/cgeddj.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
        1. <ul id="0c1fb"></ul>

          <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
          <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

          通海县| 铜鼓县| 永州市| 徐汇区| 玉龙| 西贡区| 四川省| 新平| 辉南县| 宁津县| 周至县| 荔浦县| 衡东县| 鄂托克前旗| 浦江县| 沙雅县| 龙游县| 田林县| 铁岭市| 科技| 达拉特旗| 江门市| 禄丰县| 普定县| 上虞市| 柏乡县| 桂阳县| 阜新市| 诸城市| 正阳县| 湘阴县| 隆子县| 油尖旺区| 松江区| 交城县| 霍林郭勒市| 林州市| 石台县| 峨边| 宿松县| 和政县|