iOS--App之間的跳轉(zhuǎn)

情景:客戶端A跳轉(zhuǎn)到客戶端B

客戶端B:

1、在URL Type添加URL Schemes---注意URL Schemes要保證唯一性,不能與其他app相同,否則可能會跳轉(zhuǎn)到其他App,如你的App名字叫BaiXingShengHuo,那么你的URL Schemes可以設(shè)置為iOSBaiXingShengHuoApp

截屏2021-03-05 上午10.15.17.png

如上設(shè)置后,在網(wǎng)頁搜索iOSBaiXingShengHuoApp://,就可以跳轉(zhuǎn)到客戶端B.(h5頁面也可以根據(jù)iOSBaiXingShengHuoApp://這個跳轉(zhuǎn)到客戶端B)
2、跳轉(zhuǎn)到特定頁面
比如我們需要跳轉(zhuǎn)到某一個詳情頁面,iOSBaiXingShengHuoApp://pageType?name=tom其打開App會調(diào)用AppDelegate的代理方法:

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options

我們可以拿到參數(shù)url,url為:iOSBaiXingShengHuoApp://pageType?name=tom接下來我們可以對其進(jìn)行操作。

  • url.scheme:可以獲取到iOSCompanyApp,我們可以對其判斷然后進(jìn)行后續(xù)操作。
  • url.host:可以獲取到pageType,個人覺得,可以在此判斷需跳轉(zhuǎn)的頁面。
  • url.query:可以獲取到name=tom,在此可以進(jìn)行切割字符串,獲取參數(shù)。
/**獲取Window當(dāng)前顯示的ViewController*/
- (UIViewController*)currentViewController{
    //獲得當(dāng)前活動窗口的根視圖
    UIViewController* vc = [UIApplication sharedApplication].keyWindow.rootViewController;
    while (1)
    {
        //根據(jù)不同的頁面切換方式,逐步取得最上層的viewController
        if ([vc isKindOfClass:[UITabBarController class]]) {
            vc = ((UITabBarController*)vc).selectedViewController;
        }
        if ([vc isKindOfClass:[UINavigationController class]]) {
            vc = ((UINavigationController*)vc).visibleViewController;
        }
        if (vc.presentedViewController) {
            vc = vc.presentedViewController;
        }else{
             break;
         }
     }
     return vc;
 }

在swift中通過url打開App,調(diào)用方法為

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts;

實現(xiàn)

    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        let context = URLContexts.first
        let vc = self.currentVC()
        let detailVC = MJDetailViewController.init()
        if vc.isKind(of: UINavigationController.self) {
            let navi : UINavigationController = vc as! UINavigationController
            
            navi.pushViewController(detailVC, animated: true)
        }
    }

客戶端A:


        NSURL *url = [NSURL URLWithString:@"iOSBaiXingShengHuoApp://"];
        if ([[UIApplication sharedApplication] canOpenURL:url]) {
        //設(shè)備安裝了客戶端B 
            //打開url
//            [[UIApplication sharedApplication] openURL:url];
            [[UIApplication sharedApplication]openURL:url options:@{} completionHandler:^(BOOL success) {
                
            }];
        }else {
         //設(shè)備沒有安裝客戶端 B,打開AppStore去下載
            NSString *appid = @"123456";
            NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/cn/app/id%@", appid];
            NSURL *url = [NSURL URLWithString:str];
            [[UIApplication sharedApplication]openURL:url options:@{} completionHandler:^(BOOL success) {
                
            }];
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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