iOS9:尝试通过计划打开应用程序,否则redirect到app store

我的问题是关于iOS9的!

我有一个HTMLlogin页面,如果安装了应用程序,我尝试通过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上举了一个例子:;

  1. 点击Twitter应用程序中打开时启动Twitter。
  2. 回到App Store中的Twitter应用程序。
  3. redirect到Twitter或App Store, 而不需要用户在“ 在应用程序打开”对话框中select“ 打开 ”。
  4. 适用于iOS和Android上的所有浏览器。

查看https://lab.bartt.me/openapp的来源获取更多信息。;

也许尝试给你通用链接的应用程序支持

想法:在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做出反应。 这只是理论 ,但我想应该工作:)

https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12

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浏览器的通用链接。

https://github.com/prabeengiri/DeepLinkingToNativeApp