你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> Deep Linking技術,你真的知道嗎

Deep Linking技術,你真的知道嗎

編輯:IOS開發基礎

pexels-photo-116230-medium.jpeg

投稿文章,作者:徐斌,原騰信iOS工程師,現LinkedME高級工程師。

  • SandBox是什麼? 

SandBox(沙盒)機制規定應用程序只能夠讀取應用程序內部的數據,不可以訪問其他應用的信息數據。

  1. 在iOS設備中每一個APP都有自己的儲存空間

  2. APP只能訪問自己的沙盒目錄下內容,不能訪問其它存儲空間的內容

  3. 應用程序的數據請求需要經過權限檢測,檢測不通過則不執行為什麼要使用沙盒機制? 

  • SandBox是安全體系中的一種機制,從而蘋果公司在設計iOS系統時,考慮應用之間的信息安全,對應用程序的訪問權限設置限制。

  • 沙盒機制有什麼弊端? 

使用沙盒機制後APP之間不能相互訪問通信,使得APP成為一個個的信息孤島。

  • 怎麼解決這個問題? 

為了解決APP信息孤島問題,蘋果在iOS 4中推出了URI Scheme技術,可以通過特定的URL方式傳遞參數給另一個APP。例如Uber://pid=3894&source=25,linkedmedemo:/ /id=2351。

  • 怎麼配置URI Scheme? 

在iOS工程中,打開Info.plist文件,添加URL Types節點即可。在這個節點裡,可以自定義協議名稱,如linkedmedemo,這個形式的 URI 就會關聯到唯品會客戶端。眾多開發者對URI Scheme已經不再陌生,通常在集成社會化分享組件或深度鏈接技術服務(知名品牌有友盟和LinkedME)時,必須填寫URI Scheme。

blob.png

  • 代碼實現 

在 Info.plist 裡面設置完 URL types 之後,就可以在程序中處理這類 URL 的打開請求。在外部程序中,如果打開了指定自定義協議的 URL,程序中 APPlication delegate 的 APPlication:handleOpenURL: 方法就會被調用,在這個方法裡,可以獲取到觸發這個方法的 URL,可以通過對這個URL進行判斷,例如根據不同的Host,不同的 Query String 來執行不同的動作。

- (void)APPlication:(UIAPPlication *)APPlication handleOpenURL:(NSURL *)url {
   // 在 host 等於 list.vip.com,說明這是唯品會的寶貝詳情url,
   // 那麼就使用本地的 TBItemDetailViewController 來顯示
   if ([[url host] isEqualToString:@"list.vip.com"]) {
       // 這裡只是簡單地假設 url 形式為 vip://list.vip.com/item.htm?id=xxxxx
       // 先獲取要查看的寶貝詳情的 itemId
       NSString *itemId = [[url query] substringFromIndex:[[url query] rangeOfString:@"id="].location+3];
       // 使用本地 ViewController 來顯示詳情
       VipItemDetailViewController *controller = [[VipItemDetailViewController alloc] initWithItemId:itemId];
       [self.navigationController pushViewController:controller animated:YES];
   }
}
  • URL構建 

- (void)showItemInVipForiOS:(NSString *)itemId {
   // 構建客戶端協議的 URL
   NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"vip://list.vip.com/item.htm?id=%@", itemId]];
   // 判斷當前系統是安裝客戶端
   if ([[UIAPPlication sharedAPPlication] canOpenURL:url]){
       // 如果已經安裝客戶端,就使用客戶端打開鏈接
       [[UIAPPlication sharedAPPlication] openURL:url];
   } else {
       // 否則使用 Mobile Safari 或者內嵌 WebView 來顯示
       url = [NSURL URLWithString:[NSString stringWithFormat:@"http://list.vip.com/item.htm?id=%@", itemId]];
       [[UIAPPlication sharedAPPlication] openURL:url];
   }
}

注意:當前唯品會客戶端並不支持這樣的調用方式,這裡僅是一個示例。

  • URI Scheme存在的問題? 

URI Scheme能夠實現APP與APP之間的關聯,並且是無縫的。例如QQ音樂跳轉全民K歌,禮物說跳轉淘寶等等。由於H5相對於APP輕量,H5和APP要兼並開發。然而,從微信和微博的內置浏覽器查看H5頁面時,大部分APP不能夠回到APP查看相同的內容。例如知乎、今日頭條是可以的。它們需要從Safari打開zhihu://id=2370247&source=zhig才行。

