如何从网页中检测安卓设备上是否安装了应用程序

5
这里是情况说明:
我有一个网页,需要通过JavaScript检查当前运行的Android设备上是否已安装我的应用程序。
如果已安装该应用程序,页面将显示一个链接(具有自定义协议)以启动该应用程序,否则页面应显示一个指向Android市场的链接。
我可以管理到应用程序和市场的链接。唯一剩余的步骤是从JavaScript代码中检测在设备上应用程序的存在(或尝试捕获不支持的协议可能会引起的错误,作为不存在应用程序的指示)。
当我
1.点击带有 2.我的自定义应用程序协议的网络链接,并且 3.设备上还未安装该应用程序
我可以看到Android环境生成了“不支持协议”类型的错误。不幸的是,我无法在JavaScript代码中捕获该错误,以转移用户到Android市场。
我想直接检测和错误检测都是有效的方法,如果它们存在的话。
有什么想法可以完成这个问题吗?
感谢您的帮助。
3个回答

3

我也有同样的问题,但是我是这样解决的:

var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf("android") > -1;
if(isAndroid) { // if is android
    // your app address for local
    var ifrSrc = 'intent://example.com#Intent;scheme=my_scheme;action=android.intent.action.VIEW;end';
    var ifr = document.createElement('iframe');
    ifr.src = ifrSrc ;
    ifr.onload = function() { // if app is not installed, then will go this function
        window.location = 'http://your.app_download_page.com';
    };
    ifr.style.display = 'none';
    document.body.appendChild(ifr);

    setTimeout(function(){
        document.body.removeChild(ifr); // remove the iframe element
    }, 1000);
} else { // if is not android
    window.location = 'http://google.com';
}

希望这能帮助遇到这个问题的人。

好的解决方案,对我很有效。 我只更新ifrSrc为“myscheme=myhosts”。 它在三星旧版原生浏览器上失败了。 - Arslan Anwar

3

不要使用自定义协议。

相反,设置您的<intent-filter>以监视一个众所周知的URL(例如,设置方案、主机和路径)。该URL应指向包含“下载应用程序”的说明的页面。

然后,如果用户从其他地方点击众所周知的URL链接,如果已安装您的应用程序,则会启动您的应用程序,否则将显示您的网页。


我认为这并没有完全解决问题。问题在于如何从JavaScript检查移动设备上是否安装了应用程序。在网页需要在按钮上显示“下载”或“打开”文本的情况下可能需要进行此操作。 - YTerle
1
@YTerle:显然出于隐私和安全原因,你想要的是不可能的。 - CommonsWare

0

您可以使用一个iframe,其src url是您的应用程序的自定义协议,同时如果该自定义协议未被处理,您还可以显示您的网页。您还可以使用frameborder="0"、width和height = 0来设置iframe为不可见。


如何检查自定义协议是否未被处理(没有安装任何应用程序) - Bahramdun Adil
你不能这样做,但是你可以加载自定义协议并在几秒钟后加载市场。如果协议被处理,页面将被应用程序覆盖并关闭,否则,在两秒钟内什么也不会发生,然后页面将重定向到市场。 - Fernando Gallego

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接