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 上,深層連結的實作方式有所不同,需針對不同平台進行相應的設定與處理。
—