Universal Link & URL Scheme
Universal Link & URL Scheme
如果你希望在 App A 按一個按鈕,立即切換至 App B
或是用手機瀏覽網頁時,按一個連結,自動打開 App
這個時候,需要使用的技術有二個,一個叫 URL Scheme, 一個叫 Universal Link,見下圖
這二種技術略有不同,分析如下:
程式範例
iOS URL Scheme (Objective C)
[application openURL:[NSURL URLWithString:@"iotecapp1://page/12"] options:@{} completionHandler:^(BOOL success) {}];
Universal Link (HTML)
<a href="https://www.iotec.tw/page/12">Open IOTEC App </a>
設定方式
iOS URL Scheme
Xcode > TARGETS > your_app > Info > URL Types 下增加 URL Scheme 為 iotecapp1
Universal Link
- Xcode > TARGETS >your_app > Capabilities > Associated Domains 增加 applinks:www.iotec.tw
- www.iotec.tw 要支援 HTTPS
- 編寫 apple-app-site-association (詳見官方文件)
註一: 文件類型需為 json且無副檔名
註二:如果要支援 iOS 8, 還需要 sign 這個檔案,不過現在 iOS 8 (含)以下市佔率不足3%,還是算了吧~ - 將 apple-app-site-association 放至 https://www.iotec.tw/ 下 或是
https://www.iotec.tw/.well-known/下 - 到 Apple Developer webpage 去將 App 的 Associated Domain 功能打開
可否接收完整 URL(也就是說,可否傳遞參數?)
iOS URL Scheme &Universal Link
二者皆可。可以取得完整的 URL,把後面的參數部份取出即可。
例: iotecapp1://page/12 後面的 page 與 12 等等即可傳遞參數
觸發方法 (iOS Objective C, AppDelegate.m)
URL Scheme
- (BOOL)application:(UIApplication *) application openURL:(NSURL *)url options: (NSDictionary <UIApplicationOpenURLOptionsKey, id>*)options;
Universal Link
-(BOOL) application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler;
從網頁觸發時,如果沒有裝 App, 可否導向指定網頁?
URL Scheme
Partially YES
可以用 Timeout 方式處理,但不是 100% 成功
Universal Link
可以無縫接軌
可否從 APP 觸發?
URL Scheme
沒有問題,還可以判斷另一個 APP 是否有安裝
[application openURL:URL options:@{} completionHandler:^(BOOL success) {
if (success) {
NSLog(@"Opened URL Scheme %@",scheme);
}else{
NSLog(@"Opened URL Scheme %@ FAILED",scheme);
}
}];
Universal Link
有些情況下可能有問題
用 UIWebview 或是用 SFSafariViewController 開啟 Universal Link
在官方文件上似乎是不建議的作法,
有文章提到 UIWebView 裡必需要在切換 domain 時才會觸發 Universal
Link。實際上會發生什麼事還需要有用過的人交流一下。
安全性?
URL Scheme
因為任何 APP 都可以註冊自己處理 iotecapp1的
prefix 的 URL Scheme,這會有潛在性的安全問題。
Ex: 如果您的官網透過 URL Scheme 來開啟您的 APP,使用的 URL Scheme prefix 為
“yellow://…”, 而很不巧的剛好有個限制級 APP 也使用 yellow 作為 URL Scheme prefix,
那麼就會有機率開錯了 App…
雖然手機上為何會裝該 APP 使用者本身也要負一點責任…. 不過這邊的行為與設計原意就不一致了
Universal Link
相對安全很多
參考官方文件
Support Universal Links