通過Safari跳轉,如果用戶已安裝APP直接跳轉到APP中,如果用戶沒有安裝APP則跳轉到APP Store中下載,下載完成後打開APP不能到達用戶需要的頁面。

  • 怎麼解決這些問題呢? 

蘋果在iOS 9中推出Universal Links(通用連接) 一種能夠方便的通過傳統 HTTPS 鏈接來啟動 APP, 使用相同的網址打開網站和 APP。

通過唯一的網址, 不需要特別的URI Scheme就可以鏈接一個特定APP裡面的視圖 。比如:一個APP分享內容到微信,然後用戶在微信內置浏覽器中看到H5頁面內容,然後用戶觸發Universal Links後,直接打開APP內相同的頁面內容。

NOTE

Universal links let iOS 9 users open your APP when they tap links to your website within WKWebView andUIWebView views and Safari pages, in addition to links that result in a call to openURL:, such as those that occur in Mail, Messages, and other APPs.

For users who are running versions of iOS earlier than 9.0, tAPPing a universal link to your website opens the link in Safari. 

怎麼使用 Universal Links? 

Step1:創建一個JSON 格式的APPle-APP-site-association 文件如下:

{
     "APPlinks": {
         "APPs": [],
         "details": [
             {
                 "APPID": "9JA89QQLNQ.com.APPle.wwdc",
                 "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ]
             },
             {
                 "APPID": "TeamID.BundleID2",
                 "paths": [ "*" ]
             }
         ]
     }
 }

根據 paths 鍵設定允許的路徑列表, 或只是一個星號如果你想打開 APP 而不管路徑是什麼。

注意:paths 路徑是大小寫敏感的。

NOTE:The website paths you specify in the paths array are case sensitive.” 

“APPID”組成部分:TeamID + BundleId TeamID可以從蘋果開發賬號頁面“Your Account”下查看,BundleId就直接在工程裡看了。

Step2:上傳 APPle-APP-site-association 文件注意:

1、上傳到web server根目錄下;

2、web server 需要支持https,客戶端需要通告https訪問,並且不支持任何重定向;

upload it to the root of your HTTPS web server. The file needs to be accessible via HTTPS—without any redirects—at https:///APPle-APP-site-association. Next, you need to handle universal links in your APP. 

Step3:在 APP 裡處理通用鏈接

1、添加域名到 Capabilities在 Xcode 的 capabilities 裡 添加你的 APP 域名, 必須用 APPlinks: 前置它

blob.png

APP從上面的域名請求Step2中創建的JSON 文件 APPle-APP-site-association。當你第一次啟動 APP,它會從https://domain.com/APPle-APP-site-association下載這個文件。

2.在 APPDelegate 裡支持通用鏈接

實現:

- (BOOL)APPlication:(UIAPPlication *)APPlication continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler

方法。

當 userActivity 是 NSUserActivityTypeBrowsingWeb 類型, 則意味著它已經由通用鏈接 API 代理。這樣的話, 它保證用戶打開的 URL 將有一個非空的 webpageURL 屬性。

移動應用實現深度鏈接需要考慮非常多復雜的情況,比如支持各種手機機型、移動操作系統、浏覽器、系統版本等等,還要考慮到深度鏈接統計分析的諸多問題。這些問題都是建立在用戶已經安裝APP,如果沒有安裝APP,用戶下載安裝,打開APP是否能夠看到對應的頁面,將是非常困難的問題。

我們正致力於為移動開發者提供穩定、安全、免費的技術服務,幫助APP提高用戶增長,當擁有APP擁有流量之後,幫助APP實現流量變現。

參考連接 

  • http://iosdevelopertips.com/cocoa/launching-your-own-APPlication-via-a-custom-url-scheme.html

  • http://blog.csdn.net/ba_jie/article/details/6884818

  • https://www.linkedme.cc/

  • https://developer.APPle.com/library/ios/documentation/General/Conceptual/APPSearch/UniversalLinks.html#//APPle_ref/doc/uid/TP40016308-CH12-SW2


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved