Files
FamilyBook_harmonyos/docs/上架/商店信息_结构化.json
T
laoyang c0d5fdff01 docs(上架): 应用商店上架 / 正式证书 / APP 备案 全套材料
## 背景

用户要同时办三件事:① 上架华为 AppGallery ② 申请正式发布证书 ③ 在阿里云做 APP 备案。
本目录是这三件事的全部材料,信息**全部取自真实代码与实测**,不是套模板。

## 材料清单

| 文件 | 用途 |
|---|---|
| `README总览.md` | 先看这个:材料索引 + 三件事的先后关系 + 你现在就能做的 |
| `商店上架文案.md` | AGC 各字段可直接复制的文案(一句话简介/应用介绍/更新说明/分级问卷/隐私标签) |
| `商店信息_结构化.json` | 同上,机器可读 |
| `隐私政策.md` | 完整隐私政策正文 |
| `用户服务协议.md` | 完整用户协议正文 |
| `正式证书与签名切换.md` | 发布证书申请 + release 打包全流程 |
| `APP备案材料.md` | 阿里云 APP 备案逐字段填写指引 |
| `图标/app_icon_216.png` | AppGallery 图标(216×216,9.7KB) |
| `图标/app_icon_1024.png` | 备案图标 + 1024 规格(112KB) |
| `verify_materials.py` | 校验材料与代码一致(42 项) |

## 实测核对过的事实(材料里的数字都从这里来)

- 包名 `familybook.yangyq.net`、版本 `0.8.0` / versionCode `800`(`AppScope/app.json5`)
- 应用名「家书」(`AppScope/resources/base/element/string.json`)
- 权限 **只有 3 个且全是普通权限**:INTERNET / GET_NETWORK_INFO / DETECT_GESTURE
  (`entry/src/main/module.json5`)—— 定位、通讯录、相机、麦克风、设备标识符**一个都没申请**
- 第三方 SDK:**无广告、无统计、无推送**
- 后端域名 `family.yangyq.net`,服务器阿里云 `47.104.72.161`(中国大陆)

权限少是审核优势:「权限滥用」是驳回第一大类原因,家书直接绕开。
隐私政策第二节与第十节做了**权限逐条对照表**,可直接给审核看。

## 图标为什么要重做

包内 `fb_logo.png` 是 **192×192 且自带圆角**(四角透明,半径约 33px)。
AppGallery 两种规格都不达标(要 216 或 1024,且「square-shaped icon」)。
→ 取内部主色 #F2E9D8 铺满方形画布补掉缺角,图案原样叠加、不裁切不缩放,
  生成 216 与 1024 两版。图案与包内完全一致(审核要求后台图标 = 包内图标同一图案)。

第一版直接用 LANCZOS 放大,**保留了圆角**,被 `verify_materials.py` 抓到并修正 ——
这就是写那个校验脚本的意义。

## 四个必须先解决的问题(已写进总览,不隐瞒)

1. **现在是调试证书** → 备案要正式证书的公钥/MD5,上架要正式签名(调试包报 991/1014)
2. **没有「家书」软著** → 备案不强制;华为要求但可用《免责函》过渡(6 项现有软著均无关)
3. **隐私政策页面还不存在** → 站点无 privacy 路由;建议用华为自带托管服务(SyncCalendar 用的那个,实测 200)
4. **阿里云服务器是否包年包月** → 备案硬性要求,需用户去控制台确认

## 顺序(三者有依赖,不能乱)

```
① 申请正式证书(10 分钟,AGC 即时出证)
      ↓ 拿到后才能
② APP 备案(1~20 工作日,最慢,先提交)
③ 打 release .app 包
      ↓ 拿到备案号才允许提审
④ 提交 AppGallery 审核(1~7 工作日)
      ↓
⑤ 公安联网备案(上架后 30 日内)
```

## 校验

`python3 verify_materials.py` → **42 项全过**:
包名/版本/名称与代码一致、权限集合完全一致、隐私政策"未申请"的声明与代码相符、
字数限内、三份文档互相不打架、图标尺寸与四角不透明、已知缺口如实记录。

## 没做的事(刻意的)

- 不生成截图:必须真机原生界面,不能是设计稿(审核明确禁止)
- 不填备案表:实名主体必须本人操作,且工信部短信核验要发到本人手机
- 不碰 AGC:需要登录用户账号,部分环节要扫码/人脸
2026-11-01 09:56:04 +08:00

