通过JavaScript打开应用(iOS / Android),后备重定向到App / Play商店(2016版)

问题描述 投票:7回答:2

给出:网站,iOS和Android应用程序,已注册的urlscheme“ myapp://”。

目标:网站上的链接显示了安装了应用程序的iOS / Android设备。单击该链接应打开该应用程序并调用特定的逻辑(由应用程序处理,本质上类似于苹果公司的“通用链接”,但不会遮盖网站链接)。

由于安全限制,如果没有webview cookie魔术,检测应用是否已安装很麻烦。鉴于此,尝试通过JavaScript打开应用并在失败后调用后备重定向的最佳方法是什么?

此线程的解决方案:Is it possible to register a http+domain-based URL Scheme for iPhone apps, like YouTube and Maps?在iOS10上不起作用。不确定Android。

javascript android ios deep-linking ios-universal-links
2个回答
8
投票

在2016年,这不可能仅通过JavaScript来实现

[您仍然可以在Android上使用此方法,但是Apple在iOS 9.2中进行了更改,这意味着这在iOS设备上基本上没有用。


它过去在iOS上的工作方式

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

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

未安装应用程序

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

为了避免这种情况,您必须在页面上添加一些Java脚本,然后才能重定向到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中,Apple将

Open in“ [app]”]]模式从Java语言

blocking

模式更改为non-blocking模式。这意味着当您尝试通过重定向到自定义URI方案的Javascript打开应用程序时,该模式将不再阻止Javascript的执行,结果是回退到App Store的后备重定向将立即执行点击“打开”按钮[Branch.io(全面披露:我在Branch团队中,我们在iOS 9.2 Beta中看到了这一点,并希望我们的Apple雷达(错误报告)和有影响力的合作伙伴能够激励Apple解决此问题,然后再发布。对于iOS开发人员来说不幸的是,事实并非如此。苹果公司对我们的担忧做出的回应清楚地表明了他们希望每个人都要做的事情:采用通用链接。“”

2016年解决方案


拥有可在任何地方使用的单个链接(包括安装到应用程序(如果已安装,则路由到应用程序;如果未安装,则回退到Web URL)的唯一链接的唯一方法,必须包括在iOS上使用通用链接。当然,iOS并非所有地方都普遍支持通用链接,因此在某些特殊情况下仍需要自定义URI方案(Chrome和Gmail是两个主要示例)。您需要检测这些并构建自定义处理。

[大多数公司没有资源专门委派一名或两名专职工程师,这就是为什么Pinterest,Tinder,Airbnb,Jet.com,Yummly等都采用了诸如[C0 ]或Firebase动态链接。

因此,它在ios上运行时无需总是在安装应用程序时总是打开商店的方式是这样做的:
Branch.io

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.