如果想要更清晰的認識 URL Scheme 電話,我們需要了解下面幾個概念:
這樣壹對比就容易很明白的理解出了URL Scheme的真正含義,它是為了在iOS系統中定位對應的App然後執行對應的操作,復雜的URL Scheme還可以傳遞參數。
所以說了那麽多,有壹種跳轉方式可以既滿足跳轉的動態需求,也可以靈活的傳遞參數。這種方式就是使用URL Scheme進行動態跳轉。這也是我非常推薦的壹種使用方式。並且在壹些組件化開發的嘗試中,這種跳轉方式也帶來了很多便利。
第三方應用可以通過①給自己發送 URL Scheme 請求來證明沒有被劫持,如果沒有收到自己的 URL Scheme,就可以及時給用戶發送提醒;②利用 MobileCoreServices 服務中的 applicationsAvailableForHandlingURLScheme() 來查看所有註冊了該 URL Schemes 的應用和處理順序,從而檢測自己、或者別人的 URL Scheme 是否被劫持。
註冊自定義URL Scheme有兩種方式
這兩種註冊方式本質上其實是壹樣的只是位置不同。
我們需要在APPdelegate中實現相應的代理方法:
iOS 9.0以下
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
iOS 9.0以上
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
下面我們通過Safari來驗證:
在應用中調用URL Scheme需要是以下方法:
iOS10.0以下使用該方法:
- (BOOL)openURL:(NSURL*)url NS_DEPRECATED_IOS(2_0, 10_0, "Please use openURL:options:completionHandler: instead") NS_EXTENSION_UNAVAILABLE_IOS("");
iOS10.0以上使用該方法:
- (void)openURL:(NSURL*)url options:(NSDictionary<UIApplicationOpenExternalURLOptionsKey, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS("");
還有壹個方法可以判斷對應URL Scheme是否存在壹般和上述方法壹起使用:
- (BOOL)canOpenURL:(NSURL *)url NS_AVAILABLE_IOS(3_0);
下面來驗證壹下: