【问题标题】:Launch app from link, if no app then go to download app from web从链接启动应用程序,如果没有应用程序,则从网络下载应用程序
【发布时间】:2015-06-28 16:43:59
【问题描述】:

所以我希望在登陆网页时启动移动应用程序。我已经看到了这一切,一切都很好(参见下面的代码,以 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>

【问题讨论】:

  • 我认为您应该在隐藏的 iframe 上使用自定义协议设置位置,这样如果重定向到应用程序不起作用,JavaScript 将继续执行:gist.github.com/pulletsforever/2662899
  • 太棒了。我在想同样的事情——如果没有被所需的应用程序打开成功中断(如果我理解正确的话),iframe 基本上会超时并重定向。我会朝那个方向看,但到目前为止看起来很有希望。感谢 Pawel 的链接。

标签: javascript mobile web hyperlink launch


【解决方案1】:

您所说的在应用链接方面称为延迟深度链接。如果您正在编写一个想要使用它的应用程序,则有 iOS 指南和 Android 指南。总的来说,doesn't seem to be a standard implementation 适用于所有场景,但是,有一个非常简单的“roll-your-own”实现,类似于您正在尝试的实现。

(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 并具有合理的回退时间。您不需要捕获任何错误消息或响应标头。如果应用程序没有启动,那么网站就会启动。

【讨论】:

  • 谢谢詹姆斯。我还没有在移动设备上进行过测试,但我已经在 Mac OS Catalina + Chrome 上进行了测试(请参阅我还需要它在 Windows/MacOS ... 和 Android/iOS 上工作)。如果应用程序在正确重定向时未注册,但它已注册,它会短暂显示一个弹出窗口以单击以打开已注册的应用程序并立即再次关闭它,然后在我有时间打开应用程序之前重定向到下载页面: (
  • 嗯,听起来应用确认弹出不再阻止设置的超时。好的...替代方案:blog.branch.io/…(iOS 通用链接方法)和developer.android.com/training/app-links(Android 应用链接)
【解决方案2】:

只是想添加,因为您想要 A)从链接启动应用程序并在失败时 B)去商店下载应用程序。

您可以使用跨平台解决方案,而不是自己滚动作为替代方案,我建议尝试 Firebase 动态链接(适用于 Android 和 iOS)及其免费。

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

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

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

只需很少的代码,您就可以让用户点击您的移动网络上的链接并被带到您应用中的相应页面,即使他们必须去 App Store 或 Google Play Store 安装先来吧!

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

【讨论】:

    猜你喜欢
    • 2014-10-24
    • 2013-01-04
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    相关资源
    最近更新 更多