大多数 B2B 移动端工作并不是用户从应用商店下载的那类应用,而是与商城和 ERP 配套、交付给已知设备群(销售代表、仓库人员、司机)的伴侣应用,用来处理桌面浏览器做得不好的事情。以下是我们近期多个 .NET MAUI 项目中一直行之有效的模式。
我们交付的三种伴侣应用模式
1. 销售代表伴侣应用
销售代表拜访客户时打开应用,眼前即可看到客户的订单历史、合约价格、可用库存和近期发票,并能代客户下单(即 B2B Edition 的“代客操作(masquerade)”模式应用到移动端)。该应用与客户使用的同一套 B2B 商城配套,而销售代表拥有更高的权限。
2. 仓库伴侣应用
拣货员和打包员扫描条码、查看拣货清单、确认发货。与销售代表应用不同,仓库应用存在硬件方面的限制:三防 Android 扫描枪、仓库内常常没有 LTE 信号,有时还需要语音拣货集成。
3. 现场服务伴侣应用
服务技师查看分配的工单、客户历史、车上的备件以及过往到访的照片。这类应用往往是离线优先的,因为技师常处于地下室、阁楼和没有信号的偏远作业现场。
MAUI 带来的优势
- iOS、Android、Windows 共用一套代码。 销售代表拿到的是 iPhone 应用,仓库使用 Android 扫描枪,运营团队使用 Windows 平板,背后都是同一套代码。
- 原生性能。 与 React Native 或 Flutter(对某些团队也都是不错的选择)不同,MAUI 应用编译为原生二进制文件并使用原生 UI 控件。列表即便有上千条目也能流畅滚动,这在目录庞大的应用中尤为重要。
- .NET 生态系统。 如果你的后端是 .NET(ASP.NET Core、EF Core、Azure Functions),在移动端与服务器之间共享模型、校验规则和序列化逻辑会带来实实在在的生产力提升。
- 微软的投入承诺。 Xamarin 已停止维护,MAUI 是其继任者并获得持续投入。对一款需要使用 5 年以上的应用来说,这一点很重要。
B2B 移动模式与 B2C 的差异
身份认证
B2C 移动端使用社交登录或用户名/密码。B2B 移动端使用企业身份,即 Azure AD / Entra ID、Okta,有时是自建的 IdP。首选的移动端模式是 带 PKCE 的 OIDC / OAuth2,配合妥善的令牌刷新,以及令牌在会话中途过期时清晰的重新认证路径。SAML 仍会出现在企业技术栈中,但在移动端必须通过基于浏览器或代理(broker)的流程接入(系统浏览器、ASWebAuthenticationSession、AppAuth),而不是原生 SAML 库。对基于 AAD 的应用我们使用 MSAL.NET,它足够成熟,能妥善处理各种边界情况。
离线优先
B2C 应用假定网络始终可用,B2B 现场应用则不然。行之有效的模式是:
- 使用 SQLite(通过 sqlite-net-pcl)作为本地存储
- 设置同步层,在离线时记录“意图操作”(下单、标记工单完成、采集签名),并在重新联网时回放
- 冲突处理要显式、而非静默:如果同一客户在线上和离线都被修改过,就把冲突呈现给用户
- 使用服务器返回的最后修改时间戳,使重新同步只拉取增量
推送通知
B2C 推送用于营销,B2B 推送则是运营性的:“你的工单分配已变更”“客户回复了一份报价”“你关注的某个 SKU 库存偏低”。推送要保持稀疏且高信号量;一天收到三条运营推送的用户,一旦其中一条是“超值优惠……”,就会开始不再阅读它们。
硬件集成
条码扫描、NFC、签名采集、带元数据的拍照、用于连接打印机或标签秤的 BLE,这些都需要平台专属的处理器(handler)。MAUI 的处理器架构很适合做这些事,但要为此预留时间。
我们采用的架构
对大多数伴侣应用而言:
- 采用 MVVM,配合 CommunityToolkit.Mvvm 减少样板代码(RelayCommand、ObservableProperty 源生成器)
- 如果是全新应用,使用 Shell 做导航(基于 URL、自带抽屉菜单、搜索)
- 使用 Refit 为 ASP.NET Core 后端构建类型化的 REST 客户端
- 使用 Polly 在不稳定连接上做重试/熔断
- 使用 Serilog 写入本地文件,并在联网时刷新到服务器:当销售代表说“我的应用昨天崩溃了”,日志就在那里
- 通过 Firebase Crashlytics、Sentry、Bugsnag 或 Azure Monitor 做崩溃报告与诊断,根据客户其余可观测性技术栈来择一选用。(微软已在 2025-03-31 之后停用 App Center 的大部分功能,其 Analytics 与 Diagnostics 支持仅延续到 2027 年,因此我们不会在新项目中选用它。)
- 通过 TestFlight / Google Play 内部与封闭测试轨道做分发以实现分阶段灰度,并通过 MDM(Intune、Jamf、Workspace ONE)做企业/私有分发构建。避免 OTA“热修复”模式,因为它们违反 Apple 的应用商店政策。
相比原生开发,MAUI 中会变难的部分
需要如实规划的几点:
- 自定义平台控件比原生更费工,MAUI 处理器虽好但较为冗长。如果你的设计有大量像素级精确的要求,请预留时间。
- 深层原生 API(特定的 BLE 怪癖、特定的相机行为)有时需要平台专属代码。这在跨平台开发中很正常,请为此预留预算。
- 即便是面向企业的 B2B,iOS 分发仍然需要 Apple Developer 账号、预置描述文件以及那一整套证书流程。微软并没有让这一点变得更轻松。
结论
B2B 移动伴侣应用是我们作品集中使用率最高、却最不张扬的一类软件。它们在设备上运行数年,与商城和 ERP 并肩协作,正是销售代表生产力真正复利累积的地方。当你的后端是 .NET 且设计能接受原生质感的 UI 时,.NET MAUI 就是正确的工具;上述这些模式正是我们用来让它们在上线之后依然易于维护的方法。
正在评估一个伴侣应用项目?把设备群以及它要配套的工作流程告诉我们,这才是我们如实给出估算、而不是套用通用模板的方式。