HarmonyOS鸿蒙Next中AppLink延迟链接跳转时,目标方应用可以通过deferredLink.popDeferredLink()获取原URL,但延迟跳转时除URL外的信息如parameters如何获取
HarmonyOS鸿蒙Next中AppLink延迟链接跳转时,目标方应用可以通过deferredLink.popDeferredLink()获取原URL,但延迟跳转时除URL外的信息如parameters如何获取 一般AppLink跳转时,目标方可以获取到完整的want内容。而当目标方未安装时,AppLink先去应用市场安装后,此时再打开目标方应用后,目标方应用可以通过deferredLink.popDeferredLink()获取原want中的URL参数,但原want中的其余参数如parameters如何获取呢
开发者您好,这边意思是如果不使用延迟跳转,原来会在EntryAbility中的onCreate获取到整个want这样是吗?这边want的parameters是在什么时候在哪里放进去的?是否是在被拉起的目标应用的onCreate时候放入want的吗?
参考下基于延迟链接能力跳转应用详情页-HarmonyOS 5及以上-Codelabs-华为开发者联盟 (huawei.com)这样把want放入AppStorage,在Index页面获取want是否能满足您的需求。
如果不能满足麻烦详细描述下需要如何兼容以往的appLink链接。
更多关于HarmonyOS鸿蒙Next中AppLink延迟链接跳转时,目标方应用可以通过deferredLink.popDeferredLink()获取原URL,但延迟跳转时除URL外的信息如parameters如何获取的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
小伙伴你好,关于延迟跳转中 Want 参数获取的问题,建议参考 官方 Codelabs 将 Want 存入 AppStorage 来实现。
详细说明
使用 AppStorage 传递 Want 参数
如果不使用延迟跳转,通常可以在 EntryAbility 的 onCreate 中直接获取 want。但在延迟链接(Deep Linking)场景下,建议将 want 参数放入 AppStorage 中,以便在 UI 页面(如 Index 页面)加载完成后进行获取和处理。
核心步骤:
- 在
EntryAbility生命周期(onCreate或onNewWant)中将want存入AppStorage。 - 在目标页面通过
AppStorage获取参数。
代码示例:
EntryAbility.ets:
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 将 want 存入 AppStorage
AppStorage.setOrCreate('want', want);
}
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 更新 want
AppStorage.setOrCreate('want', want);
}
}
Index.ets:
import { Want } from '@kit.AbilityKit';
@Entry
@Component
struct Index {
// 获取存储的 want
@StorageProp('want') want: Want | undefined = undefined;
aboutToAppear(): void {
if (this.want) {
// 处理 want 参数,例如获取 parameters
const params = this.want.parameters;
console.info('Get want parameters:', JSON.stringify(params));
}
}
build() {
Column() {
// 页面内容
}
}
}
如果此方案仍无法满足兼容以往 AppLink 的需求,麻烦详细描述下具体的场景和参数传递时机。
参考文档
跳转链接的时候带上参数,接收方可以通过want里的uri字段并解析里面的URL获取即可,片段示例如下:
//AppLinking跳转链接
const url = "https://xxx.xx.x/?pageName=PageA&pageTag=1"
//接收方:在Ability的onCreate()接收
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { url } from '@kit.ArkTS';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
//获取AppLinking进来的uri
let uri = want?.uri
if(uri){
try {
let urlObj = url.URL.parseURL(want?.uri)
let pageName = urlObj.params.get('pageName') || 'test'
let pageTag = urlObj.params.get('pageTag') || 0
console.log("pageName:", pageName)
console.log("pageTag:", pageTag)
}catch (err) {
console.log("want.uri出错:")
}
}
}
}
但是这种方法无法兼容以往的appLink,需要修改以往的appLink调用才能实现,
确实,
在鸿蒙Next的AppLink延迟跳转场景中,除URL外其他参数(如parameters)的获取,需在目标方应用的UIAbility的onContinue方法中处理。延迟链接的完整数据(包括parameters)会通过want参数传递。开发者可通过want.parameters直接访问这些附加参数,无需依赖deferredLink.popDeferredLink()返回的URL。want对象包含了启动时携带的所有信息。
在HarmonyOS Next中,当AppLink发生延迟跳转(即目标应用未安装,通过应用市场安装后启动)时,通过deferredLink.popDeferredLink()确实只能获取到原始Want中的URI(URL)信息。这是因为在延迟跳转场景下,系统主要记录了用于市场分发的核心标识(即URI),而Want中的其他参数(如parameters)默认不会持久化到延迟跳转流程中。
若需传递除URI外的其他参数,目前的标准做法是将这些参数直接编码到URI中。例如,将参数以查询字符串(query string)的形式附加在URI后,这样在通过popDeferredLink()获取URI后,可以自行解析出全部参数。
示例:
- 原始Want可能包含URI
"example://page/home"和 parameters{ "key1": "value1", "key2": 123 }。 - 建议将其整合为完整URI:
"example://page/home?key1=value1&key2=123"。 - 延迟跳转后,目标应用通过
popDeferredLink()获取该完整URI,再解析查询字符串即可还原参数。
这是当前确保参数在延迟跳转中可靠传递的推荐方式。

