APP 之間跳轉實現

在談App內部的路由之前,先來談談在iOS系統間,不同App之間是怎麼實現跳轉的。

1. URL Scheme方式

iOS系統是默認支持URL Scheme的,具體見官方文檔。

比如說,在iPhone的Safari瀏覽器上面輸入如下的命令,會自動打開一些App:

// 打開郵箱 
 mailto:// 
// 給110撥打電話 
 tel://110

在iOS 9 之前只要在App的info.plist裏面添加URL types - URL Schemes,如下圖:

IMAGE
這裏就添加了一個com.ios.Qhomer的Scheme。這樣就可以在iPhone的Safari瀏覽器上面輸入:

com.ios.Qhomer://

就可以直接打開這個App了。

關於其他一些常見的App,可以從iTunes裏面下載到它的ipa文件,解壓,顯示包內容裏面可以找到info.plist文件,打開它,在裏面就可以相應的URL Scheme。

// 手機QQ
mqq://

// 微信
weixin://

// 新浪微博
sinaweibo://

// 餓了麼
eleme://

IMAGE
當然了,某些App對於調用URL Scheme比較敏感,它們不希望其他的App隨意的就調用自己。

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{
    NSLog(@"sourceApplication: %@", sourceApplication);
    NSLog(@"URL scheme:%@", [url scheme]);
    NSLog(@"URL query: %@", [url query]);

    if ([sourceApplication isEqualToString:@"com.tencent.weixin"]){
        // 允許打開
        return YES;
    }else{
        return NO;
    }
}

如果待調用的App已經運行了,那麼它的生命週期如下:

IMAGE

如果待調用的App在後臺,那麼它的生命週期如下:

IMAGE

明白了上面的生命週期之後,我們就可以通過調用application:openURL:sourceApplication:annotation:這個方法,來阻止一些App的隨意調用。

IMAGE

![IMAGE](quiver-image-url/CBED38D2D585CE63B428FAADE844D7A4.jpg =1240x698)

如上圖,餓了麼App允許通過URL Scheme調用,那麼我們可以在Safari裏面調用到餓了麼App。手機QQ不允許調用,我們在Safari裏面也就沒法跳轉過去。
關於App間的跳轉問題,感興趣的可以查看官方文檔Inter-App Communication

App也是可以直接跳轉到系統設置的。比如有些需求要求檢測用戶有沒有開啓某些系統權限,如果沒有開啓就彈框提示,點擊彈框的按鈕直接跳轉到系統設置裏面對應的設置界面。
iOS 10 支持通過 URL Scheme 跳轉到系統設置 iOS10跳轉系統設置的正確姿勢 關於 iOS 系統功能的 URL 彙總列表

2. Universal Links方式

雖然在微信內部開網頁會禁止所有的Scheme,但是iOS 9.0新增加了一項功能是Universal Links,使用這個功能可以使我們的App通過HTTP鏈接來啓動App。
1.如果安裝過App,不管在微信裏面http鏈接還是在Safari瀏覽器,還是其他第三方瀏覽器,都可以打開App。
2.如果沒有安裝過App,就會打開網頁。
具體設置需要3步:
1.App需要開啓Associated Domains服務,並設置Domains,注意必須要applinks:開頭。

IMAGE

2.域名必須要支持HTTPS。

3.上傳內容是Json格式的文件,文件名爲apple-app-site-association到自己域名的根目錄下,或者.well-known目錄下。iOS自動會去讀取這個文件。具體的文件內容請查看官方文檔

IMAGE

如果App支持了Universal Links方式,那麼可以在其他App裏面直接跳轉到我們自己的App裏面。如下圖,點擊鏈接,由於該鏈接會Matcher到我們設置的鏈接,所以菜單裏面會顯示用我們的App打開。

IMAGE

在瀏覽器裏面也是一樣的效果,如果是支持了Universal Links方式,訪問相應的URL,會有不同的效果。如下圖:

IMAGE

以上就是iOS系統中App間跳轉的二種方式。

從iOS 系統裏面支持的URL Scheme方式,我們可以看出,對於一個資源的訪問,蘋果也是用URI的方式來訪問的。

統一資源標識符(英語:Uniform Resource Identifier,或URI)是一個用於標識某一互聯網資源名稱的字符串。 該種標識允許用戶對網絡中(一般指萬維網)的資源通過特定的協議進行交互操作。URI的最常見的形式是統一資源定位符(URL)。

舉個例子:

IMAGE

這是一段URI,每一段都代表了對應的含義。對方接收到了這樣一串字符串,按照規則解析出來,就能獲取到所有的有用信息。
這個能給我們設計App組件間的路由帶來一些思路麼?如果我們想要定義一個三端(iOS,Android,H5)的統一訪問資源的方式,能用URI的這種方式實現麼?

節選: iOS 組件化 —— 路由設計思路分析 - 掘金.html
作者:餓了麼物流移動團隊
鏈接:https://juejin.im/post/5ab85a346fb9a028e52dd16e
來源:掘金
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章