微软商店软件上架 Flutter 应用

微软商店终于对个人开发者免注册费了,微软6月画的大饼,11月我才吃上。不过免费总归是好事,多了一个分发渠道,不用总是在 GitHub 阴暗的角落里蛄蛹。

上架的步骤微软的文档已经写的很详细了:

B站也有大佬做的视频教程:如何免费上架微软应用商店,无需买对象存储!无需代码签名!完全免费!!!

所以我就不再赘述了,只说一下一些注意事项。

注册开发者账户

注册时需要验证身份,也就是拍身份证的正反面,以及自拍人脸。

  • 拍摄需要扫码从PC跳转到手机
  • 拍摄的网页不支持火狐浏览器,只能用Chrome、Edge和Safari
  • 建议先洗个头再自拍,抓拍的速度太快了,我顶着个大油头瞬间就给我拍完了,连个预览都没有

创建新产品

保留应用名称后,点击左侧边栏中的产品标识,获取需要的打包信息,下面三条信息需要填写到 msix 的配置中:

  • Package/Identity/Name 对应 identity_name
  • Package/Identity/Publisher 对应 publisher
  • Package/Properties/PublisherDisplayName 对应 publisher_display_name

打包 MSIX

Flutter 官方推荐的打包工具是 msix | Dart package
安装:

1
flutter pub add --dev msix

pubspec.yaml中创建配置字段,我的配置字段为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
msix_config:  
display_name: "Cycle It" # 应用名称
publisher_display_name: "Siriusq" # 上一步获取的 Package/Properties/PublisherDisplayName
publisher: "CN=8004FAEB-7523-4D3E-B115-90238383C5D4" # 上一步获取的 Package/Identity/Publisher
identity_name: "Siriusq.CycleIt" # 上一步获取的 Package/Identity/Name
languages: "en, zh-Hans, zh-Hant" # 应用支持的语言,这里填几种,后续在 Store 一览 中就需要用几种语言写简介
msix_version: "1.0.2.0" # 应用版本,后续更新必须递增
logo_path: "assets/images/app_icon_windows.png" # 应用图标路径
file_extension: "sqlite, txt"
store: true # 构建的包是为了上架商店,这里不设置的话后续运行构建命令时加入 --store 也行
output_name: "cycle_it" # 生成的 MSIX 文件名
toast_activator: # 这是通知有关的,与本文无关
clsid: "56d804df-4bf8-4a95-990a-8574d1f770dd"
arguments: "-ToastActivated"
display_name: "Cycle It"

运行打包命令

1
2
3
flutter clean
flutter pub get
dart run msix:create

创建应用提交

  • 定价和可用性:在市场组中设置货币和零售价,只需要设置一种货币,汇率会自动转换
    • 优先上传包,再填写其他信息,有些信息会根据上传的包自动生成。
    • 上传后会出现一条警告:程序包接受验证警告: The following restricted capabilities require approval before you can use them in your app: runFullTrust. 不用管它,Flutter 开发的桌面应用打包成 MSIX 后必须要这个权限,后续填写说明即可。
  • 属性
    • 隐私策略:这里我在包上传之前选了否,但是上传包之后又变成了是,可能是我的数据导入和导出功能需要读取本地文件。为了避免审核被卡,就不要手动改了。
    • 隐私策略 URL:让 AI 给写一个,然后上传到 GitHub 的仓库中,或者创建一个 GitHub Pages 也行,然后把网页链接粘贴过来。
  • Store 一览:填写简介、预览图等信息,每个语言都要写一遍,最麻烦的部分,也是最适合 AI 干的活。注意这部分不支持 Markdown 语法,我被 AI 给坑了一波,但是懒得改了,一样能看。
  • 提交选项:认证说明部分有些坑
    • Flutter 打包的应用都会提示:你需要先请求批准,才能在应用中使用以下受限功能: runFullTrust。为何需要使用 runFullTrust 功能,如何在产品中使用?
    • 必须解释使用 runFullTrust 的原因,而且不知道是不是 Bug,要把为何需要使用 runFullTrust 功能,如何在产品中使用这句话写上,我没加这句话之前,点击保存之后一直显示这部分未完成。
    • 输入框还有字数限制,但是微软没标出来。直接粘贴的话多的字会被截去。
    • 认证说明参考:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      Cycle It 循物是一款基于 Flutter 的开源免费应用,所有功能均在本地设备上离线运行。应用开源于 https://github.com/Siriusq/cycle_it 

      测试说明:
      * 应用安装后,可从开始菜单直接正常启动。
      * 无需测试帐号,也无需连接网络。
      * 本应用不收集、不上传、不共享任何用户的个人数据。
      * 所有数据均存储在本地 SQLite 数据库中。
      * 应用启动后会直接进入主界面(物品列表页)。
      * 如果用户主动启用通知功能,应用会在用户设置的通知时间发出 Toast 通知
      * 用户点击设置中的检查更新、隐私政策和使用说明按钮时,会通过系统默认浏览器打开 GitHub 上应用仓库对应的页面
      * 应用会根据窗口宽度切换不同的 UI 布局

      为何需要使用 runFullTrust 功能,如何在产品中使用
      此应用使用 Flutter 构建 Windows 桌面版本,属于 Win32 应用。为了使 Win32 主进程能够在 MSIX 打包后正常运行,必须启用 runFullTrust。它仅用于启动 Flutter 桌面可执行文件。

提交认证

提交认证之后等待最多三个工作日,就能收到微软的邮件提醒了。我虽然是周五晚上提交的,但是周六晚上就通过了审核,难不成有加班的?收到邮件后过几分钟就能在微软商店中搜索到自己的应用了,美滋滋。

生成应用徽章

很多地方都会看见下面这种徽章,点击后可以跳转到商店页面。

获取步骤为:

  1. 进入应用在商店中的页面
  2. 点击分享按钮,复制链接
  3. 在浏览器中打开链接
  4. 滑动至页面底部
  5. 点击创建应用徽章
  6. 选择非 JavaScript 徽章
  7. 复制代码到 README 中即可