如何判断Android用户是从主屏幕应用程序进入的?

10

有没有一种方法可以判断用户是通过主屏幕快捷方式进入您的网站的?对于iOS,我可以使用以下JavaScript代码来检测用户是否通过主屏幕快捷方式打开页面:


有没有办法检测用户是否通过主屏幕快捷方式进入网站?在iOS上,可以使用以下JavaScript代码来检测用户是否通过主屏幕快捷方式打开了页面:
if (('standalone' in navigator && !navigator.standalone && (/iphone|ipod|ipad/gi).test(navigator.platform) && (/Safari/i).test(navigator.appVersion)) {
            window.location = 'index2.html';
        }

我找不到在安卓上类似的操作,希望能得到帮助 :)


1
不行。因为无论触发了什么浏览器活动,它本身可能并不知道是谁请求查看网页的意图。 - S.D.
4个回答

4
简短的答案是“不行”。
从Android主屏幕启动的网站书签小部件不包括引用者(我只是checked)。
此外,在Android上本地安装/收藏Web应用程序的机制与iPhone完全不同,并且肯定没有那么多功能(如问题跟踪器中所报道的那样)。

[...]

我明确支持此请求,因为目前无法在Android上提供本地外观的WebApp,而不实现一个浅层次的App,其中仅包含一个WebView(或实现一个流行的框架,如PhoneGap或apparat.io)。

这导致你必须支付25美元才能在Android上提供本地外观的WebApp。在iOS设备上相同的事情是免费的 - 而且更优雅

顺便说一下,上面的网站所有者稍微有点错。在安卓系统中,他可以直接从自己的网站提供应用程序,而无需支付25美元通过市场/谷歌播放,因为安卓使用免费的自签名证书。不过,他的主要观点仍然存在。这不是一件容易的事情,除非他投入大量工作,否则最终结果可能不太可用。
相对而言,在安卓系统上,它削减了收藏夹小部件主屏幕功能,与iOS相比,几乎从未被使用。
例如,我个人使用主要的Chrome浏览器,或者Google搜索,或者现有的应用程序作为我访问任何网站的主要入口点。

在上面的截图中,左侧的三个红色书签实际上是网络书签。为了与我真正喜欢的非网络书签小部件形成对比,我还在右侧放置了两个电子书小部件。
此外,我认为自己是一个高级用户和许多功能的狂热早期采用者,并且我确实使用一些不太常用的Android小部件,但根据HTC的说法,我只是使用这些小部件的人群10%(除非是用于天气,时钟或音乐,因为显然人们在第一次设置手机时会使用它们!)。
即使对于我这样热爱Android小部件的人来说(特别是在我的Android平板上),更大的书签管理器小部件也给我过少的控制权,不能吸引我,而单个网站书签小部件虽然提供了相当好的控制,但看起来不太好,我从来不使用它,因为它只是一个红色的书签,中间嵌入了一个微小的favicon。
无论如何,回到您最初的问题。
缺少编写一个小工具,让您网站的每个Android用户都愿意在设备上安装。您唯一的选择是尝试在用户尝试将您的网站添加到书签时进行干预。并且只有在用户设置书签时不尝试清除附加到其中任何url参数的情况下,才能进行干预。例如,您可以将用户当前浏览您的网站的日期附加到URL中,如果用户将该URL添加到书签中,则相同的URL可能会在以后的某个时间点出现。这是一种尝试查看用户是否来自书签(或某个位置保存的链接)的方法之一。
但即使您可以这样做,这也只会告诉您用户是通过历史记录栏自动完成,还是通过主屏幕启动的书签,或者仅通过正常的Chrome启动的书签,而不是直接键入地址(我没有提及Google搜索,因为使用Google搜索的用户,Google至少会给您referrer)。

1

由于主屏幕上创建的快捷方式使用与任何其他应用程序相同的意图(毕竟,启动器仍然是一个应用程序),因此这是不可能的。

但是,如果您自己创建了快捷方式,可以将URL设置为不同的内容,并通过此来知道它可能来自启动器。

此外,如果您创建的应用程序可以像管道一样连接启动器和Web,则可以将意图设置为引用该应用程序,并通过此来假定链接是从启动器打开的。


你如何在不让用户手动操作的情况下将应用程序的URL设置为其他? - skrilled
你可以使用sendBroadcast命令来创建快捷方式,因此你可以放置任何你想要的URL。至于代码本身,请查看以下链接:https://dev59.com/vnA75IYBdhLWcg3w9-Sx#3004542 https://dev59.com/5Gkv5IYBdhLWcg3wxz2A#10343584。祝你好运。如果你没有成功,请告诉我,我会尝试自己解决。 - android developer
没什么头绪,这个技术上并没有解决我的问题,但我给你点赞,至少让它回到了零。 - skrilled
我实际上没有编写一个“应用程序”,这只是像在iOS上将网站固定到主屏幕。我认为这可能会引起一些混淆。 - skrilled
1
我明白了。这很棘手,因为你所谓的“主屏幕”只是安卓上的另一个应用程序(毕竟,用户可以使用任何他们想要的启动器),而且任何应用程序都可以以同样的方式运行。我建议如果可能的话,在服务器上设置不同的URL/查询。例如,“www.yourwebsite.com/android?fromLauncher=true”。我认为没有其他解决办法。 - android developer

1
我将采用之前提到的简短回答:不行。
由于JS安全限制,Android浏览器不允许任何网站访问有关打开浏览器或其他内容的INTENT信息。
但是……等等……有一种方法可以将网站上的JavaScript绑定到Android代码(http://developer.android.com/guide/webapps/webview.html#BindingJavaScript),因此,考虑到网站已经开发完成,我会开发一个带有漂亮图标和启用JS的WebView的简单Android应用程序,并指向该网站,以便它作为客户端或包装器应用程序,例如:“http://thewebsite.com?client=android”。在WebView上,您可以阻止导航到其他站点,因此用户无法前往其他地方,用户必须使用您的站点导航。然后,您可以像上面提到的那样将Android代码绑定到JavaScript,以将Android环境中的方法暴露给您网站中的JavaScript。

不要让人们添加指向您网站的快捷方式,而是给他们一个从Google Play商店下载您的小包装应用的链接。这样,您就可以知道谁在使用您的Android设备上的网站/ WebApp,由于您拥有该应用程序,因此可以访问INTENT并了解Android操作系统信息,并从JS中获取有关设备的更多信息,例如要知道客户端上是否存在活动网络连接等,而不是像UserAgent会提供给您的那样。

祝您好运!


0

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