有没有正确/推荐的方法来检测我正在手机上运行的UWP应用程序?

9
尝试使用JavaScript测试Windows通用应用程序时,我注意到WinJS.Utilities.isPhone属性不再可用,这是有道理的,因为在运行时没有理由询问它。
出于测试目的,我确实想知道是否有正确的方法来检测我的应用程序运行的设备。
编辑:我的问题不是关于检测移动浏览器。我谈论的是全新的Universal Windows App,可以在手机、桌面、平板电脑、Xbox、HoloLens、IoT设备等上运行。WinJS曾经有一个属性可以告诉我是否在手机上运行。但是该属性现在已经消失了。请不要将此问题与“检测移动浏览器”重复关闭。那不是我需要的。

可能是检测移动浏览器的重复问题。 - user177800
1
不是重复问题...我扩展了我的问题,以便每个人都理解我在问什么...请在提供答案之前阅读整个问题 - sebagomez
3个回答

12
警告:任何形式的设备检测都是脆弱的,因为硬件的动态性质 - 明天可能会出现一个新的设备,打破您应用程序的逻辑。最好只使用这些API进行遥测/分析,而不是触发运行时行为。
往往,你真正想知道的是设备或应用程序的某些属性,并且与设备系列本身没有直接关联(此设备是否支持SystemTray API?是否连接了键盘?窗口是否超过500px宽等)。
话虽如此,在Windows 10中,您可以通过AnalyticsInfo.VersionInfo.DeviceFamily查询DeviceFamily,它会告诉您类似于“Mobile”或“Desktop”或“Xbox”等的信息(其中“Mobile”可以是任何设备类别 - 手机、平板电脑等)。还有一个属性DeviceForm,可能有所帮助,但是在运行时不能完全依赖它来确定您正在“手机”上运行。
基本上的答案是,“你可以使用这些API进行遥测,但不要将任何值硬编码到应用程序中,以免新设备上市时导致应用程序出现错误。”至少,始终确保处理返回值不是先验了解的情况。

这正是我正在寻找的答案! - sebagomez
我完全理解微软想通过UWP实现什么,但在某些地方,WinRT的丑陋面仍然显露出来。看看WebAuthenticationBroker类吧。在手机或桌面设备上,它的工作方式完全不同。你最终总是会有两个完全(我是说完全)不同的相同事物的实现。所以,是的,DeviceFamily助手是绝对必要的。 - Eugen Timm
很遗憾,UWP没有针对移动设备和平板电脑的分离设计。在这种情况下,我们该如何为Surface平板电脑设计我们的用户界面呢? - Emil
屏幕尺寸不够用了吗? - Peter Torr - MSFT

1

再说一遍,人们不看问题。我在谈论的是一个UWP应用程序,而不是Web。我想知道WinJS是否像以前一样提供了一个开箱即用的属性。 - sebagomez
亲爱的sebagomez,我已经检查过了,这个属性支持WP8.1应用程序https://msdn.microsoft.com/en-us/library/windows/apps/dn607959.aspx。同时,很抱歉你是正确的...我只是做了一个部分读取,但我认为如果它不再可用,你应该考虑添加一个外部库来执行验证过程。 - carlos a.
我在谈论 Windows 10。 - sebagomez
亲爱的sebagomez,您在原始问题中必须更具体,并对其进行研究。现在他所能做的就是检查屏幕分辨率并从那里开始进行验证,如此处所述:https://github.com/winjs/winjs/issues/601 - carlos a.
谢谢Carlos,你可以添加一个涉及该问题的答案,我会将其标记为答案。 - sebagomez

0

有许多JS库可以检测使用的平台/设备。

我个人喜欢使用这个库:https://github.com/kaimallea/isMobile

然后,您就可以以这种方式检测移动设备:

isMobile.apple.tablet
isMobile.android.phone

等等其他的。

如果您有想法要实现这样的库,请记住,它需要一些努力来保持最新,因为检测移动设备的方式可能随着时间的推移而改变。

通常检测用户设备的常见方式是检查查询标头。

请记住,您不能绝对依赖此信息-标头可能很容易被修改。请搜索用户代理了解更多信息。

因此,“针对使用手机的用户省略授权流程”是非常糟糕的想法。


抱歉,我在谈论一个UWP应用程序,而不是Web应用程序。尽管您的第一个答案可能也有效。我会看一下的。谢谢。 - sebagomez

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