美文网首页iOS开发
iOS H5使用URL Scheme唤醒

iOS H5使用URL Scheme唤醒

作者: Geniune | 来源:发表于2018-12-17 15:57 被阅读105次

    在使用移动端设备访问类似京东等平台时,会发现右上角有个“立即打开”按钮,如果当前手机上又正好安装了京东App,那就会直接唤醒App并打开对应的“商品详情”页面;反之,如果没有安装则会跳转至下载App的落地页。本文主要以这个功能为例,描述如何实现iOS端通过Scheme唤醒。


    截图.jpg

    配置注意点:

    1. Identifier必须配置为你当前工程的bundle identifier
    2. URL Schemes必须独一无二
    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.href = "https://www.app.com/download.html";//填下载App落地页
                }
            }, 25);
    
        }
    }
    

    到此为止,唤醒功能就好了。用真机测试,用sarfari打开对应界面,点击按钮就可以打开App了。
    接下来,实现传值商品ID,打开对应的“商品详情”页面,需要通过H5写逻辑传值给原生实现。将上面代码中iOSUrl参数修一下:

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

    在工程项目中AppDelegate.m中实现以下三个回调,并打上断点调试。注意:微信、支付宝SDK完成后返回App时也会走,注意判断url.scheme区分开逻辑。

    - (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:跳转商品详情
    }
    
    

    注意:微信白名单机制会导致分享到微信的页面无法正常打开原生App。

    环路:原生分享->微信打开M站->唤醒原生跳转至对应界面。

    附:微信分享功能实现

    如果本文对你有所帮助记得点个喜欢哈

    相关文章

      网友评论

        本文标题:iOS H5使用URL Scheme唤醒

        本文链接:https://www.haomeiwen.com/subject/xyxckqtx.html