點選連結跳轉到應用指定頁面

weixin_34402408發表於2018-12-25

公司最近做掃碼跳轉功能,其實有點類似淘寶貼上連結後的跳轉,原理其實是一樣的,下面說一下我的處理。

因為iOS的原因,這邊從第三方掃碼裡進入的話統一提示使用者使用Safari開啟,開啟後自動提示是否跳轉到“XXX APP”,在下方處理你點選連結後獲取的內容。在這裡,需要連結裡有一個特殊的字元,你能判斷這是你自己的連結後做的操作,否則會任意一個連結都會進入此方法。

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

這種情況是APP已經開了一個程式在後臺,於是要保證APP在任何介面下都能跳轉到指定的頁面,於是我們要在APPDelegate處理跳轉,在這裡做跳轉主要就是要獲取到當前可視的控制器,獲取到當前的控制器後用push方法即可。如下程式碼所示:

獲取到當前控制器
-(UIViewController *)currentViewController
{
    
    UIViewController * currVC = nil;
    UIViewController * Rootvc = self.window.rootViewController ;
    do {
        if ([Rootvc isKindOfClass:[UINavigationController class]]) {
            UINavigationController * nav = (UINavigationController *)Rootvc;
            UIViewController * v = [nav.viewControllers lastObject];
            currVC = v;
            Rootvc = v.presentedViewController;
            continue;
        }else if([Rootvc isKindOfClass:[UITabBarController class]]){
            UITabBarController * tabVC = (UITabBarController *)Rootvc;
            currVC = tabVC;
            Rootvc = [tabVC.viewControllers objectAtIndex:tabVC.selectedIndex];
            continue;
        }else if ([Rootvc isKindOfClass:[XXXCustom class]]){
            XXXCustom * tabVC = (XXXCustom *)Rootvc;
            currVC = tabVC;
            Rootvc = tabVC.selectedViewController;
            continue;
        } 
    } while (Rootvc!=nil);
    

    return currVC;
}

用獲取到的控制器再到openURL方法裡,push控制器即可。

當然,大家在實際開發中的時候,有很多其他的判斷條件,要考慮到是否登入,是否有許可權等,所以開發結合實際情況在跳轉前做自己的相應操作即可。

相關文章