从浏览器启动Android应用程序:如何检测“Intent”支持?

4
我们正在尝试为我们的应用程序构建一个参数化输入网页,大约50%的用户将安装我们的应用程序,另外50%则没有。
最初,我们使用了我们的应用程序注册的专用URL方案,即:
myapp://dothing?specialParameters=5
然而,我们很难检测到用户没有安装我们的应用程序或者安装了不支持URL方案的早期版本。在Chrome或Android浏览器中,由于找不到服务器,用户会被导航到浏览器生成的错误页面。
在iOS Safari和Android Firefox中,我们可以通过使用setTimeout进行导航前的延迟解决这个问题。
function timeoutFn() {
            var timeout = setTimeout(function() {
                window.location = //iOS Appstore location;
            }, 1000);
            window.addEventListener("pagehide", function(evt) {
                clearTimeout(timeout);
            });

            window.location = "myApp://dothing?specialParameters=5";
        }

我的解决方案是使用Google推荐的Intent系统来处理Chrome/Android浏览器中的链接,具体介绍可以在这里找到:https://developers.google.com/chrome/mobile/docs/intents 我已经测试过了,这个方法似乎很有效。但是,Firefox不知道如何处理以“intent://”开头的链接。我们仍然可以为Firefox使用上面的JavaScript函数,但我非常不愿意为此编写用户代理嗅探代码,特别是因为我认为任何其他Android上的Web浏览器同样缺乏Intent支持。
所以,回到标题问题:Chrome和Android浏览器能够通过“intent://”链接打开应用程序 - 是否有任何方法,使用JavaScript或类似的方法,来检测这种支持?
1个回答

0

这是我们目前正在使用的,但它远非理想...

function isItentsSupported() {
    var isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
    if (isChrome) {
        var version = parseInt(window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10);
        return version >= 25; 
    } else {
        return false;
    }
}

基于Google文档的Chrome版本号


所以,谷歌的规范是使用用户代理嗅探。我认为每个事件都使得微软相比之下看起来更加开放网络... - Katana314
不,规范没有要求使用代理嗅探(我已经更新了我的答案以使其更清晰)。我找不到其他检测意图是否受支持的方法。 - Sam

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