联网 App 专题:验证记录

« 返回专题

本页由 docs/tools/net-apps/publish.py 根据最终归档的校验报告生成,表中的 SHA-256 就是下载文件的哈希。

校验总览

课 下载 SHA-256(前 12 位) 积木数 编辑器载入 / 保存重开 后台导入 Android APK 业务检查
第 1 课 连通测试 NetHello.aia 9afbc4d27a3e 161 0 错误 通过 通过 14 项通过
第 2 课 班级留言板 MessageBoard.aia 4e2baae7745d 285 0 错误 通过 通过 25 项通过
第 3 课 点击挑战排行榜 Leaderboard.aia 4667328ac123 397 0 错误 通过 通过 22 项通过
第 4 课 图片上传 PhotoShare.aia 1a440f1b5bb6 360 0 错误 通过 通过 19 项通过
第 5 课 带图商品墙 ShopWall.aia 52a622552364 607 0 错误 通过 通过 30 项通过

每一项是怎么验的

  • 编辑器载入 / 保存重开:用与线上编辑器同源的 Blockly 载入最终 .aia 的全部积木,核对积木数、变量下拉框的内部值和完整 YAIL 生成,再保存、重开一次,均为 0 错误。
  • 后台导入:用平台真实的项目导入代码导入 .aia,核对屏幕、积木与素材都保留。
  • Android APK:把最终工程交给真实的编译服务器,编出非空 APK。
  • 业务检查:直接执行最终 .aia 里的积木。服务端不是替身:每次都把服务端源码真实启动起来,网络微数据库按组件源码的表单格式发请求,图片按 Web 客户端的分块方式真实上传,再按返回的地址取回图片核对;服务端关掉、口令抄错、重启后数据还在等情况也都真跑一遍。相册选图、图片压缩、对话框等手机侧边界用替身(压缩用 Pillow 真做)。
  • 没有做的:真机运行、AI 伴侣联调、手机与电脑跨设备的真实局域网访问、鸿蒙 HAP 编译。

各课业务检查明细

第 1 课 连通测试(NetHello.aia)

SHA-256:9afbc4d27a3ef5eb80925fb04014eb1ceabfaf36ae6d517709def2a60a7d115d,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 没填服务地址时不发请求,提示先填地址
  2. 首次打开提示先填服务地址
  3. 地址不以 http:// 开头时拒绝保存
  4. 保存时去掉首尾空格和末尾的 /,并设为网络微数据库的服务地址
  5. 重新打开 App 自动使用保存的服务地址
  6. 内容为空时不发请求
  7. 点保存后按钮变灰、显示「正在保存……」(请求还没回来)
  8. 服务器上真的存了去掉首尾空格的那句话(中文与数字原样)
  9. 「值存储完毕时」显示保存成功与用时,按钮恢复
  10. 另一台手机(另一份本地数据)填同一地址,读到同一句话
  11. 服务器上没有这个标签时提示先保存
  12. 口令抄错(服务器返回 404)时显示错误原因并恢复按钮
  13. 服务端关掉后点读取:显示连不上与排查提示
  14. 服务端重新启动后数据还在,能继续读取

第 2 课 班级留言板(MessageBoard.aia)

SHA-256:4e2baae7745d685a26eccea140dd24e39bec16b7ebf8f11285458afa2b4add3e,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 没填服务地址时不请求,自动刷新计时器已开启
  2. 没有服务地址时自动刷新不发请求
  3. 首次打开提示先填服务地址
  4. 地址不以 http:// 开头时拒绝保存
  5. 保存时去掉首尾空格和末尾的 /,并设为网络微数据库的服务地址
  6. 重新打开 App 自动使用保存的服务地址
  7. 保存地址后立刻刷新:服务器上还没有留言时提示写第一条
  8. 没填昵称不能发送
  9. 留言为空不能发送
  10. 超过 200 字时提示当前字数
  11. 发送时先向服务器取最新列表,而不是直接写
  12. 服务器上的列表多了一条:昵称(去空格)、内容、时间
  13. 发送成功后清空输入框、按钮恢复,昵称记在手机上
  14. 列表显示「昵称 · 时间」和内容,标题显示条数
  15. 另一台手机打开就自动刷新,看到小明的留言
  16. 先读后写:小明点发送时小红抢先发了一条,小明写回时保留了小红的留言
  17. 最新的留言排在最上面
  18. 每 10 秒自动刷新,另一台手机看到新留言
  19. 局限:两人在同一瞬间发送(都读完、都没写回),后写回的覆盖先写的,丢一条——网络微数据库没有原子追加
  20. 刷新请求还没回来时点发送,提示稍等,不会重复请求
  21. 超过 100 条时删掉最早的,只保留最近 100 条
  22. 服务端关掉时发送失败:留言留在输入框里,按钮恢复
  23. 状态行显示连不上服务器
  24. 服务端恢复后再点发送就成功了
  25. 重新打开 App:昵称还在,自动刷新出最新留言

第 3 课 点击挑战排行榜(Leaderboard.aia)

