什么是通用 Windows 平台 (UWP) 应用?

UWP 是创建适用于 Windows 的客户端应用程序的众多方法之一。 UWP 应用使用 WinRT API 来提供强大的 UI 和高级异步功能,这些功能非常适用于 Internet 连接的设备。

若要下载开始创建 UWP 应用所需的工具,请参阅准备工作,然后编写你的第一个应用

UWP 在 Microsoft 的开发故事中处于什么位置?

UWP 是创建在 Windows 10 设备上运行的应用的一种选择,并且你可以将它与其他平台结合使用。 UWP 应用可以使用 Win32 API 和 .NET 类(请参阅适用于 UWP 应用的 API 集适用于 UWP 应用的 DLL以及 适用于 UWP 应用的 .NET)。

Microsoft 的开发故事还在继续发展,随着 WinUIMSIX 以及 Project Reunion 等计划的推出,UWP 成为创建客户端应用的强大工具。

UWP 应用的功能

UWP 应用的特点:

  • 安全:UWP 应用声明其访问哪些设备资源和数据 用户必须对该访问授权。
  • 能够在运行 Windows 10 的所有设备上使用常见的 API。
  • 可以使用设备的特定功能并让 UI 适应不同的设备屏幕尺寸、分辨率和 DPI。
  • 可通过所有 Windows 10 设备(或仅指定的 Windows 10 设备)上的 Microsoft Store 获取。 Microsoft Store 提供多种可帮助你的应用赚钱的方法。
  • 能够在不对计算机构成风险或引起“计算机腐烂”的情况下安装和卸载。
  • 互动:使用动态磁贴、推送通知以及与 Windows 时间线和 Cortana 的“Pick Up Where I Left Off”交互的用户活动吸引用户。
  • 可使用 C#、C++、Visual Basic 和 Javascript 编程。 对于 UI,请使用 WinUI、XAML、HTML 或 DirectX。

让我们来看一下更详细的介绍。

安全

UWP 应用在其清单中声明所需的设备能力,如访问麦克风、位置、网络摄像头、USB 设备、文件等。 用户必须在应用被授予能力前确认并授权该访问。

跨所有设备的通用 API 设计面

Windows 10 引入了通用 Windows 平台 (UWP),这在运行 Windows 10 的每台设备上提供了通用的应用平台。 UWP 核心 API 在所有 Windows 设备上是相同的。 如果你的应用只使用核心 API,它将在任何 Windows 10 设备上运行,不论你是定位台式电脑、Xbox、混合现实头戴显示设备还是其他设备。

使用 C++ /WinRT 或 C++ /CX 编写的 UWP 应用可以访问属于 UWP 的 Win32 API。 所有 Windows 10 设备都实现这些 Win32 API。

扩展 SDK 公开特定设备类型的特殊能力

如果以通用 API 为目标,则你的应用可以在运行 Windows 10 的所有设备上运行。 但如果希望 UWP 应用利用设备特定的 API,也同样可以这样做。

扩展 SDK 让你可以为不同设备调用专用的 API。 例如,如果你的 UWP 应用面向 IoT 设备,则可以在项目中添加 IoT 扩展 SDK 以利用特定于 IoT 设备的功能。 有关添加扩展 SDK 的详细信息,请参阅使用扩展 SDK 编程的“扩展 SDK”部分。

你可以编写应用,以让它仅在特定类型的设备上运行,然后限制从 Microsoft Store 将它分发到该设备类型。 或者,你可以有条件地测试 API 在运行时的状态,并相应调整应用的行为。 有关详细信息,请参阅使用扩展 SDK 编程的“编写代码”部分。

以下视频提供对设备系列和自适应编码的简要概述:

自适应控件和输入

UI 元素通过调整其布局和比例响应应用所运行屏幕的尺寸和 DPI。 UWP 应用与多种输入类型(如键盘、鼠标、触摸、笔和 Xbox One 控制器)配合良好。 如果你需要进一步为特定屏幕大小或设备定制 UI,新的布局面板和工具将帮助你设计可以适应运行应用的不同设备和外形规格的 UI。

Windows 支持的设备

Windows 通过以下功能帮助你的 UI 面向多个设备:

  • 通用控件和布局面板可帮助你针对设备的屏幕分辨率优化 UI。 例如,按钮和滑块等控件将自动适应设备屏幕的尺寸和 DPI 密度。 布局面板根据屏幕尺寸帮助调整内容的布局。 自适应缩放根据不同设备的分辨率和 DPI 自动进行调整。
  • 通过常用的输入处理功能,可通过触摸、使用笔、鼠标、键盘或控制器(如 Microsoft Xbox 控制器)接收输入。
  • 工具可以帮助你设计出能够适应不同屏幕分辨率的 UI。

你的应用 UI 的某些方面将自动适应不同的设备。 但是,你的应用的用户体验设计可能需要根据正在运行该应用的设备进行调整。 例如,照片应用在手持式小型设备上运行时可以调整其 UI,以确保该用法是单手使用的理想之选。 当照片应用在台式机上运行时,UI 应进行调整以充分利用额外的屏幕空间。

有一个适用于所有设备的应用商店

统一的 App Store 让你的应用在 Windows 10 设备(如电脑、平板电脑、Xbox、HoloLens、Surface Hub 和物联网 (IoT) 设备)上可用。 可以向 Microsoft Store 提交应用,并使其对所有类型的设备或仅对所选设备类型可用。 你将在一个位置上提交和管理适用于 Windows 设备的所有应用。 想要使用 UWP 功能实现 C++ 桌面应用的现代化并将其在 Microsoft store 内出售? 这同样可以实现。

