一、背景

最近有人使用“魔链”实现深度跳转功能,在应用内使用 WebView 集成 魔链JS SDK完成跳转或者直接加载短链时,点击下载无法跳转到App Store,神马原因呢?

  • UIWebView:是支持打开外部引用的。
  • WKWebView:去掉了打开外部引用的功能,要想打开需要手到干预,换个姿势跳转。

二、解决方案

现在 UIWebView 不能用了,那我们就直接说 WKWebView 的情况吧,主要有如下几种情况

  • WKWebView 加载某个应用的 App Store 地址,无法跳转到 App Store 对应应用的下载页面
  • WKWebView 加载网页后,网页内点击按钮无法跳转到 App Store
    • 点击按钮加载的是 App Store 应用链接
    • 点击按钮是通过 scheme 打开App Store

需要在navigationDelegate中进行拦截,用openURL手动跳转至AppStore

null

//导入头文件
#import <WebKit/WebKit.h>

//添加代理
@interface  ViewController ()<WKNavigationDelegate>
@end
- (void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler {

 WKNavigationActionPolicy policy = WKNavigationActionPolicyAllow;

 NSLog(@"url = %@",navigationAction.request.URL);
 NSLog(@"host = %@",[navigationAction.request.URL host]);
 NSLog(@"scheme = %@",[navigationAction.request.URL scheme]);

 /* 
     如果是域名,判断itunes的host链接 ;
     如果是scheme跳转,就判断是否是 App Store 的 scheme
 */

 if([[navigationAction.request.URL host] isEqualToString:@"itunes.apple.com"] || [[navigationAction.request.URL scheme] isEqualToString:@"itms-apps"]) {
     if ( [[UIApplication sharedApplication] openURL:navigationAction.request.URL]) {
                policy = WKNavigationActionPolicyCancel;
             NSLog(@"已跳转至App Store");
     }
 }
 decisionHandler(policy);
}