iOS开发scheme跳转及WKWebView跳转三方app记录

一、canOpenURL方法失效问题

1、iOS9之后苹果加强了权限,只有在info.plist文件中加入了URL Schemes白名单才能使用canOpenURL:。
2、openURL:方法是没有限制的。

二、WKWebView中处理scheme

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
    // 拦截schem方式跳转
    if([[UIApplication sharedApplication] openURL:navigationAction.request.URL])
    {
        decisionHandler(WKNavigationActionPolicyCancel);
    }
    else
    {
        decisionHandler(WKNavigationActionPolicyAllow);
    }
}

三、需求记录

要求在网页中跳转到指定APP,如果没有安装APP,则跳转至该APP的网站。原先以为需要跳转到指定APP,必须提前将可能跳转的scheme写入加入白名单,后面发现openURL方法是没有这个限制的,而且返回值是BOOL类型,所以可以直接使用此方法来判断。此需求需要和JS交互,利用WebViewJavascriptBridge实现:

[self.bridge registerHandler:@"openIOSApp" handler:^(id data, WVJBResponseCallback responseCallback) {
        NSDictionary *dic = (NSDictionary *)data;
        NSString *scheme = dic[@"scheme"];
        NSString *appstoreID = dic[@"appstoreID"];
        NSString *htmlJumpString = dic[@"htmlJumpString"];
        
        if(scheme.length && [[UIApplication sharedApplication] openURL:[NSURL URLWithString:scheme]])
        {
            // 判断语句中直接跳转了,无需处理
        }
        else if(appstoreID.length)
        {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.apple.com/cn/app/%@",appstoreID]]];
        }
        else if(htmlJumpString.length)
        {
            // 跳转网页
        }
        responseCallback(@"");
}];
iOS开发scheme跳转及WKWebView跳转三方app记录_第1张图片
Simulator Screen Shot - iPhone 8 Plus 11.4 - 2019-01-18 at 11.19.07.png

你可能感兴趣的:(iOS开发scheme跳转及WKWebView跳转三方app记录)