UWP 应用与 Application Insights 集成以获得详细的遥测和分析 - 用于了解用户、改进应用的重要工具。

UWP 应用可以使用 MSIX 进行打包,并通过 Microsoft Store 或其他方式进行分发。 无论采取哪种方式分发应用,MSIX 都允许对应用进行更新,请参阅从代码更新非应用商店发布的应用包

获取应用收益

可以选择如何获取应用收益。 可以通过多种方法利用你的应用盈利。 只需选择最适合自身的方式即可,例如:

  • 付费下载是最简单的选项。 只需指定价格即可。
  • 试用允许用户在购买前先试用你的应用,与更传统的“免费模式”选项相比,用户更易于发现你的应用并转而使用该应用。
  • 激励用户的促销价格。
  • 应用内购买。

向用户提供相关且实时的信息以吸引他们再次访问

保持用户积极使用你的 UWP 应用有多种方法:

  • 动态磁贴和锁屏界面磁贴可以从应用中显示上下文相关且实时的信息概览。
  • 推送通知可提供实时提醒来引起用户的注意。
  • 用户活动允许用户在应用中上次中断的位置继续,甚至可以跨设备实现。
  • “操作中心”管理来自应用的通知。
  • 后台执行和触发器使你的应用仅在用户需要时才会运行。
  • 你的应用可以使用语音和蓝牙 LE 设备来帮助用户与周围的世界进行交互。
  • 集成 Cortana 以将语音命令功能添加到你的应用。

使用一种你已知道的语言

UWP 应用可以使用 Windows 运行时,它是操作系统提供的本机 API。 此 API 通过 C++ 实现,并且在 C#、Visual Basic、C++ 和 JavaScript 中均受支持。 适用于编写 UWP 应用的部分选项包括:

  • XAML UI 和 C#、VB 或 C++
  • DirectX UI 和 C++
  • JavaScript 和 HTML
  • WinUI

准备工作

查看准备工作以下载创建应用所需的工具,然后编写第一个应用

设计应用

Microsoft 的设计系统名为 Fluent。 Fluent Design 系统是一套结合了最佳实践的 UWP 功能,用于创建在所有类型的支持 Windows 的设备上都表现出色的应用。 Fluent 体验能够适应各类设备,并提供自然的使用感受,从平板电脑到笔记本电脑,从电脑到电视,再到虚拟现实设备。 有关 Fluent Design 的简介,请参阅 UWP 应用的 Fluent Design 系统

除了确定应用外观和运行方式外,良好的设计还是确定用户如何与你的应用交互的过程。 用户体验极大地影响着用户对你的应用的满意度,所以请勿忽略此步骤。 设计基础知识介绍了如何设计通用 Windows 应用。 有关设计出令用户满意的 UWP 应用的信息,请参阅面向设计人员的通用 Windows 平台 (UWP) 应用简介。 在开始编写代码之前,请参阅设备入门,以帮助你全面考虑在你要针对的所有不同外形规格上使用应用的交互体验。

除了在不同设备上的交互外,还需规划应用以利用在多个设备之间运行的优势。 例如:

添加服务

向 Store 提交应用

使用合作伙伴中心可以在同一位置针对 Windows 设备管理和提交所有应用。 请参阅发布 Windows 应用和游戏,了解如何提交应用以在 Microsoft Store 中发布。

新功能简化了流程,同时给予您更多的控制。 你还会找到与付款详细信息组合的详细分析报告推广你的应用并与客户互动的方式,等等。

有关更多入门材料,请参阅生成适用于 Windows 10 设备的 Windows 应用简介

更多高级主题

通用 Windows 平台与 Windows 运行时 API 之间的关系

如果你正在生成一个通用 Windows 平台 (UWP) 应用,将“通用 Windows 平台 (UWP)”和“Windows 运行时 (WinRT)”视为一定意义上同义可以获得诸多的好处和便利。 但是,我们不妨揭秘这两种技术的背景,确定这些概念之间存在什么差别 。 如果你对这些概念感到好奇,本部分提供了终极解答。

Windows 运行时和 WinRT API 是 Windows API 是的演进。 Windows 最初是通过扁平的 C 式 Win32 API 编写的。 后来又加入了 COM API(DirectX 就是一个突出的例子)。 Windows 窗体、WPF、.NET 和托管语言引入自身的 Windows 应用编写方式,并形成了自身的 API 技术风格。 Windows 运行时在幕后在 COM 的下一阶段。 在实际的应用程序二进制接口 (ABI) 层,Windows 运行时在 COM 中的根基是可见的。 但是,Windows 运行时在设计上可以从众多不同的编程语言调用。 并且可让其中的每种语言非常自然地调用。 为此,可以通过所谓的语言投影来访问 Windows 运行时。 Windows 运行时可以投影到 C#、Visual Basic、标准 C++、JavaScript 等语言。 此外,经过适当的打包后(请参阅桌面桥),可以从众多应用程序模型中的一个模型生成的应用调用 WinRT API:Win32、.NET、WinForms 和 WPF。

当然,也可以从 UWP 应用调用 WinRT API。 UWP 是构建在 Windows 运行时基础之上的应用程序模型。 从技术上讲,UWP 应用程序模型基于 CoreApplication,不过,根据所选的编程语言,你可能看不到这种细节。 如本主题所述,从价值主张的角度看,UWP 致力于帮助编写单个二进制应用,如果需要,你可以将此应用发布到 Microsoft Store,并在众多不同外形规格的设备上运行。 UWP 应用的适用设备范围取决于限制应用调用的或者按条件调用的 Windows 运行时 API 子集。

希望本部分合理描述了 Windows 运行时 API 底层技术之间的差异,以及通用 Windows 平台的机制和商业价值。