HarmonyOS鸿蒙Next中元服务需要在页面下方显示备案号,并且链接到工信部备案系统网址吗
HarmonyOS鸿蒙Next中元服务需要在页面下方显示备案号,并且链接到工信部备案系统网址吗 【问题描述】:元服务需要在页面下方显示备案号,并且链接到工信部备案系统网址吗,在元服务中调用手机浏览器打开链接的方法,失败,显示“暂无法跳转”、“暂无可用打开方式”。
尊敬的开发者,您好,关于您反馈的问题:
应用市场会在后台完成备案信息核验。
元服务本身无需在界面内展示备案号或添加工信部备案链接,元服务上架审核未将此项作为强制要求。
更多关于HarmonyOS鸿蒙Next中元服务需要在页面下方显示备案号,并且链接到工信部备案系统网址吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
背景知识:
必须在页面底部标注 ICP 备案号,强制可点击跳转工信部备案官网:https://beian.miit.gov.cn依据《非经营性互联网信息服务备案管理办法》、工信部 APP 备案规范:
- 元服务完成APP / 元服务工信部备案后,页面底部固定展示备案编号(粤 ICPxxxx 号等);
- 备案号为可点击链接,要求跳转工信部备案查询官网,应用市场上架审核必查项,缺链接会驳回上架;
- 单机离线元服务(无任何联网接口)可豁免标注,只要调用网络、云端接口就必须悬挂备案 + 跳转链接。
备案号点击,应用内新开 Web 弹窗加载beian.miit.gov.cn,不用跳转系统浏览器,元服务原生支持、无权限拦截:
代码参考:
import webview from '@ohos.web.webview';
import { BusinessError } from '@ohos.base';
@Entry
@Component
struct Footer {
controller: webview.WebviewController = new webview.WebviewController();
@State showWeb:boolean = false
build(){
Column(){
//底部备案文字
Text("粤ICP备XXXX号")
.fontSize(12)
.fontColor("#666")
.onClick(()=>{this.showWeb=true})
//弹窗Web加载工信部备案网
if(this.showWeb){
Column(){
Button("关闭").onClick(()=>this.showWeb=false)
Web({src:"https://beian.miit.gov.cn",controller:this.controller})
.width("100%")
.height("90%")
}.width("100%").height("100%")
}
}
}
}
元服务需要在页面下方显示备案号,并且链接到工信部备案系统网址。
根据《非经营性互联网信息服务备案管理办法》的规定,所有在中国境内提供互联网信息服务的网站、应用程序(包括元服务)都必须在其显著位置标明备案编号,并链接至工信部备案管理系统网址,以便公众查询核对。
-
互联网(联网的)网站、App、元服务(小程序)等必须备案并显示,是强制要求。
页面下方显示备案号并链接到工信部网址,这个是对网站的强制要求。
对于元服务备案号的显示,是在元服务更多–查看信息–更多资料里。

-
在元服务中调用手机浏览器打开链接。使用UIAbilityContext的openLink。
注意:appLinkingOnly为false才行。let context = this.getUIContext().getHostContext() as common.UIAbilityContext; let link: string = "https://xxxx.com"; // 替换为目标链接 let openLinkOptions: OpenLinkOptions = { appLinkingOnly: false, // 设为 false 表示优先尝试 App Linking,若无匹配则用浏览器打开 parameters: {} }; try { context.openLink(link, openLinkOptions, (err, result) => { if (err) { hilog.error(0x0000, "TAG", `openLink callback error. code: ${JSON.stringify(err)}`); } else { hilog.info(0x0000, "TAG", `openLink callback result: ${JSON.stringify(result.resultCode)}`); } }).then(() => { hilog.info(0x0000, "TAG", `open link success.`); }).catch((err: BusinessError) => { hilog.error(0x0000, "TAG", `open link failed, errCode ${JSON.stringify(err.code)}`); }); } catch (e) { hilog.error(0x0000, "TAG", `exception occurred, errCode ${JSON.stringify(e.code)}`); }
这个问题要区分 ICP备案要求 和 HarmonyOS 元服务能力限制 两件事。
1. 元服务是否必须显示备案号?
如果你的元服务属于需要履行ICP备案义务的互联网信息服务,那么按照工信部相关要求,备案号应当向用户展示,并且通常要求链接到工信部备案管理系统。网站场景明确要求首页底部展示备案号并链接至工信部备案系统。
但需要注意:
网站 ≠ 元服务
目前我没有查到工信部或 HarmonyOS 官方明确规定:
元服务页面必须在底部展示备案号
且必须可点击跳转工信部网站
因此元服务是否强制展示备案号,应以:
- AppGallery Connect 提交要求
- 元服务审核规范
- 华为审核意见
为准。
2. 为什么浏览器打不开?
你遇到:
暂无法跳转
暂无可用打开方式
更像是 HarmonyOS 元服务的能力限制。
元服务运行环境与普通应用不同:
- 不能随意拉起外部应用
- 部分系统能力受限
- 跨应用跳转存在白名单和能力约束
因此即使:
https://beian.miit.gov.cn
是合法网址,
也不一定能从元服务中直接唤起系统浏览器。
3. 实际建议
如果审核要求展示备案信息:
可以先采用:
ICP备XXXXXXXX号-X
纯文本展示。
例如:
© 2026 XXX公司
粤ICP备12345678号-1
放在:
关于我们
设置页
服务协议页
等位置。
4. 如果审核要求必须可点击
建议确认两个问题:
问题一
元服务审核意见中是否明确写明:
备案号必须链接至工信部备案网站
问题二
你使用的跳转方式是什么?
例如:
router.pushUrl(...)
还是:
want + implicit startAbility(...)
还是:
Web组件打开外链
不同方式在元服务中的支持情况不同。
从目前 HarmonyOS 元服务实践来看,大多数开发者的做法是:
备案号展示
✓
点击跳转工信部
不强制实现
如果审核人员明确要求跳转,而元服务环境又无法拉起浏览器,通常需要向华为审核团队或元服务技术支持确认当前版本是否允许此类外链跳转,而不是单纯修改代码。


