【Power Apps 技巧】一招教你区分应用的运行平台(Web、iOS、Android)

在开发 Power Apps 时,有时我们可能需要根据用户正在使用的设备或平台(比如是在网页端、iOS 还是 Android 上运行)来调整应用的界面或功能。例如,某些功能可能只在移动端有意义,或者您想为不同的平台提供 slightly different 的用户体验。那么,如何在 Power Apps 中实现这一点呢?

介绍一种简单而有效的方法,利用 Power Apps 内置的属性来判断应用当前的运行环境。

核心原理:利用 Host 对象的属性

Power Apps 提供了一个内置的 Host 对象,该对象包含了关于应用当前运行环境的信息。

我们可以利用 Host 对象下的两个关键属性来区分不同的平台:Host.OSTypeHost.Version

  • Host.OSType:顾名思义,这个属性告诉我们宿主操作系统的类型。

  • Host.Version:这个属性提供了更多关于宿主环境的版本信息。

通过检查这两个属性的值,我们就可以判断应用是运行在 Web 浏览器中,还是在 iOS 或 Android 的 Power Apps 移动客户端中。

不同平台的属性值对比

根据来源信息,不同平台的 Host.OSTypeHost.Version 属性值如下表所示:

平台类型

Host.OSType 的值

Host.Version 的值

网页端

Windows

PowerApps-Web/3.xxxxx.xx(Windows)

PowerApps-Studio/3.xxxxx.xx(Windows)

PowerApps-Native/3.xxxxx.xx(Windows)

安卓端

Android

PowerApps-Native/3.xxxxx.xx(Android)

iOS 端

iOS

PowerApps-Native/3.xxxxx.xx(iOS)

注意: 来源中明确列出了网页端 (Host.OSType 是 "Windows",但 Host.Version 是 "PowerApps-Web/")、安卓端 (Host.OSType 是 "Android") 和 iOS 端 (Host.OSType 是 "IOS") 的 Host.OSType 值,但只提供了网页端的 Host.Version 值,安卓和 iOS 端的 Host.Version 值在来源中没有详细说明。

如何利用这些信息?

通过在 Power Apps 的公式中使用 Host.OSTypeHost.Version 的值,我们可以实现基于平台的条件逻辑。

例如,您可以在某个控件的 Visible 属性中使用条件判断,使其仅在特定平台上显示:

  • 仅在移动端(iOS 或 Android)显示某个按钮:

    Host.OSType = "iOS" || Host.OSType = "Android"
    
  • 仅在网页端显示特定的文本或布局:

    Host.Version = "PowerApps-Web/"
    

    或者,如果需要更精确地排除移动端:

    !(Host.OSType = "IOS" || Host.OSType = "Android")
    

您也可以在应用的 OnStart 属性中设置一个全局变量,用于存储当前的平台类型,方便在应用的其他地方引用:

Set(
    gbl_Platform,
    If(
        Host.Version = "PowerApps-Web/",
        "Web",
        If(
            Host.OSType = "IOS",
            "iOS",
            If(
                Host.OSType = "Android",
                "Android",
                "Other" // Handle potentially unknown platforms
            )
        )
    )
);

然后在控件或其他逻辑中使用 gbl_Platform 变量进行判断。

关于部署不同功能

来源中提供了区分不同 Power App 运行环境的方法,但并未详细说明如何基于这些区分来部署不同的功能或提供具体的部署示例。通常,这种"部署不同功能"并非指物理上部署不同的应用版本,而是在同一个应用内部,通过上面的条件判断(如 IfSwitch 函数),根据 Host.OSTypeHost.Version 的值来启用、禁用、显示或隐藏特定的功能、屏幕、控件或调整其属性。

还有另一种方法可以判断 Power Apps 应用是运行在移动端还是桌面端...

可参考这个博主的视频,链接如下:

https://www.youtube.com/watch?v=ZWgYaV1VvAc

这个方法的核心是利用 Power Apps 中某些只有在移动设备上才能正常工作并产生有意义数值的函数

具体的说,可以利用 Location 函数的 Altitude 属性和 Acceleration 函数的 X 属性。

判断原理:

在桌面(PC)环境中,Location.AltitudeAcceleration.X 这些属性的值通常会是

但在移动设备上,因为设备可以获取位置信息(海拔)和感知加速度,这些属性的值会 大于零

因此,通过检查 Location.Altitude 是否大于零,或者 Acceleration.X 是否大于零,就可以判断当前设备是否是移动端...

具体实现(示例):

您可以在应用的 OnStart 属性或其他需要判断的地方,使用一个 If 语句来设置一个全局变量,例如 varMobileOrDesktop

Set(
    varMobileOrDesktop,
    If(
        Location.Altitude > 0 || Acceleration.X > 0, // 检查海拔或加速度值 [3]
        "Mobile", // 如果任一大于零,则认为是移动端 [3]
        "Desktop" // 否则认为是桌面端 [3]
    )

总结

利用 Host.OSTypeHost.Version 属性是判断 Power Apps 应用运行平台(网页端、iOS、Android)的有效方法。通过简单的条件判断,您可以根据不同的平台调整应用的行为和界面,从而为用户提供更优化、更贴合其使用环境的体验。可以通过上述的两个内建的值对比测试,可以充分利用这两个值来达到一定的目的。另外一种,利用 Location 函数的 Altitude 属性和 Acceleration 函数的 X 属性来判断,也能达到一定的目的。还需要在不同的应用中灵活选用。

文章作者: Joe.W
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 codefriedsimple
技术分享 Power App
喜欢就支持一下吧