Swift 深層連結解析教學

在這篇文章中,我們將學習如何在 Swift 中解析深層連結(Scheme Deep Link)。深層連結允許用戶通過點擊特定的 URL 直接跳轉到應用程式的某個頁面或啟動特定功能。例如,使用 Line 應用程式的 `line://msg/text/+文字`,可以直接傳遞訊息並啟動 Line 應用程式。

深層連結範例

以下是一個簡單的範例,展示了如何定義深層連結:

stevenApp://test.com:80/12345;param?account=1&password=2#fragment

這個 URL 包含了幾個部分,讓我們來逐一解析它們的意義。

監聽深層連結事件

在應用程式中,我們需要實作一個方法來監聽並處理這些連結。以下是實作範例:

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    let result = ApplicationDelegate.shared.application(app, open: url, options: options)
    if url.host == nil {
        return true
    }
    print("url: \(url)")
    print("scheme: \(url.scheme ?? "")")
    print("host: \(url.host ?? "")")
    print("port: \(url.port ?? 0)")
    print("pathComponents: \(url.pathComponents)")
    print("query: \(url.query ?? "")")
    print("fragment: \(url.fragment ?? "")")
    return result
}

深層連結各部分解析

  • **scheme**: 你所設定的應用程式連結,例如 Line 是 `line://`。
  • **host**: 主 URL。
  • **port**: 連接的端口號,若沒有則為 nil。
  • **pathComponents**: 子分層地址。
  • **query**: GET 傳送的參數。
  • **fragment**: 分層部分。

範例輸出

當你透過深層連結啟動應用程式時,你可能會看到類似以下的輸出:

url: stevenApp://test.com:80/12345;param?account=1&password=2#fragment
scheme: stevenApp
host: test.com
port: 80
pathComponents: ["/", "12345;param"]
query: account=1&password=2
fragment: fragment

URL Query 解析器

擴展 `URL` 類別來解析 URL 中的 GET 參數並將其轉換為字典形式,這樣更方便使用:

extension URL {
    /// 解析 URL 的 GET 參數轉為 Dictionary
    var params: [String: String]? {
        if let urlComponents = URLComponents(url: self, resolvingAgainstBaseURL: true) {
            if let queryItems = urlComponents.queryItems {
                var params = [String: String]()
                queryItems.forEach {
                    params[$0.name] = $0.value
                }
                return params
            }
        }
        return nil
    }
}

在 AppDelegate 中使用

在 `AppDelegate` 中打印解析得到的參數:

print("url params: \(String(describing: url.params))")

範例輸出

當解析成功後,輸出可能會顯示為:

url params: Optional(["password": "2", "account": "1"])


深層連結示例圖片

Q&A(常見問題解答)

Q1: 深層連結有什麼應用場景?

A1: 深層連結可用於行銷活動、推廣特定內容、用戶再行導向及提升用戶體驗等。

Q2: 如何測試深層連結功能是否正常?

A2: 可使用 Xcode 的 Debug 模式,或通過其他應用程式(如 Safari)點擊深層連結來測試。

Q3: 深層連結在不同平台上的差異是什麼?

A3: 在 iOS 和 Android 上,深層連結的實作方式有所不同,需針對不同平台進行相應的設定與處理。

Categorized in:

Tagged in:

, ,