iOS H5使用URL Scheme喚醒

在使用移動端設(shè)備訪問類似京東等平臺時,會發(fā)現(xiàn)右上角有個“立即打開”按鈕,如果當(dāng)前手機(jī)上又正好安裝了京東App,那就會直接喚醒App并打開對應(yīng)的“商品詳情”頁面;反之,如果沒有安裝則會跳轉(zhuǎn)至下載App的落地頁。本文主要以這個功能為例,描述如何實現(xiàn)iOS端通過Scheme喚醒。


截圖.jpg

配置注意點:

  1. Identifier必須配置為你當(dāng)前工程的bundle identifier
  2. URL Schemes必須獨(dú)一無二
iOS工程配置.png

接下來在JS代碼中,配置iOSUrl與上面的URL Schemes一致。

function openApp(){
    
    var iOSUrl = "projectcomApp://";//填URL Schemes

    var u = navigator.userAgent;
    var isIOS = !!u.match(/\i[^;]+;(U;)? CPU.+Mac OS X/);

    //判斷是否是iOS
    if(isIOS){

        window.location.href = iOSUrl;

        var loadDataTime = Date.now();
        setTimeOut(function()){
            var timeOutDateTime = Date.now();
            if(timeOutDateTime - loadDataTime < 1000){
                window.location.;//填下載App落地頁
            }
        }, 25);

    }
}

到此為止,喚醒功能就好了。用真機(jī)測試,用sarfari打開對應(yīng)界面,點擊按鈕就可以打開App了。
接下來,實現(xiàn)傳值商品ID,打開對應(yīng)的“商品詳情”頁面,需要通過H5寫邏輯傳值給原生實現(xiàn)。將上面代碼中iOSUrl參數(shù)修一下:

var iOSUrl = "projectcomApp://?product_id="+id;

在工程項目中AppDelegate.m中實現(xiàn)以下三個回調(diào),并打上斷點調(diào)試。注意:微信、支付寶SDK完成后返回App時也會走,注意判斷url.scheme區(qū)分開邏輯。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    
    return YES;
}

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

  return YES;
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{

    return YES;
}

取到url后將其解析,解析方法如下:

NSString*urlScheme=[url scheme];//獲取schema
NSString*urlHost=[url host];

if([urlScheme isEqualToString:@"projectcomApp"]){ //判斷Scheme

  NSDictionary *infoDic = [url.absoluteString ZB_dictionaryWithURLString];

  NSString *product_id = [infoDic objectForKey:@"product_id"];//獲得商品id
//TODO:跳轉(zhuǎn)商品詳情
}

注意:微信白名單機(jī)制會導(dǎo)致分享到微信的頁面無法正常打開原生App。

環(huán)路:原生分享->微信打開M站->喚醒原生跳轉(zhuǎn)至對應(yīng)界面。

附:微信分享功能實現(xiàn)

如果本文對你有所幫助記得點個喜歡哈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容