iOS通用鏈接(UniversalLink)配置詳細流程

簡介

Universal Links 是蘋果自iOS9.0推出的用于應用之間跳轉的一種安全認證機制,主要用來通過HTTPS鏈接來無縫啟動APP。手機中如果安裝了支持該鏈接的APP就會直接進入到APP中。如果沒有安裝APP則會跳轉到Safari瀏覽器中,展示H5頁面。

一、Universal Links 配置過程

  1. 登錄蘋果賬號后,點擊創建的APP 的Bundle ID,跳轉到APP 信息頁面。
  2. 記錄下Team IDBundle ID 備用。
  3. 勾選上 功能列表上的 ”Associated Domains“選項。
配置蘋果后臺
  1. 創建一個text空文本文件,去掉文件后綴,命名為apple-app-site-association(不能修改,且不能添加后綴)。
  2. 文件內添加json格式數據,內容如下
{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID":"8ARUHGUQNH.com.YHKJ.AppSample",
                "paths": [ "/AppSample/*"]
            }
        ]
    }
}

如果一個域名下面有多端APP,可寫作

{
    "applinks":{
        "apps":[],
        "details":[
            {
                "appID":"8ARUHGUQNH.com.YHKJ.AppSample",
                "paths":["/AppSample/*"]
            }
            {
                "appID":"8ARUHGUQNH.com.YHKJ.appManage",
                "paths":["/manageAppSample/*"]
            }
        ]
    }
}

apps:為必寫且固定為[ ]
appID是指:TeamID.BundleId的組成
paths:是一個支持的路徑列表字符串數組,可以是一個也可以是多個,用于過濾可以跳轉到App的鏈接,支持通配符*,通配符表示允許該域名下的任意路徑。
details數組中可以配置多個APP的信息,如果有多個APP需要支持Universal,則可以直接添加多個。
嚴格區分字母大小寫

  1. apple-app-site-association文件創建好后 發給后臺,讓后臺放到域名的服務器根目錄下,也可以在根目錄中添加.well-known文件夾,將文件上傳到.well-known文件夾下(.點一定不能少),對應連接分別為
https://xxx/apple-app-site-association
https://xxx/.well-known/apple-app-site-association
xxx為服務端的域名
  1. 打開你的iOS工程,如下添加“Associated Domains”功能 和 域名地址,
    applinks:域名地址,Domains中的域名必須是使用applinks開頭。
添加Associated Domains
添加域名地址

二、測試Universal Link鏈接

蘋果提供了一個網頁來驗證我們編寫的這個apple-app-site-association文件是否合法有效,
https://search.developer.apple.com/appsearch-validation-tool/

如果 Universal Link 配置成功,在iOS自帶Safari瀏覽器中,打開 Universal Link 鏈接,下拉會出現應用入口,點擊“打開”可以跳轉至原生App;如打開微信的 Universal Link : https://help.wechat.com/app/ 如下圖

打開微信通用鏈接

二 、Universal Link 的運行機制原理

  1. 當App初次安裝后或者更新版本后的第一次啟動(第二次啟動就不會),向工程配置的applinks:的域名請求apple-app-site-association配置文件。
  2. App自動的將apple-app-site-association配置文件向iOS系統配置。
  3. 當任何WebView發起UniversalLink的url的時候,系統遍歷注冊過的通用鏈接,如果命中則直接打開App觸發Delegate方法。
  4. 如果沒命中,WebView繼續跳轉加載url。
    以上都是系統默默替你做的,我們要做的就是確保配置的正確性。

三 、注意事項

  1. 服務器的域名地址必須是HTTPS的,并且SSL證書必須通過蘋果信任。蘋果支持的HTTPS證書列表
  2. apple-app-site-association名稱不能變,不能加后綴,只能放在上面說的服務器位置。但是 iOS 會先去請求.well-known 路徑,如果apple-app-site-association文件請求不到,再去請求根目錄,所以如果想要避免服務器接收過多GET請求,可以直接把apple-app-site-association文件放到well-known目錄下。
  3. 服務器上apple-app-site-association的更新不會讓iOS本地的apple-app-site-association同步更新,Universal Link的更新 只有在APP第一次安裝 和 更新版本的時候,如果Universal Link有變更,只能重新打包發版,然后讓用戶更新版本或者卸載重裝。
  4. 跨域問題,如果由當前網頁跳轉Universal Link打開APP,當前網頁的域名和Universal Link 的域名必須 不能一致,否則不會跳轉,只會在當前的WebView里面跳轉。
  5. 由瀏覽器或其他app應用跳轉進入我自己的APP時接收回調,要在AppDelegate.m/SceneDelegate.m中實現下面回調方法:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
    // NSUserActivityTypeBrowsingWeb 由Universal Links喚醒的APP
    if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        return YES;
    }
    NSURL *jumpUrl = userActivity.webpageURL; // 這個URL就是你跳轉的那個URL,下載頁地址,想要傳參數可以直接在URL后面拼接
    // TODO:在這里進行跳轉具體頁面的操作
    return YES;
}

四 、Universal LinksURL Scheme

另一種 外部喚起App 的方式是URL Scheme,但是URL Scheme有一些弊端。

  1. Universal Links 具有唯一性,比較安全。它是使用標準的HTTPS協議鏈接到你的web站點,所以一般不會被其它的APP所聲明。而URL Scheme是由開發者自定義的,沒有限制,任何App都可以用同一個名字,有些釣魚App可以 設置知名的APP 的URL Scheme 來欺騙用戶。

  2. URL Scheme可以通過canOpenURL判斷用戶是否安裝App,但是只有安裝了APP才能跳轉,未安裝則沒有效果。而Universal Links 如果安裝了就跳轉APP,如果未安裝就跳轉網頁展示你網站的內容,比較靈活。

  3. 使用scheme跳轉系統會彈框提示,替換成UL鏈接后可以實現無縫跳轉。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容