我正在寻找一种方法来找出是否从客户端网络浏览器安装了特定的应用程序。平台是Android。例如,我写我自己的网站,我写我自己的应用程序,现在我想当用户来到我自己的网站从Android手机浏览器。浏览器看应用程序是否已经安装在手机上,如果没有建议安装应用程序。我可以这样做吗?
i86rm4rw1#
有一种方法可以做到这一点。出于安全和隐私的原因,您无法检测是否安装了某个特定的应用程序。但您可以使用一个技巧来打开已安装的应用程序,或打开未安装的应用程序的Google Play页面。为此,您必须在应用的主Activity上创建一个intent过滤器,以便在调用给定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。
market://details?id=com.your.app.package
dy2hfwbg2#
你的意思是通过浏览器中运行的JavaScript?我认为(希望)这是不可能的。我不希望任何随机的网站能够看到安装了什么应用程序。如果您希望用户安装特定的应用,您可以在网站上提供Market链接:http://developer.android.com/guide/publishing/publishing.html#marketintent
u2nhd7ah3#
我发现了一个更有用的解决方案。下面是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函数“test 2”将被调用,因此我们知道应用程序还没有安装,所以我们可以在“test 2”中做任何事情!好处是我们不需要使用标准的html模式,它会显示一个选择对话框,如果我自己使用定义的模式,页面不会被导航到错误的页面!我是一个中国人,我的英语不是很好,希望大家都能理解我,让大家知道我的决心。
ru9i0ody4#
您可以使用Android Intents。您可以构建Intent锚点来启动应用。如果应用未安装,浏览器将搜索Intent锚点中指定的包名称。我们还可以提供Fall Back URL。示例:
<a href="intent://scan/#Intent;scheme=zxing package=com.google.zxing.client.android;end"> Take a QR code </a>
这不是所有的浏览器都支持的。Chrome和其他几个主流浏览器都支持它。查看这个link了解更多细节。我知道现在说这个有点晚了我觉得这可能会帮到别人。
qlckcl4x5#
这可能很快就会公开。Chrome团队表示:在Chrome 59中,我们引入了一个名为getInstalledRelatedApps()的新API。这个新API可以让你确定你的原生应用是否安装在设备上。(https://developers.google.com/web/updates/2017/04/getinstalledrelatedapps)然而:注意:此API支持Origin试用,这意味着我们处于试验模式,正在积极寻求反馈。您必须选择您的网站加入此试用(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:First available in Chrome M59. Trial ends on January 30, 2018.,但尚未在稳定的Chrome中实现:Feature team currently considering the next steps for the feature.
getInstalledRelatedApps()
First available in Chrome M59. Trial ends on January 30, 2018.
Feature team currently considering the next steps for the feature.
5条答案
按热度按时间i86rm4rw1#
有一种方法可以做到这一点。
出于安全和隐私的原因,您无法检测是否安装了某个特定的应用程序。但您可以使用一个技巧来打开已安装的应用程序,或打开未安装的应用程序的Google Play页面。
为此,您必须在应用的主Activity上创建一个intent过滤器,以便在调用给定URL时打开它。
解释:当用户导航到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。
dy2hfwbg2#
你的意思是通过浏览器中运行的JavaScript?我认为(希望)这是不可能的。我不希望任何随机的网站能够看到安装了什么应用程序。
如果您希望用户安装特定的应用,您可以在网站上提供Market链接:http://developer.android.com/guide/publishing/publishing.html#marketintent
u2nhd7ah3#
我发现了一个更有用的解决方案。下面是Android配置文件:
下面是html代码:
这样,当用户点击标签时,如果设备已经安装了该应用,那么它就不会显示对话框让用户选择,而是直接打开应用;如果应用程序还没有安装,那么js函数“test 2”将被调用,因此我们知道应用程序还没有安装,所以我们可以在“test 2”中做任何事情!好处是我们不需要使用标准的html模式,它会显示一个选择对话框,如果我自己使用定义的模式,页面不会被导航到错误的页面!我是一个中国人,我的英语不是很好,希望大家都能理解我,让大家知道我的决心。
ru9i0ody4#
您可以使用Android Intents。您可以构建Intent锚点来启动应用。如果应用未安装,浏览器将搜索Intent锚点中指定的包名称。我们还可以提供Fall Back URL。
示例:
这不是所有的浏览器都支持的。Chrome和其他几个主流浏览器都支持它。查看这个link了解更多细节。
我知道现在说这个有点晚了我觉得这可能会帮到别人。
qlckcl4x5#
这可能很快就会公开。
Chrome团队表示:
在Chrome 59中,我们引入了一个名为getInstalledRelatedApps()的新API。这个新API可以让你确定你的原生应用是否安装在设备上。(https://developers.google.com/web/updates/2017/04/getinstalledrelatedapps)
然而:
注意:此API支持Origin试用,这意味着我们处于试验模式,正在积极寻求反馈。您必须选择您的网站加入此试用(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:First available in Chrome M59. Trial ends on January 30, 2018.
,但尚未在稳定的Chrome中实现:Feature team currently considering the next steps for the feature.