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:需要登录用户账号,部分环节要扫码/人脸
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"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", "状态": "一致" }
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user