【问题标题】:Mobile App detection from browser来自浏览器的移动应用检测
【发布时间】:2014-05-01 14:26:17
【问题描述】:

我想通过 JS 检测用户是否安装了特定的应用程序。

我知道应用商店标签会弹出通用的“下载此应用”,如果他们没有安装它。我不是在问这个。

我有一个概念,但它不完整。这将尝试同时针对 iPhone 和 Android 设备。

知道带有特定前缀的链接可以触发应用打开:

  1. 使用 JS 定位隐藏的 iframe,以打开前缀为触发该应用的 url
  2. 如果加载该页面,该页面将向父级发送一条帖子消息,指示应用未打开。
  3. 如果应用存在,则消息永远不会被回发给父级,因为它会在应用中打开。

不幸的是,我的客户不希望应用程序自动打开(或尝试打开),而只是知道它是否已安装。

想法?在我的逻辑中大声错误?变通办法?现有的解决方案?

谢谢

【问题讨论】:

  • 您的目标是什么系统?安卓、iOS?
  • @still_learning 已更新。
  • 作为最近研究这项工作的人,我很遗憾地说您可能会走入死胡同。我们最接近的是启动应用程序,或者在启动失败时转到应用程序商店。 (对于 Android,Intent 链接将有助于实现更好的用户体验 - 但不是您所要求的具体内容)
  • 也许 NSA 有一个您可以查询的数据库?总的来说,我认为我们应该很高兴我们没有将整个应用程序选择暴露给我们访问的每个网站。现在,如果您的客户端可以控制他们正在检查的应用程序,则网页可能会在不可见的情况下打开应用程序,然后告诉应用程序在后台将消息传递回浏览器。
  • 在 iOS 6 上,您可以使用Smart App Banners

标签: javascript detection mobile-application


【解决方案1】:

可能没有办法做到这一点,因为一般来说,您不允许从网页上浏览用户设备。即使用户安装或未安装的应用程序不是最敏感的个人信息,将这些信息暴露给来自网络的脚本仍然会引起一些安全/隐私问题。应用商店标签可能是您最接近的标签,因为它是提供类似但受保护功能的官方 API。

【讨论】:

  • 有用的信息。一般来说,最好将其作为评论发布 - 因为它不是 OP 问题的解决方案(并不是说甚至存在任何解决方案)
  • 虽然说某些东西不存在并给出理由,但这不是一个有效的答案吗?我不是在要求更多信息,我只是在说明他的问题的可能解决方案。抱歉,虽然这是一种糟糕的形式——我是新来的,但仍在试图找出你应该在哪里发布之间的区别。
  • 这是我理解 SO 的问答政策的方式 - 例如,如果一个问题的信息不完整,它也可能需要评论,当时应该不可能得到答案。同样,如果有人问“我如何进行时间旅行”并且评论响应是“时间旅行在物理上是不可能的”,那么有人可以将他们的问题修改为“好吧,我实际上想获取 5 分钟前的用户数据” -有人可以回答“这是保存数据以备后用的方法”
【解决方案2】:

我可以想出两种方法来尝试解决您的问题,尽管没有一种特别好。从 iOS 6 开始,您可以使用Smart App Banners 来推广应用。

最明显的解决方案是对用户隐藏任何操作,例如通过在发出 URL 请求后阻止活动显示。我对此没有任何经验,也无法告诉您可以在多大程度上隐藏它。

说实话,我不知道第二种方法是否适用于移动设备。它已被大量用于桌面应用程序,并允许应用程序间通信——包括浏览器和应用程序之间的通信。但是,由于对移动设备的安全限制通常很高,因此可能性可能会受到限制。这是一个高度理论化的建议,因为我很确定它是不合适的,无论是否可能。
您的应用程序必须在未使用但固定的端口上提供小型 HTTP 服务器。然后,您的 JavaScript 代码可以使用 JSONP 与应用程序通信(假设浏览器的安全限制不会阻止这一点)。如果通信失败,您可能会认为该应用未安装。

在任何人试图批评这种方法之前,让我说这是一种理论上的可能性,可能不稳定并且不适合大多数应用程序。对于这样的次要任务来说,运行 HTTP 服务器的工作量太大了。

【讨论】:

    最近更新 更多