从链接启动应用程序,如果没有应用程序,然后从Web下载应用程序

时间:2015-04-21 13:28:58

标签: javascript mobile web hyperlink launch

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

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

有没有人建议如何实现这一目标?基本上是一段代码正在寻找触发器错误并作为一种方式对此作出反应A)从页面加载启动应用程序(链接)B)在浏览器中打开应用程序商店以下载应用程序如果应用程序不是&# 39; 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>

2 个答案:

答案 0 :(得分:12)

根据应用链接,您所说的被称为延迟深层链接。如果您要编写要利用此功能的应用程序,则有iOS条指南和Android条指南。总体而言,doesn't seem to be a standard implementation适用于所有情况,但是有一个非常简单的“自行拥有”实现,与您尝试的实现类似。

from another SO answer

<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>

正如上面的评论者所述,请使用iframe,以便即使window.location失败也可以继续处理代码。然后,设置一个具有合理后备时间的简单setTimeout。您无需捕获任何错误消息或响应头。如果该应用未启动,则将创建一个网站。

答案 1 :(得分:2)

只是想添加,因为您要A)从链接启动应用程序并在发生故障时B)前往商店下载该应用程序。

您可以使用跨平台的解决方案,而不用自己动手做替代方案,建议您尝试Firebase动态链接(可在Android和iOS上运行)及其免费版本。

它还具有为您的应用程序提供链接信息的好处,例如,如果您在链接中输入了文章ID(来自新闻网站的示例),则该应用程序可以在启动时加载该文章,并且即使用户必须从商店中安装应用程序,启动后,它将打开您在链接中指定的文章。

此外,动态链接可在应用程序安装中使用:如果用户在iOS或Android上打开动态链接并且未安装您的应用程序,则系统会提示用户安装该应用程序;然后,安装后,您的应用程序将启动并可以访问该链接。

https://firebase.google.com/docs/dynamic-links

只需很少的代码,即使用户必须去App Store或Google Play商店进行安装,您也可以为其添加功能,使用户可以单击您的移动网络上的链接并转到应用程序中的相应页面。首先!

https://firebase.google.com/docs/dynamic-links/use-cases/web-to-app