145 lines
6.6 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"app_name": "家书",
"app_name_check": {
"value": "家书",
"chars": 2,
"limit": "≤15 个汉字字符",
"verdict": "PASS",
"note": "两字,唯一、有辨识度,不是通用词。与安装后桌面名称(AppScope/resources/base/element/string.json 的 app_name)一致。"
},
"one_line_intro": {
"value": "一家人的日程任务与生活档案",
"chars": 13,
"limit": "≤17 个汉字",
"verdict": "PASS"
},
"one_line_intro_alternatives": [
{ "value": "把一家人的日子记在一起", "chars": 11, "verdict": "PASS" },
{ "value": "家庭日程与生活记录工具", "chars": 11, "verdict": "PASS" }
],
"category": {
"primary": "实用工具",
"secondary_suggestion": "效率 / 备忘录 / 个人助理(以 AGC 下拉列表实际项为准)",
"note": "不要选「社交」「金融理财」—— 房贷/账本只是记账,不做任何投资理财服务,选后者需金融资质。"
},
"age_rating": {
"recommended": "3+",
"reasoning": "无任何游戏、无暴力、无社交陌生人互动、无付费。家庭内部使用。",
"questionnaire_answers": {
"是否包含暴力内容": "否",
"是否包含性/裸露内容": "否",
"是否包含恐怖/惊悚内容": "否",
"是否包含赌博": "否",
"是否包含酒精/烟草/毒品": "否",
"是否包含粗俗语言": "否",
"是否允许用户间自由社交或内容分享给陌生人": "否(仅同一家庭内成员可见)",
"是否包含用户生成内容公开发布": "否",
"是否含应用内购买": "否",
"是否含广告": "否",
"是否可收集位置": "否",
"是否允许陌生人联系用户": "否"
}
},
"privacy_labels": {
"收集个人信息": "是(账号手机号、用户主动录入的家庭内容)",
"用于第三方广告": "否",
"与第三方共享": "否",
"允许用户请求删除数据": "是(设置 → 账号 → 注销账号;各条目可单独删除)",
"数据加密传输": "是(全站 HTTPS)",
"数据可导出": "是(设置 → 数据导出)"
},
"permissions_declaration": [
{
"permission": "ohos.permission.INTERNET",
"level": "normal",
"purpose": "与用户自行部署的家书服务端通信,读写日程/任务/名册等数据",
"required": true,
"if_denied": "无法登录,无法同步任何数据"
},
{
"permission": "ohos.permission.GET_NETWORK_INFO",
"level": "normal",
"purpose": "判断网络是否可用,断网时提示「离线,当前为缓存数据」而不是无限转圈",
"required": true,
"if_denied": "网络异常时提示不准确"
},
{
"permission": "ohos.permission.DETECT_GESTURE",
"level": "normal",
"purpose": "识别左右手握持,自动调整界面方向。不采集、不上传、不记录任何手势数据",
"required": false,
"if_denied": "界面方向不自动调整,可手动设置"
}
],
"declared_not_collected": [
"位置信息(未申请任何定位权限)",
"通讯录(未申请联系人权限)",
"相机(未申请 CAMERA 权限)",
"麦克风",
"通话记录/短信",
"应用安装列表",
"剪贴板",
"设备唯一标识符(OAID/IMEI/MAC/SN)",
"生物识别信息"
],
"third_party_sdk": {
"统计/广告/推送 SDK": "无",
"系统能力(非第三方 SDK)": [
"Map Kit(华为 HMS Core)— 地点自动补全,仅传关键词",
"HUKS(鸿蒙系统)— 密钥硬件保护,不出网",
"CryptoArchitectureKit(鸿蒙系统)— 加解密,不出网",
"MediaLibraryKit(鸿蒙系统)— 保存附件到相册,不出网",
"ShareKit(鸿蒙系统)— 系统分享面板,不出网",
"TelephonyKit(鸿蒙系统)— 拉起系统拨号盘,不出网",
"BackgroundTasksKit(鸿蒙系统)— 定时后台同步,不出网"
]
},
"package": {
"bundleName": "familybook.yangyq.net",
"versionName": "0.8.0",
"versionCode": 800,
"compatibleSdkVersion": "6.1.1(24)",
"targetSdkVersion": "26.0.0",
"runtimeOS": "HarmonyOS",
"deviceTypes": ["phone", "tablet"],
"submit_format": ".app(App Pack)",
"submit_note": "AppGallery 只收 .app,不是 .hap。用 release 模式 `Build APP` 产出。当前 versionCode=800,若已提交过请确保递增。"
},
"distribution": {
"countries": ["中国大陆"],
"reason": "服务端仅中国大陆节点;隐私政策为中文;先上一地降低审核复杂度,稳定后再扩。",
"pricing": "免费"
},
"assets_checklist": {
"app_icon": {
"spec": "216×216 PNG,≤500KB(或 1024×1024 PNG ≤3MB),正方形、无圆角、无阴影",
"current": "AppScope/resources/base/media/fb_logo.png 是 192×192 —— 尺寸不达标,需另出 216×216 与 1024×1024",
"must_match": "与 app.json5 的 icon 引用同一图案($media:fb_logo)"
},
"screenshots": {
"spec": "3–5 张,竖屏 1080×1920(9:16)或横屏 1920×1080(16:9),PNG/JPG ≤5MB",
"must_be": "真机原生鸿蒙界面截图,不得是设计稿、不能带调试信息、不能出现其他平台标识",
"suggested_shots": [
"首页(今日概览:日程 + 任务 + 纪念日 + 往年今天)",
"日程月视图(含日程色块)",
"日程周视图(含当前时间红线)",
"任务看板",
"名册列表"
]
},
"intro_video": { "spec": "可选,1–3 个,15 秒–2 分钟,竖屏 720×1280", "recommend": "暂不做,非必需" },
"copyright_docs": {
"spec": "软著证书扫描件或电子版权证明,1–5 张 JPG/PNG ≤15MB,或 PDF ≤5MB",
"current": "❌ 无「家书」软著 —— 现有 6 项软著均与家书无关(见软著情况说明)"
}
},
"consistency_must_match": {
"说明": "AGC 后台填的名称/图标/一句话简介/分类,必须与 HAP 包内实际值完全一致,前后不一致是高频驳回点。",
"items": [
{ "后台填": "应用名称「家书」", "包内": "AppScope/resources/base/element/string.json → app_name = 家书", "状态": "一致" },
{ "后台填": "图标(216×216)", "包内": "app.json5 → icon = $media:fb_logo(192×192)", "状态": "图案需一致,尺寸需补" },
{ "后台填": "包名 familybook.yangyq.net", "包内": "app.json5 → bundleName", "状态": "一致" },
{ "后台填": "版本 0.8.0 (800)", "包内": "app.json5 → versionName/versionCode", "状态": "一致" }
]
}
}