从链接启动应用程序,如果没有应用程序,则从网络下载应用程序

Unk*_*er5 12 javascript mobile hyperlink launch web

所以我希望在网页登陆时启动一个移动应用程序。我已经看到这样做了,一切都很好(以 Facebook 和 Pandora 为例,请参阅下面的代码)。但是我正在寻找一种逻辑检查来根据应用程序的成功或不成功启动以一种方式或另一种方式路由用户。在之前的解决方案中说您不能使用链接来检查用户的移动设备以查看是否安装了应用程序,但我一直在想可能有一种方法可以查看用户的应用程序是否在之后成功启动 -事实并基于此路由它们。

使用下面的代码,如果应用程序启动,网页就会消失,如果你愿意的话(在应用程序占据中心位置时消失在后台)。但是,如果该应用程序未安装在移动设备上,则网页会保持运行状态,并且您会收到错误消息(无法立即回忆起哪个错误)。但在我看来,收到此错误应该能够触发重新路由到您选择的特定 URL。不是在服务器级别,而是在代码级别。换句话说......如果应用程序启动,那么免费......享受!但是,如果页面加载时出现错误,它会立即重定向到 Apple 或 Google 上的应用程序下载页面(取决于检测到的操作系统)。

有没有人有关于如何实现这一点的建议?本质上是一段代码,它正在寻找触发错误并对此做出反应,作为 A) 从页面加载(链接)启动应用程序 B) 在浏览器中打开应用程序商店以下载应用程序(如果应用程序不是) t 成功启动。

这是我第一次涉足 Stack,但多年来我发现社区非常有帮助。

<script type="text/javascript"> // <![CDATA[
var isMobile = {
    Android: function() {
        return navigator.userAgent.match(/Android/i);
    },
    BlackBerry: function() {
        return navigator.userAgent.match(/BlackBerry/i);
    },
    iOS: function() {
        return navigator.userAgent.match(/iPhone|iPad|iPod/i);
    },
    Opera: function() {
        return navigator.userAgent.match(/Opera Mini/i);
    },
    Windows: function() {
        return navigator.userAgent.match(/IEMobile/i);
    },
    any: function() {
        return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
    }
};



if ( isMobile.Android() ) {
    document.location.href = "fb://profile";
}
else if(isMobile.iOS())
{
    document.location.href="pandora://";
}
</script>
Run Code Online (Sandbox Code Playgroud)

Jam*_*ino 15

您所说的在应用程序链接方面称为延迟深度链接。如果你正在编写一个想要利用它的应用程序,有iOS指南和Android指南。总体而言,似乎没有适用于所有场景的标准实现,但是,有一个非常简单的“自己动手”实现,与您正在尝试的类似。

来自另一个SO答案

<script type="text/javascript">
    window.onload = function() {
        // Deep link to your app goes here
        document.getElementById("l").src = "my_app://";

        setTimeout(function() {
            // Link to the App Store should go here -- only fires if deep link fails
            window.location = "https://itunes.apple.com/us/app/my.app/id123456789?ls=1&mt=8";
        }, 500);
    };
</script>
<iframe id="l" width="1" height="1" style="visibility:hidden"></iframe>
Run Code Online (Sandbox Code Playgroud)

正如上面的评论者所说,使用 iframe 这样即使 window.location 失败,您也可以继续处理代码。然后,设置一个setTimeout具有合理回退时间的简单程序。您不需要捕获任何错误消息或响应标头。如果应用程序没有启动,那么网站会启动。