SHA-256:4667328ac123ce34e3445b4825a8058f808a5a58cfcf4aa948a2a83a9042d89d,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 没填名字不能开始
  2. 名字超过 12 个字被拒绝
  3. 开始后大按钮可点、开始按钮变灰、计时器开启
  4. 点击计数实时显示,倒计时按 0.1 秒递减
  5. 10 秒到:计时器停止,大按钮变灰,之后再点不算数
  6. 没填服务地址时只显示成绩,提示填地址才能上榜
  7. 首次打开提示先填服务地址
  8. 地址不以 http:// 开头时拒绝保存
  9. 保存时去掉首尾空格和末尾的 /,并设为网络微数据库的服务地址
  10. 重新打开 App 自动使用保存的服务地址
  11. 保存地址后刷新:榜单为空时提示玩一局就是第一名
  12. 第一局 42 次:服务器成绩表里写入「小明 → 42」,名字记在手机上
  13. 破纪录时提示新纪录、已上榜
  14. 没破纪录:提示最好成绩,不写服务器
  15. 另外 10 台手机各玩一局,成绩表共 11 人(先读后写,谁的成绩都没丢)
  16. 榜单按分数从高到低,只显示前 10 名;同分(42)先上榜的排前面
  17. 每行副文字显示次数与时间
  18. 显示总人数、我的最好成绩和名次
  19. 第 11 名不在前 10 名列表里,但自己的名次照样显示
  20. 小明再玩一局 70 次:升到第 1 名,别人的成绩不受影响
  21. 服务端关掉时提交失败:提示没提交上,可以继续玩
  22. 重新打开 App:名字还在,自动刷新出榜单(断网那局没有算进去)

第 4 课 图片上传(PhotoShare.aia)

SHA-256:1a440f1b5bb6f96fe4e268d4967dce05f95dd0eb5c83e5b1b90c475f0a79dad4,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 没选图时上传按钮是灰的
  2. 首次打开提示先填服务地址
  3. 地址不以 http:// 开头时拒绝保存
  4. 保存时去掉首尾空格和末尾的 /,并设为网络微数据库的服务地址
  5. 重新打开 App 自动使用保存的服务地址
  6. 保存地址后刷新:相册为空
  7. 选图后先显示手机上的原图,上传按钮可点
  8. 上传前压缩(最长边 1280、质量 80),显示大小,POST 到 服务地址/upload
  9. 服务端收到分块上传的图片并返回地址;按地址取回的就是压缩后的 1280×960 JPEG,比原图小
  10. 网络微数据库里只登记图片地址、说明和时间
  11. 上传完成:清空说明,按钮回到灰色等下一张
  12. 相册列表的图片直接用网络地址
  13. 另一台手机上传竖图(缩到 720×1280),没写说明时显示「没写说明」,最新的排在最上面
  14. 点列表里的一张,上面显示大图和说明
  15. 压缩失败(返回空路径)时不上传,提示换一张
  16. 口令抄错时服务端返回 404:提示服务地址不对
  17. 服务端关掉时(出现错误时 1104)提示连不上,按钮恢复可重试
  18. 服务端恢复后重试成功:图片文件和相册登记各多一份
  19. 重新打开 App 自动刷新相册,每个图片地址都能取回 JPEG

第 5 课 带图商品墙(ShopWall.aia)

SHA-256:52a6225523646a3ec6e55447224256e77abd1e787d7e72c5af7befc47de2d28f,校验时间 2026-10-06。未验证:浏览器界面里手动导入、AI 伴侣实时调试、真机运行、鸿蒙 HAP 编译。

  1. 首次打开提示先填服务地址
  2. 地址不以 http:// 开头时拒绝保存
  3. 保存时去掉首尾空格和末尾的 /,并设为网络微数据库的服务地址
  4. 重新打开 App 自动使用保存的服务地址
  5. 保存地址后刷新:商品墙为空
  6. 没填昵称不能发布
  7. 物品名称为空不能发布
  8. 物品名称超过 20 个字不能发布
  9. 价格不是数字不能发布
  10. 价格超过 99999 不能发布
  11. 价格为负不能发布
  12. 没选图片不能发布
  13. 选图后在表单里预览
  14. 发布先上传图片,按钮变灰防止连点
  15. 服务器上登记了商品:名称、价格、描述、卖家、时间、编号,图片地址能取回 JPEG
  16. 发布成功后清空表单、收起预览图,昵称记住
  17. 小红刚发布完小明再发布:小明先读到最新列表再追加,三件都在
  18. 商品墙最新在上:名称和价格、卖家和时间、网络图片
  19. 按名称搜索「自行」只剩自行车
  20. 在搜索结果里点开:显示大图详情,发布和列表卡片收起
  21. 别人的商品看不到「下架」按钮
  22. 返回商品墙;清空搜索词显示全部
  23. 自己发布的商品显示「下架」
  24. 下架前弹出确认框
  25. 选「取消」什么都不改
  26. 确认下架:服务器上删掉这一件,回到商品墙
  27. 要下架的那件已被删掉时提示「已经不在了」,不误删别的
  28. 服务端关掉时发布失败:表单内容保留,按钮恢复
  29. 服务端恢复后重新点发布成功
  30. 重新打开 App:昵称还在,商品墙自动刷新

复现

# 在仓库 appinventor/ 目录下
node skills/ai2-app/lib/ai2gen.js build docs/net-apps-benchmark/sources/<应用名> --repo .
python3 docs/tools/net-apps/check_business.py --report docs/net-apps-benchmark/reports/business.json
python3 docs/tools/net-apps/capture.py
python3 docs/tools/net-apps/publish.py
文档反馈