iOS-UniversalLink開發(fā)

Universal Link 介紹

Universal Link是蘋果在WWDC 2015上提出的iOS 9的新特性之一。此特性類似于深層鏈接,并能夠方便地通過打開一個Https鏈接來直接啟動您的客戶端應用(手機有安裝App)。對比起以往所使用的URL Sheme, 這種新特性在實現(xiàn)web-app的無縫鏈接時能夠提供極佳的用戶體驗。

這具體是一種怎樣的情景呢?舉個例子,你的用戶在微信里面瀏覽一個你們公司的網(wǎng)頁,而此時用戶手機也同時安裝有你們公司的App ;而universal link 能夠使的用戶在打開某個詳情頁時直接打開你的app 并到達app中相應內(nèi)容的頁面,從而實施用戶想要的操作(例如查看某條新聞,例如查看某個商品的明細)

以下分別為URL Scheme方式及Universal Link的方式呈現(xiàn)場景恢復的過程
以下為URL Scheme方式: (第一張圖是在微信中瀏覽web,下同)

下面是用Universal Link方式:

ul

通過上述對比得知,Universal Link能夠直接從微信中打開App,比起以往的URL Scheme的方式能夠大大改善用戶體驗。

Univerasl Link的準備工作

  • 擁有自己的域名,且此域名網(wǎng)站支持https
  • 能夠上傳文件apple-app-site-association到自己的域名
  • 只支持iOS 9以上

注:可以使用三方服務,MobLink已經(jīng)幫您完成了上面所有的工作,免費為您提供Universal Link服務。使用MobLink提供的技術方案,無論您是否iOS9以上,都能夠助您實現(xiàn) Web與App 之間的完美交互。

集成步驟

  1. 開啟Associated Domains服務
    image.png

注意:有的app會區(qū)分線上包和測試包,不同賬號下的都需要設置App ID才行,前往不要忘記。

2.開啟Associated Domains服務
在xcode工程的Capabilities -> Associated Domains中添加跳轉(zhuǎn)域名,域名的格式為:
applinks:www.example.com

image.png

注意:
你的服務器必須支持SSL
Domains可以添加多個
Domains必須以applinks: 開頭

3.配置apple-app-site-association文件,官方文檔如下:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

  • apps項必須對應一個空的數(shù)組

  • details項對應一個字典的數(shù)組,

  • appID對應項由前綴和ID兩部分組成,可以在developer中的Identifiers→AppIDs中點擊對應的App ID查看。

    image.png

  • paths對應域名中的path,用于過濾可以跳轉(zhuǎn)到App的鏈接,支持通配符*?以及NOT進行匹配,匹配的優(yōu)先級是從左至右依次降低

  • 建議配置上path,同一公司可能多款app有次需求,不同的path有益于后期的擴展。

  • 最后,需要把配置好的json文件上傳到服務器中該域名的根目錄下,也就是說,我們可以用GET請求可以獲取到這個apple-app-association文件。

當我們的App在設備上第一次運行時,如果支持Associated Domains功能,那么iOS會自動去GET定義的Domain下的apple-app-site-association文件。
需要留意iOS會先請求 https://domain.com/.well-known/apple-app-site-association
如果此文件請求不到,再去請求 https://domain.com/apple-app-site-association。 所以如果想要避免服務器接收過多GET請求,可以直接把apple-app-site-association放在./well-known/目錄下。

4.Appdelegate增加如下代碼

#pragma mark Universal Link
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *url = userActivity.webpageURL;
       // TODO 根據(jù)需求進行處理
    }
      // TODO 根據(jù)需求進行處理
    return YES;
}

在Safari中點擊鏈接打開App后,會發(fā)現(xiàn)App的右上角的navigationBar會有一串網(wǎng)址的鏈接箭頭,
如果你點擊了它,它會跳轉(zhuǎn)到Safari,同時系統(tǒng)會默認你選擇用Safari來打開該域名的鏈接,而不用app打開,也就是說下次你再點擊該鏈接,它只會在Safari中打開,不會在App中打開了。

那么如何開啟app跳轉(zhuǎn)呢?有兩種方法:
第一種,在Safari頁面中,手指往下拉一下頁面,會顯示一個“隱藏”的banner,俗稱為 smart banner,右側(cè)有一個button,點擊它,就開啟App跳轉(zhuǎn)功能了。
第二種,長按跳轉(zhuǎn)鏈接,底下會彈出一些選項,選擇在App中打開,同樣可以開啟這個功能。

apple-app-site-association 文件注意格式是否正確 中文字符不識別

總結

  • apple-app-site-association不需要.json后綴。

  • 如果要對沒有path的域名進行支持(如:www.163.com),在json文件的paths中用通配符’*’是不行的,需要在paths數(shù)組中加入’/’進行匹配。

  • 對json文件的請求僅在App第一次啟動時進行,如果此時網(wǎng)絡連接出了問題apple會緩存請求,等有網(wǎng)的時候再去請求,而實際測試抓包并沒有請求故通用連接會失效。

  • paths匹配的優(yōu)先級是從左至右依次降低,但需要明確,否則會出問題。比如"paths":[ "NOT /together/",""],在IOS9.2上path為/together/*都不會跳到App,但是在IOS9.0上會跳到。

  • iOS 9.2開始,在相同的domain內(nèi)Universal Links是不work的,必須要跨域才生效

參考文章:
蘋果官方文檔
mob
iOS的UniversalLink開發(fā)總結

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容