在使用移動端設(shè)備訪問類似京東等平臺時,會發(fā)現(xiàn)右上角有個“立即打開”按鈕,如果當(dāng)前手機(jī)上又正好安裝了京東App,那就會直接喚醒App并打開對應(yīng)的“商品詳情”頁面;反之,如果沒有安裝則會跳轉(zhuǎn)至下載App的落地頁。本文主要以這個功能為例,描述如何實現(xiàn)iOS端通過Scheme喚醒。
截圖.jpg
配置注意點:
- Identifier必須配置為你當(dāng)前工程的bundle identifier
- 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)界面。
如果本文對你有所幫助記得點個喜歡哈