以前寫了一篇文章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,還能活多久?