我的问题是仅限iOS9!
我有一个HTML
着陆页,如果安装了应用,我会尝试通过网址方案将用户重定向到我的应用,或者重定向到 Appstore 否则。
我的代码是:
document.addEventListener("DOMContentLoaded", function(event) {
var body = document.getElementsByTagName('body')[0];
body.onclick = function () {
openApp();
};
});
var timeout;
function preventPopup() {
clearTimeout(timeout);
timeout = null;
window.removeEventListener('pagehide', preventPopup);
}
function openApp(appInstanceId, platform) {
window.addEventListener('pagehide', preventPopup);
document.addEventListener('pagehide', preventPopup);
// create iframe
var iframe = document.createElement("iframe");
document.body.appendChild(iframe);
iframe.setAttribute("style", "display:none;");
iframe.src = 'myscheme://launch?var=val';
var timeoutTime = 1000;
timeout = setTimeout(function () {
document.location = 'https://itunes.apple.com/app/my-app';
}, timeoutTime);
}
问题在于iframe
诀窍在Safari
iOS9
中不起作用。
知道为什么吗?
基于this回答的iframe
诀窍。
答案 0 :(得分:21)
iframe技巧不再适用 - 我的猜测是Apple知道它会鼓励更多开发人员更快地实施Universal Links。
您仍然可以在500毫秒后设置window.location='your-uri-scheme://';
并回退到App Store。有一个"舞蹈"如果你采用这种方法,就像我们在Branch所做的那样(如果Universal Links不起作用,我们会做一个后备)。
window.location = 'your-uri-scheme://'; // will result in error message if app not installed
setTimeout(function() {
// Link to the App Store should go here -- only fires if deep link fails
window.location = "https://itunes.apple.com/us/app/myapp/id123456789?ls=1&mt=8";
}, 500);
我希望我有更好的答案。 iOS 9肯定更受限制。
如果您想要了解Universal Link所需的内容,请查看我的回答here或read this tutorial
答案 1 :(得分:2)
如前所述,在iOS 9上设置window.location
仍然有效。但是,这会打开一个Open in App对话框。我在https://bartt.me/openapp上举了一个例子:
查看https://lab.bartt.me/openapp的来源以获取更多信息。
答案 2 :(得分:1)
也许尝试向Universal Links提供应用支持
思想: 避免在Safari中使用自定义(JavaScript,iframe)解决方案,将代码替换为支持的通用链接。
实施例
<html>
<head>
...
</head>
<body>
<div class"app-banner-style">
<a href="http://yourdomain.com">In app open</a>
</div>
...content
</body>
</html>
如果你的应用支持通用链接(例如yourdomain.com),你就可以配置你的域名(和路径),iOS9应该对它做出反应,打开你的应用程序链接。 这只是理论,但我想应该工作:)
答案 3 :(得分:0)
iframe hack不再适用于ios9。可能的解决方案是使用两个按钮 例如:
$('#goToStoreBtn').text( "go to store" ).click(function(event){
event.preventDefault();
event.stopPropagation();
window.location = storeUrl; // https://itunes.apple.com/...
});
$('#goToAppBtn').text( "go to app" ).click(function(event){
event.preventDefault();
event.stopPropagation();
window.location = appUrl; // myApp://...
});
答案 4 :(得分:-1)
这是相对较旧的主题,但我创建了一个支持大多数现代移动浏览器深层链接的库。但这需要单独的深层链接页面,需要托管在不同的域中以支持ios9 facebook浏览器中的通用链接。