系列终极实战篇·第50篇(收官之作)。性能调优篇后,有独立开发者问:“Demo在本地跑得完美了,但怎么上架华为应用市场?听说审核很严,经常被拒,有没有一份‘避坑指南’?” 这正是最后一道关卡。今天我们将电商Demo打包、签名、提审,走完AppGallery Connect (AGC)的全流程,覆盖资质准备、隐私合规自检、上架材料撰写、审核沟通技巧、灰度发布策略。我们将复盘常见的“秒拒”原因,并分享如何通过预审服务提高通过率。全程基于API23,含官方文档未涉及的“审核员视角解读”和“商业化变现配置”技巧。
一、前言:为什么“开发完成”只是“万里长征第一步”?
很多开发者折戟在应用市场上架环节。常见的拒审理由包括:
隐私政策问题:未提供隐私政策,或隐私政策中未说明数据收集类型。
权限滥用:申请了与功能无关的权限(如“读取通讯录”用于电商)。
功能性缺陷:点击按钮无反应,或存在明显Crash。
内容违规:包含虚假宣传、赌博、色情等内容。
元数据缺失:应用介绍、截图、图标不符合规范。
核心认知:应用市场审核不仅是技术检查,更是合规性、安全性、用户体验的综合评估。今天我们将站在审核员的角度,反向检查我们的电商Demo,确保一次通过。
二、核心概念辨析(上架关键要素)
要素 | 定义 | 重要性 | 常见错误 |
|---|---|---|---|
应用包(HAP) | 最终交付的安装包 | ⭐⭐⭐⭐⭐ | 未签名、包含调试信息、体积过大 |
隐私政策 | 告知用户数据处理的文档 | ⭐⭐⭐⭐⭐ | 未提供URL、内容不全、未弹窗征求同意 |
应用素材 | 图标、截图、视频 | ⭐⭐⭐⭐ | 截图包含其他品牌水印、视频模糊、图标有Alpha通道 |
应用介绍 | 描述应用功能和特点 | ⭐⭐⭐⭐ | 夸大宣传、包含联系方式、关键词堆砌 |
权限声明 | 解释为何需要某权限 | ⭐⭐⭐⭐ | 未说明用途、申请敏感权限无对应功能 |
测试账号 | 供审核员登录的账号 | ⭐⭐⭐ | 未提供、密码错误、账号权限不足 |
三、实战操作:AGC上架全流程
3.1 准备阶段:资质与合规自检
步骤1:准备隐私政策
使用AGC合规服务生成隐私政策URL(参考第45篇)。
确保应用首次启动时弹窗征求用户同意。
在应用内提供隐私政策的访问入口(如“设置”->“隐私政策”)。
步骤2:权限自查
检查module.json5中的所有权限:
{ "module": { "requestPermissions": [ { "name": "ohos.permission.INTERNET", // 必需:网络请求 "reason": "用于加载商品数据、图片和支付功能", // 必须提供清晰理由 "usedScene": { "abilities": ["EntryAbility"], "when": "inuse" // 仅在使用时申请 } }, { "name": "ohos.permission.CAMERA", // 可选:扫码功能 "reason": "用于扫描商品条形码或二维码", "usedScene": { "abilities": ["ScanAbility"], "when": "inuse" } } // 严禁包含:READ_CONTACTS, READ_CALL_LOG, SEND_SMS等无关权限 ] } }步骤3:功能完整性测试
覆盖所有核心路径:启动 -> 浏览商品 -> 加入购物车 -> 提交订单 -> 支付(沙箱) -> 查看订单。
测试所有按钮、链接、表单。
确保在无网络、弱网络环境下有友好提示。
3.2 构建与签名:生成正式HAP包
步骤1:生成签名证书
# 使用DevEco Studio生成.p12证书和.csr请求文件 # 或使用命令行(需要keytool) keytool -genkeypair -alias "harmony_app" -keyalg RSA -keysize 2048 -validity 3650 -keystore harmony_app.p12 -storetype PKCS12步骤2:在AGC创建应用并上传证书
登录AGC控制台,创建应用。
在“我的项目” -> “应用发布” -> “证书管理”中,上传CSR文件,获取
.cer证书。
步骤3:配置签名信息
在DevEco Studio中,选择Build->Generate Key and CSR,导入.cer证书和.p12文件,生成签名配置。
步骤4:构建Release包
选择
Build Variants为release。勾选
Minify(代码混淆)和Shrink Resources(资源压缩)。执行
Build->Build Hap(s)。
3.3 AGC后台配置:填写应用信息
步骤1:基本信息
应用名称:简洁易记,如“鸿蒙优选”。
应用分类:购物 -> 电商。
应用简介:100字以内,突出核心卖点。例:“鸿蒙优选,基于HarmonyOS NEXT打造的极致购物体验,支持跨设备流转、AI智能推荐。”
应用介绍:详细描述功能、特色、更新日志。支持富文本,可插入图片。
步骤2:素材上传
图标:1024x1024 PNG,无圆角,无透明通道,无白边。
截图:至少3张,最多5张。分辨率:手机(1080x2340)、平板(1920x1200)、车机(1920x720)。严禁包含其他品牌水印、模拟器边框、个人信息。
应用视频(可选):15-30秒,展示核心功能。MP4格式,无声音或配乐。
步骤3:隐私与权限
填写隐私政策URL。
逐一确认权限用途,确保与
module.json5一致。
步骤4:测试账号
提供至少一个有效的测试账号和密码。
确保账号包含所有必要的权限(如查看订单、支付)。
在备注中说明账号的使用场景。
3.4 提交审核与灰度发布
步骤1:提交审核
上传Release HAP包。
确认所有信息无误后,点击“提交审核”。
审核周期通常为1-3个工作日。
步骤2:应对审核反馈
若通过:恭喜!准备上架。
若被拒:仔细阅读拒审理由。
示例:拒审理由:“应用启动后,在同意隐私政策前,已向
https://api.xxx.com发送网络请求。”对策:修改代码,确保网络请求在用户同意隐私政策后发送。回复审核意见,说明修改内容,并重新提交。
步骤3:灰度发布(分阶段发布)
在“版本管理”中选择“灰度发布”。
设置灰度比例(如5%)。
监控灰度版本的崩溃率、ANR率、用户反馈。
若无问题,逐步扩大比例至100%。
3.5 商业化配置(IAP)
如果电商Demo包含虚拟商品(如会员、电子书),需配置IAP。
// 查询商品信息 async function queryProducts(): Promise<void> { const productIds = ['vip_monthly', 'coins_100']; const result = await iap.queryProducts(productIds, 'inapp'); // 'inapp'或'subs' console.log('商品列表:', result.products); } // 发起购买 async function buyProduct(productId: string): Promise<void> { try { const order = await iap.createPurchaseOrder(productId); const paymentResult = await iap.pay(order); console.log('支付结果:', paymentResult); // 发放权益 } catch (err) { console.error('购买失败:', err); } }AGC配置:在“盈利” -> “应用内支付”中,创建商品,设置价格和类型。
四、踩坑记录(官方文档没写的上架细节)
“僵尸”权限:即使代码中没有使用某权限,只要在
module.json5中声明,就需要提供理由。解决方案:定期使用DevEco Studio的“Inspector”检查未使用的权限并移除。隐私政策的“地域性”:如果应用面向欧盟,隐私政策必须符合GDPR;面向加州,需符合CCPA。AGC会根据分发地区检查。解决方案:使用AGC合规服务的多语言、多法规模板。
截图的“纯净度”:审核员对截图要求极高。截图不能包含:
顶部状态栏的时间不是“9:41”(苹果梗)。
底部导航栏的“Home Indicator”样式不对。
模拟器的黑色边框。
任何个人手机号、邮箱、地址。
其他应用的图标或名称。
测试账号的“有效性”:审核员可能会在半夜测试你的应用。如果测试账号过期或需要短信验证码,审核会被拒。解决方案:提供长期有效的账号,或使用“万能验证码”(仅限测试环境)。
审核周期的“玄学”:周五提交的审核,通常要等到下周中。月初月末是审核高峰期。解决方案:预留充足的审核时间,避开高峰期。