使用DevEco Studio开发唤起应用功能,在浏览器输入链接没反应
使用DevEco Studio开发唤起应用功能,在浏览器输入链接没反应 在module配置文件里面加了配置
“uris”:[
{
"scheme":"abc",
"host":"open"
}
]
浏览器输入链接 abc://open/home 没反应,封装工具类已在entryAbility onCreate()里面做了调用
在module.json5的Ability配置中同时声明actions和uris字段:
"skills": [{
"actions": ["ohos.want.action.viewData"], // 必须包含此标准action
"uris": [{
"scheme": "abc",
"host": "open",
"path": "/home" // 根据实际路径补充(可选)
}]
}]
在拉起方的module.json5中添加:
"module": {
"querySchemes": ["abc"] // 声明支持此scheme
}
楼主,在HarmonyOS中通过Deep Linking实现应用唤起时,若浏览器输入链接无响应,通常由以下原因导致:
原因分析与解决方案
1、浏览器输入方式不符合触发条件
- 现象:直接在浏览器地址栏输入Deep Linking链接(如 appScheme://test.com/home)无法触发应用拉起。
- 原因:
- Deep Linking的触发需要通过用户主动点击网页中的元素(如
<a>
标签或 window.open 调用),直接在地址栏输入会被视为非用户操作而拦截。 - 根据华为官方规范,目前仅支持通过华为浏览器中嵌入的跳转代码触发应用拉起。
- Deep Linking的触发需要通过用户主动点击网页中的元素(如
修改建议:
在HTML页面中嵌入触发代码,例如使用 <a>
标签:
<a href="appScheme://test.com/home">打开应用</a>
2.、目标应用未正确配置Deep Linking
- 现象:点击链接后无响应,或提示“应用未安装”。
- 原因:
- 被拉起的应用未在 module.json5 中注册对应的URL skill(如 scheme、host、path 配置错误)。
- 链接地址与配置的URL skill不匹配。
- 验证步骤:
1.检查被拉起方的 module.json5 配置:
{
"module": {
"skills": [
{
"actions": ["ohos.want.action.viewData"],
"uris": [
{
"scheme": "appScheme", // 必须与链接中一致
"host": "test.com",
"path": "/home"
}
]
}
]
}
}
2.确保链接地址格式为 scheme://host:port/path(如 appScheme://test.com/home)。
3、 未正确处理ArkWeb组件的拦截逻辑
- 现象:应用内嵌的ArkWeb页面无法拉起目标应用。
- 原因:
- 未通过 onLoadIntercept 回调拦截并处理链接请求。
- 未调用 bundleManager.canOpenLink 验证目标应用是否安装。
- 修改建议:
在ArkWeb组件的 onLoadIntercept 回调中添加逻辑:
Web({ controller: this.controller })
.onLoadIntercept((event) => {
const url = event.data.getRequestUrl();
if (url.startsWith('appScheme://')) {
const link = 'appScheme://test.com/home';
bundleManager.canOpenLink(link).then((canOpen) => {
if (canOpen) {
this.context.openLink(link).catch((err) => {
console.error(`拉起失败: ${err.code}, ${err.message}`);
});
} else {
console.error('目标应用未安装');
}
});
return true; // 拦截请求,阻止默认网页加载
}
return false;
})
4、 签名或域名校验失败
- 现象:已正确配置链接和代码,仍无法拉起应用。
- 原因:
- 使用自动签名导致域名校验失败。
- 链接未通过HTTPS协议访问(仅App Linking要求HTTPS,Deep Linking无此限制)。
- 解决步骤:
1.在AGC平台配置应用的手动签名证书。
2.若使用App Linking,确保链接为HTTPS格式且域名已通过校验。
只有applink可以吧
应用链接分类
按照应用链接的scheme以及校验机制的不同,可以分为Deep Linking与App Linking两种方式。
-
Deep Linking:是一种通过链接跳转至应用特定页面的技术,其特点是支持开发者定义任意形式的scheme。由于缺乏域名校验机制,容易被其他应用所仿冒。
实现原理: Deep Linking基于隐式Want匹配机制中的uri匹配来查询、拉起目标应用。
-
App Linking(推荐):其限定了scheme必须为https,同时通过增加域名校验机制,可以从已匹配到的应用中筛选过滤出目标应用,消除应用查询和定位中产生的歧义,直达受信的目标应用。
相较于Deep Linking,App Linking有如下优势:
- 安全性:通过端云安全鉴权和域名校验,确保只有合法应用被拉起。
- 直达体验:无需二次确认,直接跳转到应用内指定页面。
- 直达应用市场:未安装应用时可跳转至应用市场应用详情页。
- 延迟链接:支持应用安装后恢复之前的跳转意图。
判断applink是否配置成功:
1.把applink的配置放到备忘录里点击看是否跳转
2.使用代码编写 openlink测试
3.执行命令:hdc shell hidumper -s AppDomainVerifyManager 运行hidumper命令后,即可在控制台上看到success消息。
自带浏览器的确不行 你可以试试手动写个html用web组件加载 通过拦截去测试
HarmonyOS的分布式文件系统让我在多设备间共享文件变得更加方便。
actions 配了没
action没配,我加一个试试,
加了还是不行,
在DevEco Studio中开发唤起应用功能时,浏览器输入链接无响应通常是由于配置问题导致。请检查以下方面:
-
确认在config.json中正确配置了uriScheme,格式应为"uriScheme": “your_scheme”
-
验证AndroidManifest.xml中intent-filter的data scheme配置是否与uriScheme一致
-
检查设备上是否已安装调试版本的应用
-
确保浏览器中输入的是完整格式:your_scheme://开头
这些配置问题会导致链接无法正确唤起应用。
检查配置和调用逻辑是否完整。确认module.json中uris配置正确,并确保在entryAbility的onCreate()中已调用router处理scheme链接。需要检查链接格式是否正确,以及浏览器是否支持自定义scheme。建议使用真机调试,部分模拟器可能不支持此类功能。