中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LinkedME|Deep Linking技術你真的了解嗎

發布時間:2020-07-30 18:53:19 來源:網絡 閱讀:687 作者:LinkedME 欄目:移動開發

本文作者徐斌,原騰信IOS工程師,現LinkedME高級工程師。



  • SandBox是什么? 

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

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

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

  1. 應用程序的數據請求需要經過權限檢測,檢測不通過則不執行


  • 為什么要使用沙盒機制? 

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。

LinkedME|Deep Linking技術你真的了解嗎


  • 代碼實現 

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

  1. - (void)APPlication:(UIAPPlication *)APPlication handleOpenURL:(NSURL *)url {

  1.    // 在 host 等于 list.vip.com,說明這是唯品會的寶貝詳情url,

  1.    // 那么就使用本地的 TBItemDetailViewController 來顯示

  1.    if ([[url host] isEqualToString:@"list.vip.com"]) {

  1.        // 這里只是簡單地假設 url 形式為 vip://list.vip.com/item.htm?id=xxxxx

  1.        // 先獲取要查看的寶貝詳情的 itemId

  1.        NSString *itemId = [[url query] substringFromIndex:[[url query] rangeOfString:@"id="].location+3];

  1.        // 使用本地 ViewController 來顯示詳情

  1.        VipItemDetailViewController *controller = [[VipItemDetailViewController alloc] initWithItemId:itemId];

  1.        [self.navigationController pushViewController:controller animated:YES];

  1.    }


  • URL構建 

  1. - (void)showItemInVipForiOS:(NSString *)itemId {

  1.    // 構建客戶端協議的 URL

  1.    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"vip://list.vip.com/item.htm?id=%@", itemId]];

  1.    // 判斷當前系統是安裝客戶端

  1.    if ([[UIAPPlication sharedAPPlication] canOpenURL:url]){

  1.        // 如果已經安裝客戶端,就使用客戶端打開鏈接

  1.        [[UIAPPlication sharedAPPlication] openURL:url];

  1.    } else {

  1.        // 否則使用 Mobile Safari 或者內嵌 WebView 來顯示

  1.        url = [NSURL URLWithString:[NSString stringWithFormat:@"http://list.vip.com/item.htm?id=%@", itemId]];

  1.        [[UIAPPlication sharedAPPlication] openURL:url];

  1.    }

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


  • 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 文件如下:

  1. {

  1.      "APPlinks": {

  1.          "APPs": [],

  1.          "details": [

  1.              {

  1.                  "APPID": "9JA89QQLNQ.com.APPle.wwdc",

  1.                  "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ]

  1.              },

  1.              {

  1.                  "APPID": "TeamID.BundleID2",

  1.                  "paths": [ "*" ]

  1.              }

  1.          ]

  1.      }

  1.  } 

根據 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: 前置它

LinkedME|Deep Linking技術你真的了解嗎

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實現流量變現。



參考連接 

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

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

3.https://www.linkedme.cc/

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



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庆云县| 柳林县| 六枝特区| 甘洛县| 南昌市| 八宿县| 武安市| 锦州市| 扎鲁特旗| 梅河口市| 黄浦区| 苍南县| 白水县| 韶山市| 平泉县| 三原县| 迁西县| 和平县| 富川| 天台县| 衡水市| 道孚县| 望城县| 长治县| 吴江市| 南雄市| 晋宁县| 阿坝| 屯留县| 仪征市| 汝州市| 大竹县| 同仁县| 定日县| 西充县| 营山县| 芦溪县| 诏安县| 建德市| 广河县| 会泽县|