HarmonyOS 应用邀请测试和公开测试流程
2025-06-20 17:24:07
147次阅读
0个评论
最后修改时间:2025-07-21 23:31:52
一、简介
本文主要介绍 HarmonyOS 应用的邀请测试和公开测试流程,邀请测试可邀请不超过 10000 人的小范围用户,支持 100 个版本同时测试,需发布到测试专区;公开测试面向全网用户,下载安装次数上限 1000 万次,仅支持 1 个版本。测试前需满足 API≥10 且仅分发中国大陆等前提条件,还介绍了创建测试用户、版本,通知用户、收集反馈、停止测试等步骤,以及测试版本转正式版本的约束条件和操作,还有修改测试时间和下载安装次数的方法。
二、测试发布方式概览
测试阶段 | 邀请测试 | 公开测试 |
---|---|---|
面向对象 | 可邀请友好、信任的小范围用户 | 面向全网所有用户公开招募测试 |
邀请人数 | 上限 10000 人 | 下载安装次数上限 1000 万次 |
支持同时测试的版本数 | 100 个 | 1 个 |
发布 AppGallery 测试专区 | 必须 | 可选 |
是否支持分享链接 | 支持 | 支持 |
三、前提条件
- HarmonyOS 应用 / 元服务的 API≥10,仅支持分发中国大陆地区。
- 登录 AppGallery Connect,创建 HarmonyOS 应用 / 元服务后,在 “分发” tab 页下可见 “应用测试” 菜单。
四、邀请测试流程
(一)创建测试用户
- 点击 “测试用户” 菜单,创建测试群组,最多 30 个,所有群组累计测试用户不超过 10000 个。
- 添加测试用户有三种方式:
- 单个添加:手动输入华为账号(邮箱或手机号,手机号按 “国家码 - 手机号” 格式)。
- 批量导入:使用.csv 格式文件,上限 10000 个账号。
- 邀请码添加:生成邀请码,有效期 30 天,可设置邀请上限 10000 人,需将邀请码拼接到测试版本分享链接上。
(二)创建测试版本
- 进入 “版本列表”,选择 “邀请测试”,填写版本描述。
- 配置基础信息(测试时间最长 90 天、支持设备)、测试包、测试信息(应用图标、介绍等)、隐私声明等。
- 选择测试用户群组(不超过 30 个),可生成分享链接,提交审核。
(三)通知用户参与测试
- 系统自动发送邮件 / 短信,用户首次需同意加入群组;也可手动复制分享链接给用户,或拼接邀请码后分享。
(四)收集用户反馈
在测试说明中预留联系方式,收集问题并优化。
(五)停止测试
- 手动停止后状态变为 “已失效”,新用户不能下载,已安装用户可使用至安装后 90 天。
五、公开测试流程
(一)创建测试版本
- 选择 “公开测试”,填写版本描述,配置基础信息(测试时间最长 30 天)、发布国家或地区、软件版本(类型为 “仅测试” 或 “测试和正式上架”)。
- 配置可本地化基础信息(应用名称、介绍等)、付费情况、内容分级、隐私声明等多项信息,提交审核。
(二)用户参与测试
- 若选择 “AppGallery 客户端测试专区”,版本在专区展示,下载次数达上限后不再显示;若生成分享链接,用户点击链接下载安装。
(三)停止测试
同邀请测试,已安装用户使用期限 90 天。
六、测试版本转正式版本
(一)约束条件
- 仅公开测试阶段、状态为 “正在测试”、软件包类型为 “测试和正式上架”、VersionCode≥正式版本、无 “待上架” 或 “待审核” 版本、发布国家包含中国大陆的版本支持推进。
(二)推进方式
- 全网发布:选择 “审核通过立即上架” 或 “指定时间”。
- 分阶段发布:设置生效时间、发布百分比(0-100%)、分阶段发布说明,生效结束后自动转全网发布。
七、修改测试时间和下载安装次数
(一)修改测试时间
- 等待生效时可修改开始和结束时间,若开始时间改为当前之前,状态立即变 “正在测试”;正在测试时仅可修改结束时间。
(二)修改下载安装次数
- 公开测试版本状态为等待生效 / 正在测试时,可修改下载安装次数,上限 1000 万次。
import http from '@ohos.net.http';
import common from '@ohos.app.ability.common';
import promptAction from '@ohos.promptAction';
@Entry
@Component
struct AppTestDashboard {
// 测试状态(0:未参与 1:邀请测试中 2:公开测试中 3:已结束)
@State testStatus: number = 0;
// 测试版本信息
@State versionInfo: string = '';
// 用户反馈内容
@State feedbackContent: string = '';
// 联系方式
@State contactInfo: string = '';
// 反馈类型
@State feedbackType: string = 'bug';
// 页面构建
build() {
Column() {
// 测试状态卡片
this.buildStatusCard()
// 反馈表单
if (this.testStatus === 1 || this.testStatus === 2) {
this.buildFeedbackForm()
}
// 测试结束提示
if (this.testStatus === 3) {
Text('测试已结束,感谢您的参与!')
.fontSize(18)
.fontColor('#666')
.margin({ top: 30 })
}
}
.padding(20)
.width('100%')
.height('100%')
.backgroundColor('#F8F9FA')
.onPageShow(() => {
this.checkTestStatus();
})
}
// 构建状态卡片
@Builder
buildStatusCard() {
Column() {
// 状态标题
Text(this.getStatusTitle())
.fontSize(22)
.fontWeight(FontWeight.Bold)
.margin({ bottom: 10 })
// 版本信息
Text(this.versionInfo || '正在获取版本信息...')
.fontSize(16)
.margin({ bottom: 15 })
// 操作按钮
if (this.testStatus === 0) {
Button('加入邀请测试')
.width('80%')
.height(50)
.onClick(() => this.joinInviteTest())
} else if (this.testStatus === 1 || this.testStatus === 2) {
Row() {
Button('查看测试说明')
.layoutWeight(1)
.onClick(() => this.openTestGuide())
Button('分享测试链接')
.layoutWeight(1)
.margin({ left: 10 })
.onClick(() => this.shareTestLink())
}
.width('80%')
.height(50)
.margin({ top: 10 })
}
}
.padding(20)
.borderRadius(16)
.backgroundColor(Color.White)
.shadow({ radius: 8, color: '#00000010', offsetX: 2, offsetY: 2 })
}
// 构建反馈表单
@Builder
buildFeedbackForm() {
Column() {
Text('问题反馈')
.fontSize(20)
.fontWeight(FontWeight.Medium)
.margin({ top: 30, bottom: 15 })
.alignSelf(HorizontalAlign.Start)
// 反馈类型选择
RadioGroup({ group: 'feedbackType' }) {
Radio({ value: 'bug' }).checked(true).text('BUG报告')
.fontSize(16)
.margin({ right: 20 })
Radio({ value: 'suggestion' }).text('功能建议')
.fontSize(16)
.margin({ right: 20 })
Radio({ value: 'other' }).text('其他问题')
.fontSize(16)
}
.onChange(value => this.feedbackType = value)
.margin({ bottom: 20 })
// 反馈内容
TextArea({ placeholder: '请详细描述您遇到的问题或建议...' })
.height(150)
.width('100%')
.fontSize(16)
.borderRadius(8)
.backgroundColor('#FFFFFF')
.onChange(value => this.feedbackContent = value)
// 联系方式
TextInput({ placeholder: '邮箱/手机号(选填)' })
.width('100%')
.height(50)
.margin({ top: 15 })
.fontSize(16)
.backgroundColor('#FFFFFF')
.borderRadius(8)
.onChange(value => this.contactInfo = value)
// 提交按钮
Button('提交反馈')
.type(ButtonType.Capsule)
.width('60%')
.height(45)
.backgroundColor('#007DFF')
.margin({ top: 25 })
.onClick(() => this.submitFeedback())
}
.padding(20)
.borderRadius(16)
.backgroundColor(Color.White)
.shadow({ radius: 8, color: '#00000010', offsetX: 2, offsetY: 2 })
.margin({ top: 20 })
}
// 获取状态标题
private getStatusTitle(): string {
switch (this.testStatus) {
case 1: return '🎉 您正在参与邀请测试';
case 2: return '🔍 您正在参与公开测试';
case 3: return '⏱️ 测试已结束';
default: return '🔒 未参与测试';
}
}
// 检查测试状态
private async checkTestStatus() {
try {
// 模拟API调用获取测试状态
// 实际项目中替换为真实API: https://connect-api.cloud.huawei.com/api/test/status
await new Promise(resolve => setTimeout(resolve, 800));
// 模拟返回数据
this.testStatus = 1; // 实际根据API响应设置
this.versionInfo = '测试版本 v2.1.0 (Build 210)\n有效期至: 2025-10-31';
} catch (error) {
console.error('获取测试状态失败:', error);
promptAction.showToast({ message: '网络异常,请稍后重试', duration: 2000 });
}
}
// 加入邀请测试
private joinInviteTest() {
// 实际项目中调用AGC邀请码API
router.pushUrl({
url: 'pages/InviteTestPage'
});
}
// 打开测试说明
private openTestGuide() {
router.pushUrl({
url: 'pages/TestGuidePage'
});
}
// 分享测试链接
private shareTestLink() {
// 调用系统分享能力
const shareData = {
title: '参与应用测试',
url: 'https://developer.harmonyos.com/test/invite?code=TEST12345'
};
try {
// 实际项目使用系统分享API
console.info('分享链接:', shareData.url);
promptAction.showToast({ message: '已复制测试链接到剪贴板', duration: 2000 });
} catch (error) {
console.error('分享失败:', error);
}
}
// 提交反馈
private async submitFeedback() {
if (!this.feedbackContent.trim()) {
promptAction.showToast({ message: '请填写反馈内容', duration: 2000 });
return;
}
try {
// 构建反馈数据
const feedbackData = {
type: this.feedbackType,
content: this.feedbackContent,
contact: this.contactInfo,
version: 'v2.1.0',
timestamp: new Date().toISOString()
};
// 实际项目调用AGC反馈收集API
// const httpRequest = http.createHttp();
// const response = await httpRequest.request(
// "https://connect-api.cloud.huawei.com/api/feedback/submit",
// {
// method: http.RequestMethod.POST,
// header: { 'Content-Type': 'application/json' },
// extraData: JSON.stringify(feedbackData)
// }
// );
// 模拟提交成功
await new Promise(resolve => setTimeout(resolve, 1000));
this.feedbackContent = '';
this.contactInfo = '';
promptAction.showToast({ message: '反馈提交成功!', duration: 3000 });
} catch (error) {
console.error('提交反馈失败:', error);
promptAction.showToast({ message: '提交失败,请检查网络', duration: 2000 });
}
}
}
##HarmonyOS应用测试##商务##
00
- 0回答
- 0粉丝
- 0关注
相关话题
- HarmonyOS 应用内部测试全面指南
- HarmonyOS 应用权限管控流程
- 87.HarmonyOS NEXT 单元测试与自动化测试指南:构建可靠的测试体系
- OpenHarmony-测试同学安装测试包之全新姿势
- 鸿蒙便捷生活类应用上架流程一
- 鸿蒙便捷生活类应用上架流程二
- 【HarmonyOS NEXT】鸿蒙使用ScanKit实现自定义扫码 (一)之业务流程和扫码
- HarmonyOS NEXT实战:元服务与应用 APP 发布应用市场的详细步骤与流程
- 【HarmonyOS Next开发】应用权限原理和封装
- 【HarmonyOS Next】鸿蒙应用进程和线程详解
- 第十课:HarmonyOS Next应用打包与发布全流程解析
- (五三)餐饮应用订餐流程优化与实际开发要点
- 鸿蒙Flutter实战:13-鸿蒙应用打包上架流程
- (四七)HarmonyOS Design 的 A/B 测试与优化
- (七九)HarmonyOS Design 的自动化测试策略