iOS9:尝试通过计划打开应用程序,否则redirect到app store
我的问题是关于iOS9的!
我有一个HTML
login页面,如果安装了应用程序,我尝试通过URLscheme将用户redirect到我的应用程序,否则redirect到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
。
任何想法为什么?
我的iframe
技巧基于这个答案。
iframe技巧不再奏效 – 我的猜测是,苹果知道这将鼓励更多的开发者更快地实现Universal Links。
你仍然可以设置window.location='your-uri-scheme://';
并在500ms后回退到App Store。 如果采取这种方法,popup式窗口之间会有一种“跳舞”,就像我们在分支上做的那样(如果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 Links所需要的帮助概览,请参阅 此处的答案或阅读本教程
如前所述,iOS 9上的设置window.location
仍然有效。 但是,这会带来一个Open in App对话框。 我已经在https://bartt.me/openapp上举了一个例子:;
- 点击Twitter应用程序中的打开时启动Twitter。
- 回到App Store中的Twitter应用程序。
- redirect到Twitter或App Store, 而不需要用户在“ 在应用程序中打开”对话框中select“ 打开 ”。
- 适用于iOS和Android上的所有浏览器。
也许尝试给你通用链接的应用程序支持
想法:在Safari中避免自定义(JavaScript,iframe)解决scheme,用支持的通用链接代替您的代码。
例
<html> <head> ... </head> <body> <div class"app-banner-style"> <a href="http://yourdomain.com">In app open</a> </div> ...content </body> </html>
如果你的应用程序支持Universal Links(例如yourdomain.com),那么你可以configuration你的域名(和path),iOS9应该对它打开你的App做出反应。 这只是理论 ,但我想应该工作:)
iframe hack不再适用于ios9。 可能的解决scheme是用两个button。 例:
$('#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://... });
这是一个相对较旧的线程,但是我创build了一个支持大多数现代移动浏览器的深层链接的库。 但是这需要单独的深度链接页面,需要在不同的域名托pipe,以支持ios9的Facebook浏览器的通用链接。