在iOS應用內對Universal Links跳轉做攔截,遮蔽自動跳轉app
阿新 • • 發佈:2022-05-30
最近發現在自己專案中開啟優酷、騰訊視訊、知乎
等網站時,點選跳轉或開啟此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
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。