一、先搞懂:Universal Link 是啥?

簡單説,它就是一個普通的 https 網址(比如https://xxx.com/app),但配置後能直接跳轉到你的 App 裏,不用經過 Safari 瀏覽器。比如用户在微信裏點這個鏈接,直接打開你的 App 對應頁面,而不是跳瀏覽器,體驗比傳統的 URL Scheme 好太多(不用彈 “是否打開 App” 的提示)。

二、配置前的準備(必須先搞定)

  1. 域名要求:要有一個已備案的域名,且支持HTTPS(必須用 SSL 證書,比如 Let’s Encrypt 免費證書也行);
  2. 開發者賬號:蘋果開發者賬號(付費,99 美元 / 年),用來配置 App ID 和簽名;
  3. Xcode:最新版 Xcode,用來配置項目;
  4. 文件服務器:能在域名根目錄 / 指定路徑放置配置文件(apple-app-site-association)。

三、分步配置(核心步驟,一步都不能少)

步驟 1:在蘋果開發者後台配置 App ID

  1. 登錄蘋果開發者中心,進入 “Certificates, Identifiers & Profiles”;
  2. 找到你的 App ID(沒有就新建),勾選 “Associated Domains”(關聯域名),保存並重新生成 Provisioning Profile(配置文件);
  3. 下載新的配置文件,導入到 Xcode 中。

步驟 2:在 Xcode 中配置關聯域名

  1. 打開 Xcode 項目,選擇 Targets → 你的 App → Signing & Capabilities;
  2. 點擊 “+ Capability”,添加 “Associated Domains”(關聯域名);
  3. 在 Domains 欄添加:applinks:你的域名(比如applinks:xxx.com),注意不要加 https,直接寫域名。

步驟 3:創建 apple-app-site-association 文件(關鍵)

這是蘋果用來驗證域名和 App 綁定關係的文件,無後綴、無擴展名(不是.txt,也不是.json)。

  1. 文件格式(JSON):

json

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "TeamID.BundleID",  // 替換成你的團隊ID+App Bundle ID
        "paths": [ "/app/*", "/" ]    // 匹配的路徑,*是通配符,比如/app/*表示https://xxx.com/app/xxx都能跳轉
      }
    ]
  }
}
  • TeamID:蘋果開發者後台 “Membership” 裏能看到;
  • BundleID:你的 App 的唯一標識(比如 com.xxx.xxx);
  • paths:指定哪些路徑能觸發跳轉,["*"]表示所有路徑都可以(測試用,正式環境建議精準匹配)。
  1. 放置文件:
  • 方式 1(推薦):放在域名的根目錄(比如https://xxx.com/apple-app-site-association);
  • 方式 2:放在.well-known目錄下(https://xxx.com/.well-known/apple-app-site-association);
  • 要求:文件必須能通過 HTTPS 訪問,且MIME 類型為 application/json(服務器配置,比如 Nginx 添加:add_header Content-Type application/json;)。

步驟 4:App 內處理跳轉邏輯

在 AppDelegate 或 SceneDelegate 中實現跳轉回調,處理鏈接對應的頁面:

swift

// iOS 13+ SceneDelegate
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        let url = userActivity.webpageURL  // 獲取跳轉的Universal Link地址
        if let url = url {
            // 解析url,跳轉到對應頁面
            print("跳轉鏈接:\(url)")
            // 示例:如果是https://xxx.com/app/detail,跳轉到詳情頁
            if url.path.contains("/app/detail") {
                // 執行跳轉邏輯
            }
        }
    }
}

// 兼容iOS 12及以下 AppDelegate
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        let url = userActivity.webpageURL
        // 同上,解析url並跳轉
    }
    return true
}

四、驗證與測試

1. 驗證 apple-app-site-association 文件

用蘋果官方驗證工具:https://app-site-association.cdn-apple.com/a/v1/你的域名比如https://app-site-association.cdn-apple.com/a/v1/xxx.com,能看到文件內容且無報錯就沒問題。

2. 真機測試(必須真機,模擬器不行)

  1. 用 Xcode 將 App 安裝到真機;
  2. 在 Safari 中輸入你的 Universal Link(比如https://xxx.com/app),長按鏈接會出現 “在 [你的 App 名] 中打開”;
  3. 直接點擊鏈接,能跳轉到 App 並觸發上面的回調方法,就是配置成功。

五、常見坑(新手必看)

  1. 文件訪問問題:apple-app-site-association 文件必須能被外網訪問,且沒有重定向;
  2. 簽名問題:Xcode 的簽名必須包含 Associated Domains,否則配置不生效;
  3. 路徑匹配:paths 配置要精準,比如/app/*不能寫成/App/*(大小寫敏感);
  4. 緩存問題:蘋果會緩存配置文件,測試時可重啓手機或重置設置(設置→通用→傳輸或還原 iPhone→還原→還原所有設置)。

總結

  1. Universal Link 配置核心是域名 HTTPS+apple-app-site-association 文件 + Xcode 關聯域名 + 開發者後台開啓權限
  2. 關鍵文件 apple-app-site-association 要無後綴、能通過 HTTPS 訪問,且 AppID 和路徑配置準確;
  3. 測試必須用真機,遇到不跳轉先檢查文件訪問和簽名配置。