iOS兩個(gè)應(yīng)用之間的跳轉(zhuǎn)

iOS兩個(gè)獨(dú)立的App之間的跳轉(zhuǎn)實(shí)現(xiàn):

URL

一個(gè)完整的URL組成包括:協(xié)議類(lèi)型、服務(wù)地址、資源路徑、請(qǐng)求參數(shù),如果不是通過(guò)第三方平臺(tái)的SDK來(lái)進(jìn)行應(yīng)用間的跳轉(zhuǎn),就需要開(kāi)發(fā)者自己在鏈接中拼接對(duì)應(yīng)需要傳遞的參數(shù)。一個(gè)NSURL封裝的一個(gè)完整地址包括:協(xié)議、域名、路徑、參數(shù)。

跳轉(zhuǎn)原理

兩個(gè)獨(dú)立的App,從一個(gè)App跳轉(zhuǎn)打開(kāi)另外一個(gè)App,涉及到的是這兩個(gè)App之間的通信交互功能,蘋(píng)果有個(gè)一專(zhuān)門(mén)的管理類(lèi)UIApplication,這個(gè)類(lèi)其實(shí)就代表應(yīng)用程序。在UIApplication類(lèi)有一個(gè)方法:

- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS("");

這個(gè)方法是通過(guò)應(yīng)用程序打開(kāi)一個(gè)資源路徑。比如一些我們經(jīng)常用到的打電話、發(fā)短信、發(fā)郵件等等都會(huì)用到這個(gè)方法。

一個(gè)App能打開(kāi)另外一個(gè)App的必然條件就是:另外一個(gè)App必須配置一個(gè)scheme協(xié)議,這樣應(yīng)用才能根據(jù)協(xié)議找到需要打開(kāi)的應(yīng)用。

兩個(gè)應(yīng)用之間的跳轉(zhuǎn)

創(chuàng)建兩個(gè)測(cè)試應(yīng)用:OpenURLFirst和OpenURLSecond。我們實(shí)現(xiàn)通過(guò)URL從OpenURLFirst跳轉(zhuǎn)到OpenURLSecond的某個(gè)頁(yè)面并傳遞信息。

首先OpenURLFirst如果能跳轉(zhuǎn)到OpenURLSecond,要在被跳轉(zhuǎn)的應(yīng)用配置一個(gè)scheme協(xié)議,然后隨便命名一個(gè)名字,這里我命名為zcNightelf(貌似不區(qū)分大小寫(xiě))。

配置URL Schemes(使用info.plist文件)

第二種方法

配置完成后運(yùn)行,可以直接在Safari中輸入zcnightelf:// 來(lái)打開(kāi)應(yīng)用。

在OpenURLFirst中使用如下代碼進(jìn)行跳轉(zhuǎn):

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"zcNightelf://"]]) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"zcNightelf://"] options:nil completionHandler:nil];
    }

如果需要回跳至第一個(gè)應(yīng)用,也需要在第一個(gè)應(yīng)用配置scheme,然后在第二個(gè)應(yīng)用中調(diào)用跳轉(zhuǎn)的代碼。方法相同。

如果需要跳轉(zhuǎn)到第二個(gè)應(yīng)用的某個(gè)頁(yè)面,需要設(shè)置跳轉(zhuǎn)的URL。例如,需要跳轉(zhuǎn)到第二個(gè)應(yīng)用的第一個(gè)頁(yè)面,url可以改為zcnightelf://one。然后在第二個(gè)應(yīng)用的AppDelegate.m中,實(shí)現(xiàn)如下代碼進(jìn)行判斷跳轉(zhuǎn)至某個(gè)頁(yè)面:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{
    // 通過(guò)url的host判斷需要跳轉(zhuǎn)的頁(yè)面進(jìn)行處理
    if ([url.host isEqualToString:@"one"]) {

    }
    if ([url.host isEqualToString:@"two"]) {
 
    }
    return YES;
}

附上Demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容