HarmonyOS 鸿蒙Next中应用如何拉起微信界面?

HarmonyOS 鸿蒙Next中应用如何拉起微信界面? 【问题描述】想知道应用如何拉起微信界面?

【问题详情】应用如何拉起微信的界面,例如首页,而不是通过登录、分享等功能进行跳转。是否可以通过AppLinking或者want的方式来拉起微信呢?如果可以的话,微信相关的数据从哪里可以获取?或者有别的方案吗?

6 回复

【背景知识】

  • 应用跳转指从一个应用跳转至另外一个应用,传递相应的数据、执行特定的功能。通过应用跳转可以满足用户更为真实丰富的场景诉求、提升交互体验的便捷性和流畅性。
  • 应用跳转分两种类型拉起指定应用拉起指定类型的应用
  • 拉起指定应用指拉起方应用明确指定跳转的目标应用,来实现应用跳转。指向性跳转可以分为指定应用链接(推荐)、指定Ability(不推荐)两种方式。
  • 指定应用链接分为通过openLinkstartAbility接口来指定应用链接,拉起目标应用页面。
  • 使用Deep Linking实现应用间跳转:采用Deep Linking进行跳转时,系统会根据接口中传入的uri信息,在本地已安装的应用中寻找到符合条件的应用并进行拉起。当匹配到多个应用时,会拉起应用选择框。
  • 使用App Linking实现应用间跳转:使用App Linking进行跳转时,系统会根据接口传入的uri信息(https链接)将用户引导至目标应用中的特定内容,无论应用是否已安装,用户都可以访问到链接对应的内容,跳转体验相比Deep Linking方式更加顺畅。
  • startAbilitystartAbility接口是将应用链接放入want中,通过调用隐式want匹配的方法触发应用跳转。通过startAbility接口启动时,还需要调用方传入待匹配的action和entity。

【解决方案】

以startAbility拉起微信为例:

该方案重点获取对应App的bundleName。

  • 在应用市场下载该App。通过DevEco Studio的log页面可以找到该App的bundleName和abilityName(关闭所有其他程序,只打开目标App可以更快找到)。
  • 通过Device File Browser界面找到bundleName。
  • 将bundleName作为参数传给want。

微信bundleName:com.tencent.wechat

abilityName:EntryAbility

function launchWechat(context:common.UIAbilityContext){
  let want: Want = {
    deviceId: '',
    // 目标App的包名,可以自行在编译器的Device File Browser界面里找
    bundleName: 'com.tencent.wechat',
    // 目标abilityName
    abilityName: 'EntryAbility',
    // 如果未安装指定的功能,请安装该功能,
    flags: wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION,
    parameters: {
      // 自定义参数传递页面信息
    }
  }
}
context.startAbility(want)
}

更多关于HarmonyOS 鸿蒙Next中应用如何拉起微信界面?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


1、通过显式Want进行微信拉起【相当于手动打开微信的操作一样】

let want: Want = {
    bundleName: 'com.tencent.wechat',
    abilityName: 'EntryAbility',
  }

context.startAbility(want)

2、通过DeepLinking进行拉起

  • 在应用的module.json5文件中声明微信的Scheme:
{
  "module": {
    "abilities": [
      {
        "name": "EntryAbility",
        "querySchemes": ["weixin"]  // 声明微信Scheme
      }
    ]
  }
}
  • 拉起微信
let link = 'weixin://home'//微信link
let data = bundleManager.canOpenLink(link);
// 仅以App Linking的方式打开应用
if(data){
  context.openLink(link, { appLinkingOnly: false })
}

可以通过want可以拉起微信基础界面

在HarmonyOS Next中,应用可通过Want拉起微信界面。使用隐式Want,设置参数bundleName为"com.tencent.mm",abilityName为微信目标界面Ability名称(如支付、分享等特定Ability)。示例代码:

let wantInfo = {
  bundleName: "com.tencent.mm",
  abilityName: "目标Ability名称"
}
try {
  await context.startAbility(wantInfo)
} catch(err) {
  console.error(`拉起失败: ${err.code}`)
}

需在module.json5配置文件中声明微信包名权限。具体Ability名称需参考微信开放平台提供的鸿蒙接口文档。

在HarmonyOS Next中,可以通过Want方式拉起微信界面。具体实现如下:

  1. 使用Want拉起微信
    通过隐式Want指定微信的包名和Ability名称,示例代码:

    let wantInfo = {
      bundleName: 'com.tencent.mm',  // 微信包名
      abilityName: 'com.tencent.mm.ui.LauncherUI'  // 微信主界面Ability
    };
    try {
      await context.startAbility(wantInfo);
    } catch (err) {
      console.error(`拉起微信失败: ${err.code}`);
    }
    
  2. 获取微信包名与Ability
    微信的包名通常为com.tencent.mm,但具体Ability名称需微信官方公开或通过反编译获取(注意合规性)。目前微信未公开HarmonyOS Next的完整Ability信息,需依赖其后续适配。

  3. 备选方案

    • AppLinking:若微信支持,可生成特定链接(如业务主页)通过openLink()接口拉起,但需微信侧配置支持。
    • 约束:若无微信公开的Want参数或链接,直接拉起特定界面可能受限,建议优先通过分享/登录等标准集成方式交互。

建议关注微信官方HarmonyOS适配进展,以获取合规的集成方式。

回到顶部