通用链接不适用于 WKWebView [英] Universal links not working with WKWebView

查看:24
本文介绍了通用链接不适用于 WKWebView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在公司有基于 web-view 的应用程序和其他本地应用程序.我们在需要时使用 universal links 将用户重定向到其他应用程序(其他应用程序仍然支持 universal links - 我可以通过按 Apple Notes 应用程序).我们最近过渡到 WKWebView(来自 UIWebView),它提供了更好的体验.但是更新后 Universal Links 停止工作,当用户在我们的应用程序中按下链接时,我们无法启动其他应用程序.

I have web-view based app and other native apps in company. We were using universal links to redirect user to other apps when needed (other apps still support universal links - I can run them by pressing links from Apple Notes app). We recently made a transition to WKWebView (from UIWebView), which provides a way better experience. But after the update Universal Links stopped working and we cannot start other apps when user press link inside our app.

根据文档:

通用链接让 iOS 9 用户在点击链接时打开您的应用程序您的网站在 WKWebView 和 UIWebView 视图和 Safari 页面中,在除了导致调用 openURL: 的链接,例如那些发生在邮件、信息和其他应用程序中."

"Universal links let iOS 9 users open your app when they tap links to your website within WKWebView and UIWebView views and Safari pages, in addition to links that result in a call to openURL:, such as those that occur in Mail, Messages, and other apps."

来源:https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html

WKWebView 似乎没有处理 Universal Links.我的问题是,我是否缺少 WKWebView 的一些特殊配置,或者这是 WebKit 错误?我正在按照提供的方式创建 Web 视图:

It seems that WKWebView is not handling the Universal Links. My questions is, am I missing some special configuration for WKWebView or this is WebKit bug? I'm creating web view as provided:

WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];  
config.allowsInlineMediaPlayback = YES;  
config.processPool = // Here I'm using shared process pool  

self.webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config];  
self.webView.translatesAutoresizingMaskIntoConstraints = NO;  
self.webView.clipsToBounds = YES;  
self.webView.allowsBackForwardNavigationGestures = YES;  

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {  
  self.webView.allowsLinkPreview = YES;  
}  
[self addSubview:_webView];

为了显示问题,我使用简单的应用程序创建了简单的存储库(https://github.com/apan06/UniversalLinks - 非常简单的初始化).有两个 web 视图 - WKWebViewUIWebView,两者都带有简单的 html,只有 Twitter 的链接.WKWebView 只是加载 Twitter 页面.另一方面 UIWebView 打开 Twitter 应用程序.请记住:- 在安装了 Twitter 应用程序的设备上测试它,如果您没有 Twitter 应用程序 或不喜欢 Twitter,您可以更改链接- 我在 iPhone 6 上用 iOS 9.2.1

To show the problem I have created simple repository with simple app (https://github.com/apan06/UniversalLinks - with very simple initialisation). There are two web views - WKWebView and UIWebView with both with simple html that there is only link to Twitter. WKWebView simply loads the Twitter page. On the other hand UIWebView open Twitter app. Just remembet: - test it on device with Twitter app installed, if you don't have Twitter app or don't like Twitter you can change link - I was testing it on iPhone 6 with iOS 9.2.1

谢谢!

推荐答案

我认为 WKWebView 中存在一个错误,如果未设置导航委托,它会忽略通用链接.尝试设置 WKWebView 的导航委托.您不必实现任何委托方法.

I believe there is a bug in WKWebView that makes it ignore universal links if the navigation delegate is not set. Try setting the WKWebView’s navigation delegate. You don’t have to implement any of the delegate methods.

这篇关于通用链接不适用于 WKWebView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