通过JavaScript打开应用程序(iOS / Android),并将回退redirect到App / Play商店(2016年版)

鉴于:网站,iOS和Android应用程序,注册urlscheme“myapp://”。

目标:在网站上,安装了应用的iOS / Android设备上显示链接。 点击该链接应该打开应用程序并调用特定的逻辑(由应用程序处理,基本上像苹果的“通用链接”,但没有阴影的网站链接)。

由于安全限制检测应用程序是否安装是麻烦的,没有webview cookie魔术。 鉴于此,尝试通过JavaScript打开应用程序的最佳方法是什么,如果失败则调用回退redirect?

从这个线程的解决scheme: 是否有可能注册一个基于http +域名的URL计划的iPhone应用程序,如YouTube和地图? 不适用于iOS10。 不确定关于Android。

在2016年,这是不可能通过Javascript单独实现的

你仍然可以在Android上使用这个方法,但是苹果公​​司在iOS 9.2中做了一些改变,这意味着这在iOS设备上基本没有用处。


它如何在iOS上使用

过去的做法是尝试通过将window.location设置为所需的自定义URIpath来打开Javascript中的应用程序。

window.location = “imdb://title/tt3569230”;

应用程序未安装

这个问题是,当应用程序没有安装,它显示“无法打开页面”错误。 我相信你们都看到了 这是深层链接的祸根。 iOS 7和iOS 8中有一段辉煌的时期,可以绕过这个时期,但黄金时代已经过去了。

为了避免这种情况,你必须添加一些Javascript到你的页面,你将redirect到App Store。 这样,用户没有在屏幕上留下错误。

 window.location = 'imdb://title/tt3569230'; setTimeout(function() { window.location = 'itms-apps://itunes.apple.com/us/app/imdb-movies-tv/id342792525' }, 250); 

应用已安装

当应用程序安装,它会显示下面的模式,提示用户,如果他们想打开应用程序:

现在发生的事情是,在iOS 9中,苹果公司将“[app]”模式中的Open从Javascript 阻止模式更改为非阻塞模式。 这意味着,当您尝试通过Javascriptredirect到自定义URIscheme来打开应用程序时,该模式将不再阻止Javascript执行,结果是在用户可以轻敲之前立即执行回退redirect到App Store “打开”button

在Branch.io (全面披露:我在分支团队中),我们看到了iOS 9.2 beta版本,并希望我们的苹果雷达(bug报告)和有影响力的合作伙伴可以激励苹果公司在发布前解决它。 对于iOS开发者来说不幸的是,它不是。 苹果对我们所关心的问题的回应完全清楚了他们希望大家做的事情:采用环球联盟。


2016年的解决scheme

唯一可以在任何地方使用单一链接的方法(包括安装到应用程序中的路由,或者如果不是networkingURL则回退)必须包括在iOS上使用Universal Links。 当然,Universal Links在iOS上还没有到处支持,所以在特定的情况下仍然需要定制URIscheme(Chrome和Gmail是两个很大的例子)。 您将需要检测这些并build立自定义处理。

大多数公司没有资源来投入全职工程师(或两个),这就是为什么Pinterest,Tinder,Airbnb,Jet.com,Yummly等都采用了Branch.io这样的链接平台或Firebasedynamic链接。