- 必须展示并可点击,这是上线审核的硬性要求。
- 用
openLink替代startAbility来打开https链接,一步解决“暂无法跳转”的问题。 - 配合备案号的实际位置,按代码示例实现即可通过审核并正常使用。
import { common, OpenLinkOptions } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
const DOMAIN = 0xeeee;
const TAG: string = '[BeianPage]';
@Entry
@Component
export struct BeianPage {
// 请替换为你自己的真实备案号
private beiAnNumber: string = '粤ICP备2025000000号';
private beiAnUrl: string = 'https://beian.miit.gov.cn';
// 使用 context.openLink 跳转到备案系统
jumpToBeiAn(): void {
try {
let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
let openLinkOptions: OpenLinkOptions = {
appLinkingOnly: false, // 必须设为 false,允许通过浏览器打开网页
parameters: {} // 无额外参数
};
context.openLink(
this.beiAnUrl,
openLinkOptions,
(err, result) => {
if (err) {
hilog.error(DOMAIN, TAG, `openLink callback error: ${JSON.stringify(err)}`);
} else {
hilog.info(DOMAIN, TAG, `openLink callback result code: ${result.resultCode}`);
hilog.info(DOMAIN, TAG, `openLink callback result want: ${JSON.stringify(result.want)}`);
}
}
).then(() => {
hilog.info(DOMAIN, TAG, 'open link success.');
}).catch((err: BusinessError) => {
hilog.error(DOMAIN, TAG, `open link failed, errCode ${err.code}, message: ${err.message}`);
});
} catch (e) {
hilog.error(DOMAIN, TAG, `exception occurred, message: ${JSON.stringify(e)}`);
}
}
build() {
Column() {
// 主体内容区,占满剩余空间,将备案号挤到底部
Column() {
Text('我的页面内容')
.fontSize(20)
.margin({ top: 50 })
}
.width('100%')
.layoutWeight(1)
// 底部备案号,仿照链接样式
Text(this.beiAnNumber)
.fontSize(14)
.fontColor('#888888')
.decoration({
type: TextDecorationType.Underline,
color: '#888888'
})
.padding({ bottom: 20, top: 10 })
.onClick(() => {
this.jumpToBeiAn();
})
}
.width('100%')
.height('100%')
.backgroundColor('#F5F5F5')
}
}
最好是显示出来哦!
下面是连接跳转的Demo:
import { common, OpenLinkOptions } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
const DOMAIN = 0xeeee;
const TAG: string = '[openLinkDemo]';
@Entry
@Component
struct Index {
build() {
RelativeContainer() {
Button("链接跳转")
.onClick(() => {
let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
let link: string = 'https://www.example.com';
let openLinkOptions: OpenLinkOptions = {
appLinkingOnly: true,
parameters: { demo_key: 'demo_value' }
};
try {
context.openLink(
link,
openLinkOptions,
(err, result) => {
hilog.error(DOMAIN, TAG, `openLink callback error.code: ${JSON.stringify(err)}`);
hilog.info(DOMAIN, TAG, `openLink callback result: ${JSON.stringify(result.resultCode)}`);
hilog.info(DOMAIN, TAG, `openLink callback result data: ${JSON.stringify(result.want)}`);
}
).then(() => {
hilog.info(DOMAIN, TAG, `open link success.`);
}).catch((err: BusinessError) => {
hilog.error(DOMAIN, TAG, `open link failed, errCode ${JSON.stringify(err.code)}`);
});
}
catch (e) {
hilog.error(DOMAIN, TAG, `exception occured, errCode ${JSON.stringify(e.code)}`);
}
})
}
.height('100%')
.width('100%')
}
}
根据工信部《互联网信息服务管理办法》,元服务页面底部必须显示备案号(如“京ICP备XXXXXX号”),并通过超链接跳转至工信部备案系统(https://beian.miit.gov.cn)。在HarmonyOS Next中,使用Text组件展示备案号,通过openLink接口实现跳转。
元服务需按工信部要求展示备案号并链接到备案系统网址。直接使用外部浏览器打开会失败,是因为元服务在HarmonyOS Next中无法拉起三方浏览器,系统会提示“暂无法跳转”。正确的做法是使用内嵌Web组件在元服务内展示备案验证页面,或通过系统浏览器接口(受限)打开,但推荐Web组件无跳转体验。示例:在页面底部放Text显示备案号,点击后路由到一个新页或用Dialog展示Web组件加载https://beian.miit.gov.cn。
关键代码:
// 跳转到展示备案的页面
router.pushUrl({ url: 'pages/BeianPage' });
// BeianPage.ets
import web_webview from '@ohos.web.webview';
@Entry
@Component
struct BeianPage {
controller: web_webview.WebviewController = new web_webview.WebviewController();
build() {
Column() {
Web({ src: 'https://beian.miit.gov.cn', controller: this.controller })
.width('100%')
.height('100%')
}
}
}
点击备案号时打开该页面即可合规展示并完成跳转。注意元服务无需备案号链接可点击跳转,但工信部要求可查验,内嵌Web方式完全满足。

