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
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 }
- 移动Safari / iPhone Mail.app HTMLdevise问题:防止自动链接和样式自动链接(date,地址等)
- iPad Safari Web Inspector在页面加载时崩溃
- iOS 7 JavaScript的XMLHttpRequest错误
- Mobile Safari和HTML5 iOSnetworking应用程序支持哪些audio文件types(例如,mp3,ogg)?
- 在Safari浏览器中的Web应用程序中的链接打开一个iPhone应用程序
- iOS Webkit忽略媒体查询
- 通过CSS阻止Safari(Mavericks / iOS7)中的连字
- Bootstrap Popover在iOS / Safari上触发焦点触发器不可用
- Webkitanimation将垃圾像素留在屏幕上