iOS 9 safari iframe src与自定义urlscheme不工作

如果安装了应用程序,我使用这个解决schemehttps://gist.github.com/davidwkeith/2662899从webredirect到我的应用程序。 但它在ios 9中被破解。它仍然在谷歌浏览器中工作,但与自定义url计划的iframe不在safari中启动应用程序。

如果我replace

document.getElementById('loader').src = 'custom-protocol://my-app' 

(哪里装载机是iframe)

 window.location = 'custom-protocol://my-app' 

这将是工作。

操作系统:iOS 9 beta4和beta5

有人知道这个问题吗? 是ios 9testing版的bug吗? 或者它不会被修复?

以前的答案是缺less重要细节的通用链接的部分实现,并且不包括对App Store的回退。

首先,你不能再设置iframe src来触发URIscheme。 你已经正确地确定了这个问题。 正如你所提到的,你可以设置window.location = 'custom-protocol://my-app'; 。 所以如果你知道用户有你的应用程序,因为你之前已经从浏览器打开他们的应用程序,并有一个可以在你的后端查找的cookie,你仍然可以安全地启动custom-protocol://

其次,您可以使用navigator.userAgent检测用户代理string。 在iOS 9之前,您仍然可以使用iframe来启动URIscheme,然后在超时后回退。 在iOS 9上,您可以根据Cookieselect是否启用URIscheme,然后将用户带到App Store。 我在Branch工作,并利用Cookie来回顾一个用户是否可能拥有这个应用是我们已经实现的。 如果您对此有更多疑问,请随时与我们联系,或直接使用我们的解决scheme。


实现通用链接并不像其他答案所描述的那么简单。 事实上,复杂性要大得多。 这是一个完整的步骤列表(我已经帮助几个应用程序在最近几周使用这些步骤):

1.configuration您的应用程序以注册已批准的域

一世。 如果你还没有在developer.apple.com注册你的应用程序

II。 在developer.apple.com上的应用程序标识符上启用“关联的域”

III。 在Xcode项目中启用“关联域”

权益

IV。 在您的应用程序中添加适当的域权利, applinks:yourdomain.com

applinks

2.configuration您的网站以承载“苹果应用程序站点关联”文件

一世。 购买域名或从现有的域名中挑选

II。 获取域名的SSLauthentication(您可以使用CloudFlare!)

III。 创build结构化的“apple-app-site-association”JSON文件

 { "applinks": { "apps": [ ], "details": { "TEAM-IDENTIFIER.YOUR.BUNDLE.IDENTIFIER": { "paths": [ "*" ] } } } } 

IV。 使用SSLauthentication签署JSON文件

cat apple-app-site-association-unsigned | openssl smime -sign -inkey yourdomain.com.key -signer yourdomain.com.cert -certfile digicertintermediate.cert -noattr -nodetach -outform DER > apple-app-site-association

v。configuration文件服务器

苹果应用程序站点关联文件: – 必须与头文件“application / pkcs7-mime”一起发送 – 必须从端点发送youdomain.com/apple-app-site-association – 必须返回200 http代码。

示例Express +节点:

 var aasa = fs.readFileSync(__dirname + '/static/apple-app-site-association'); app.get('/apple-app-site-association', function(req, res, next) { res.set('Content-Type', 'application/pkcs7-mime'); res.status(200).send(aasa); }); 

信用:从这个博客文章宽松地借

是的,现在你可以深入链接。 检查链接的详细说明,但我奠定了基础知识。

http://blog.hokolinks.com/how-to-implement-apple-universal-links-on-ios-9/

首先你必须去你的目标,然后点击function。 添加关联的域。

接下来你必须上传apple-app-site-association文件。

基本上打开一个JSON编辑器,并构build这样的东西

 { "applinks": { "apps": [], "details": { "TBEJCS6FFP.com.domain.App": { "paths":[ "*" ] } } } } 

接下来,您必须在您的应用中支持Univeral链接。 你需要执行

 extension AppDelegate { func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool { if userActivity.activityType == NSUserActivityTypeBrowsingWeb { let webpageURL = userActivity.webpageURL! // Always exists if !handleUniversalLink(URL: webpageURL) { UIApplication.sharedApplication().openURL(webpageURL) } } return true } private func handleUniversalLink(URL url: NSURL) -> Bool { if let components = NSURLComponents(URL: url, resolvingAgainstBaseURL: true), let host = components.host, let pathComponents = components.path?.pathComponents { switch host { case "domain.com": if pathComponents.count >= 4 { switch (pathComponents[0], pathComponents[1], pathComponents[2], pathComponents[3]) { case ("/", "path", "to", let something): if validateSomething(something) { presentSomethingViewController(something) return true } default: return false }