Search code examples
iosuiwebviewswift3deep-linking

Call only first request UIWebView


I have one url request let say

        let url = URL(string: "https://www.google.com/share?referCode=RSJDofpeW")

and we want to open this url in WebView and this link is also associated with the universal links. So opening this url will open the installed application but i want to load the page in UIWebView. So i checked the delegates and found that at first time it calls it is the above url then next time it will add scheme and appstore redirection.

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        log.verbose(webView)
        log.verbose(request)
        log.error(navigationType.rawValue)
        if request.url?.scheme == "itms-appss" || request.url?.scheme == "googleApp"{
            return false
        }

        return true
    }

So to overcome the issue of not loading the page in Web View i did the code like above so when scheme is itms-appss or googleApp it will not load the request but for the first time when it was correct url it should load that page but that is not opened.


Solution

  • //Check

     var isUrlLoaded : Bool = false;
    

    //delegate functions

      func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    //check is the url is loaded for first time or not           
     if isUrlLoaded != true{
                    if request.url?.scheme == "itms-appss" || request.url?.scheme == "googleApp"{
                        return true
                    }
                }
    
                return false
            }
            func webViewDidFinishLoad(_ webView: UIWebView) {
                if  webView.request?.url?.scheme == "itms-appss" || webView.request?.url?.scheme == "googleApp"{
             // is url loaded       
             isUrlLoaded = true;
                }
            }