我正在寻找一种方法,可以从客户端的Web浏览器中找出特定应用程序是否已安装。平台是Android。
例如,我编写自己的网站和应用程序,现在我希望当用户从Android手机浏览器访问我的网站时。 浏览器会查看电话中是否已经安装了该应用程序,如果没有,则建议安装该应用程序。 我可以这样做吗?
我正在寻找一种方法,可以从客户端的Web浏览器中找出特定应用程序是否已安装。平台是Android。
例如,我编写自己的网站和应用程序,现在我希望当用户从Android手机浏览器访问我的网站时。 浏览器会查看电话中是否已经安装了该应用程序,如果没有,则建议安装该应用程序。 我可以这样做吗?
有一种方法可以实现这个功能。
由于安全和隐私原因,您无法检测特定应用程序是否已安装。但是,您可以通过一个技巧来打开已安装的应用程序或者打开它在Google Play上的页面(如果该应用未安装)。
为此,您必须在应用程序的主要活动上创建一个意图过滤器,以在调用给定URL时打开它。如下所示:
<activity android:name=".MainActivity >
<intent-filter>
<data
android:host="www.myurl.com"
android:pathPrefix="/openmyapp"
android:scheme="http" >
</data>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
说明:当用户导航到http://www.myurl.com/openmyapp时,如果已安装该应用程序,则将创建一个Intent并显示Activity。
但是如果用户没有安装该应用程序怎么办?那么您需要在http://www.myurl.com/openmyapp/index.html上创建重定向页面。当用户到达此地址时,您的服务器必须重定向到market://details?id=com.your.app.package
。
这样,当用户导航到http://www.myurl.com/openmyapp后未创建Intent时,Web服务器将调用另一个URL。然后,该URL将直接打开设备上的Google Play,并转到应用程序的页面。
我找到了一种更有用的解决方案。以下是Android配置文件:
<activity android:name="me.test.html.MainActivity" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="xxxxx"
android:scheme="mm" />
</intent-filter>
</activity>
以下是 HTML 代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function test2(){
var di = document.getElementById("di");
di.innerHTML = "app have not installed";
}
function newOpen(){//184 064 323 438
var di = document.getElementById("di");
di.innerHTML = "app have installed";
var ifc = document.getElementById("ifc");
ifc.innerHTML = "<iframe src='mm://xxxxx?a=b&c=d' onload='test2()'></iframe>";
return false;
}
</script>
</head>
<body>
<a href="#" onclick="return newOpen()">local3</a><br/>
<div id="di"></div>
<div style="display:none;" id="ifc"></div>
</body>
</html>
这样,当用户点击该标签时,如果设备安装了应用程序,则不会显示对话框让用户选择,而是直接打开应用程序;如果应用程序尚未安装,则将调用js函数“test2”,因此我们知道应用程序尚未安装,因此可以在“test2”中执行任何操作!好处在于我们不需要使用标准的html模式,这将显示选择对话框,如果我自己使用定义的模式,则页面将不会导航到错误的页面!我是中国人,我的英语不太好,希望大家能理解我并让其他人知道解决方案。
这可能很快会公开发布。
Chrome团队表示:
在Chrome 59中,我们将推出一个名为getInstalledRelatedApps()的新API。这个新API允许您确定本机应用程序是否安装在设备上。 (https://developers.google.com/web/updates/2017/04/getinstalledrelatedapps)
然而:
注意:此 API 处于 Origin Trial 模式,这意味着我们处于实验阶段并积极寻求反馈。您需要将您的网站加入此试用版中(https://github.com/jpchase/OriginTrials/blob/gh-pages/developer-guide.md),因为它在 Web 上不是广泛可用的。您现在可以注册试用版(https://docs.google.com/forms/d/e/1FAIpQLSfO0_ptFl8r8G0UFhT0xhV17eabG-erUWBDiKSRDTqEZ_9ULQ/viewform?entry.1999497328=getInstalledRelatedApps)。此功能的当前平台状态: https://www.chromestatus.com/feature/5695378309513216
该功能在错误跟踪器中存在问题: https://bugs.chromium.org/p/chromium/issues/detail?id=587623
/更新于2018年2月15日:
getInstalledRelatedApps()
的试用已经完成:https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/completed-trials.md:首次在Chrome M59中提供。试用于2018年1月30日结束。
,但尚未在稳定版Chrome中实现:功能团队目前正在考虑下一步操作。
<a href="intent://scan/#Intent;scheme=zxing package=com.google.zxing.client.android;end"> Take a QR code </a>
不是所有浏览器都支持此功能,仅有 Chrome 和其他几个主流浏览器支持。请查看此链接了解更多详细信息。
我知道这可能有点晚了,但希望对某些人有所帮助。