• 在iOS应用内对Universal Links跳转做拦截,屏蔽自动跳转app


    最近发现在自己项目中打开优酷、腾讯视频、知乎等网站时,点击跳转或打开此App时,如果已经预装过软件的话会很顺畅的直接跳转过去,会导致用户直接去使用第三方,影响用户的使用自己产品的时间。而在使用UC浏览器做相应操作的时候会弹出SKStoreProductViewController应用内下载界面,这样会让很多用户放弃跳转第三方app的行为。

    首先要知道一般iOS应用内跳转的行为有两种实现方式:Schema 和 Universal Link
    详细资料可以参考http://awhisper.github.io/2017/09/02/universallink/

    通过分析可以判断优酷、腾讯视频、知乎等使用的是Universal Link的方式来实现的直接跳转,那么UC浏览器又是如何对Universal Links跳转做拦截,通过查找资料终于找到了解决方案

    贴个stackoverflow的链接
    https://stackoverflow.com/questions/38450586/prevent-universal-links-from-opening-in-wkwebview-uiwebview

    WebKit源码其实本就准备了不触发UniversalLink的控制代码
    _WKNavigationActionPolicyAllowWithoutTryingAppLink
    只不过这个枚举值是私有的并没有对外暴露,但你会发现这个值等于WKNavigationActionPolicyAllow这个系统公开枚举值+2,于是乎封掉Universal Link的方法呼之欲出了。如果你在使用WKWebView,尝试在decidePolicy的时候返回这个枚举值!

    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
        //返回+2的枚举值
        decisionHandler(WKNavigationActionPolicyAllow + 2);
    }

    更新

    上述方法只能在9.0之后才能使用,低于9.0版本系统的时候这样的做法将不能跳转,所以优化如下:

    //当前设备系统版本号
    #define SYSTEMVersion [[[UIDevice currentDevice] systemVersion] floatValue]
    
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
        if(SYSTEMVersion < 9.0f){
            decisionHandler(WKNavigationActionPolicyAllow);
        }else{
            //返回+2的枚举值
            decisionHandler(WKNavigationActionPolicyAllow + 2);
        }
    }


    作者:Anchoriter
    链接:https://www.jianshu.com/p/6718a2403de6
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    LambdaExpressions(Lambda表达式)
    解密淘宝网的开源架构(转)
    使用Action、Func和Lambda表达式
    ASP.NET中进行消息处理(MSMQ) 二
    从内存变化看.NET代码执行机理(一)
    提高C#编程水平的50个要诀
    其他概念
    asp.net mvc相关开源项目
    为性能和可伸缩性做架构和设计上的Review
    你可能不知道的C#语言特性
  • 原文地址:https://www.cnblogs.com/sundaysgarden/p/16326003.html
Copyright © 2020-2023  润新知