以前写了一篇文章Universal Link 前端部署采坑记,当时还信誓旦旦的说(仔细看了一眼,我当初说话还加了个括号,还好没立flag)前端
Universal Link目前尚未基于iOS的UI/WKWebView的应用进行拦截,因此目前看仍是能突破微信/手百的封锁。(之后,很差说啊~)ios
因而微信的这个屠刀终于挥了下来╮(╯_╰)╭git
作前端最头疼的就是浏览器适配,此次在Universal Link上也同样体现了痛苦。github
我原本认为,Universal Link彻底是走的系统控制,App应该是没法干预的,但在最初上线的时候就发现UC浏览器
和QQ浏览器
(非手机QQ)无效,我曾经天真的想这俩浏览器是否是由于本身作了内核不用系统WebView因此能够这样吧,因而乎没刨根问底,这事情就没细究web
早上小伙伴给我说微信封杀咱们的Universal Link了,我吓了一跳以为不可能,还觉得是小伙伴他点过什么返回原App被苹果策略屏蔽了,直到亲自试了一下才发现,卧槽!是真的!macos
在试一下知乎/今日头条2款App,也废了╮(╯_╰)╭看来真是下手了这究竟是怎么作到的浏览器
小伙伴给我贴了个stackoverflow的连接bash
Prevent universal links from opening in WKWebView
/UIWebView
微信
看到里面有一个回答是这么说明的ide
sourcecode for WebKit:
static const WKNavigationActionPolicy WK_API_AVAILABLE(macosx(10.11), ios(9.0)) _WKNavigationActionPolicyAllowWithoutTryingAppLink = (WKNavigationActionPolicy)(WKNavigationActionPolicyAllow + 2);
if you are using WKWebView, just use WKNavigationActionPolicyAllow + 2 instead of WKNavigationActionPolicyAllow
复制代码
好么~WebKit源码其实本就准备了不触发UniversalLink的控制代码
_WKNavigationActionPolicyAllowWithoutTryingAppLink
只不过这个枚举值是私有的并无对外暴露,但你会发现这个值等于WKNavigationActionPolicyAllow
这个系统公开枚举值+2,因而乎封掉Universal Link的方法呼之欲出了。若是你在使用WKWebView,尝试在decidePolicy的时候返回这个枚举值!
尝试写个demo App,使用WKWebView,而后实现webView:decidePolicyForNavigationAction:decisionHandler:这个delegate,还拿咱们的线上universal link页面测试,果真,返回+2了之后 Universal Link是被完全封堵了
//就是这么的简单粗暴
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
//返回+2的枚举值
decisionHandler(WKNavigationActionPolicyAllow + 2);
}
复制代码
微博上的@Vong_HUST 还跟进逆向了一下
腾讯系的均可以打开,应该是设置了白名单。dump 了一下头文件,也确实发现了一些相似 isCloseUniversallink 的方法,感受能够投诉到苹果那边了
嘿!看到没?还isCloseUniversallink,这充分说明这TM仍是个远程开关,随开随关可控,我说为啥命名微信没发版本,咋就跪了
咱们从自身业务出发,确实想从各类别人的App,别人的浏览器里,往本身App跳,往本身App导流
但换位思考一下若是你是浏览器APP,你是微信,你确定不但愿用户离开微信进入别的App,所以最先Schema式跳转是被各大浏览器老早就封杀的
最先还寄但愿于Universal Link是系统机制,或许封杀不到,然鹅......
让咱们猜猜,手百的Universal Link,还能活多久?