作為UIApplication單例對象的方法 openURL:
在iOS開發中經常用來實現在當前應用打開外部鏈接的需求比如跳轉到其他應用,跳轉應用隱私設置界面;還有相關API canOpenURL:
進行跳轉前判斷.而這個古老(iOS2時出現)的 openURL
方法將被現今iOS10出現的新API openURL:options:completionHandler:
所替代.
雖然關於該API的官方文檔補充完全,但所提供的信息足夠能讓開發者簡單了解使用最新API打開外部鏈接的API究有何異同.
新API的官方描述
首先來看官方文檔對iOS10的 What’s New in iOS UIKit部分對新API的描述
The new UIApplication method openURL:options:completionHandler:, which is executed asynchronously and calls the specified completion handler on the main queue (this method replaces openURL:).
這段話清楚地指明了新API的兩個特點:異步執行open操作和主線程執行回調.
新API的代碼描述
接下來再看看具體的接口代碼,可以看出判斷鏈接打開是否成功的方式也從以前的根據 openURL
調用return的布爾值變成了查詢completion的success參數;
// old
- (BOOL)openURL:(NSURL*)url
// new
- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion
並且額外地提供了一個用來URL處理的options字典參數,沒有限定值時就要傳空字典,就像下方代碼一樣調用.
[[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];
options目前可傳入參數Key在UIApplication頭文件只有一個:UIApplicationOpenURLOptionUniversalLinksOnly,其對應的Value為布爾值,默認為False.
如該Key對應的Value為True,那么打開所傳入的Universal Link時,只允許通過這個Link所代表的iOS應用跳轉的方式打開這個鏈接,否則就會返回success為false,
也就是說只有安裝了Link所對應的App的情況下才能打開這個Universal Link,而不是通過啟動Safari方式打開這個Link的代表的網站.
[application openURL:URL options:@{UIApplicationOpenURLOptionUniversalLinksOnly : @YES} completionHandler:nil];