HarmonyOS Next实战

举报
tea_year 发表于 2025/08/31 18:12:57 2025/08/31
【摘要】 为什么要通过微信分享内容?通过微信分享内容具有多方面显著的好处,以下从传播效果维度展开详细分析:覆盖面广:微信拥有庞大的用户基数,截至目前月活跃用户数超13亿。当你分享内容到微信时,你的好友、好友的好友(通过转发)都有可能看到,能迅速将信息扩散到大量潜在受众面前。例如,一篇优质的科普文章在微信朋友圈分享后,经过多级转发,可能在短时间内获得数万甚至数十万的阅读量,大大拓宽了内容的传播范围。精准...

为什么要通过微信分享内容?
通过微信分享内容具有多方面显著的好处,以下从传播效果维度展开详细分析:

  • 覆盖面广:微信拥有庞大的用户基数,截至目前月活跃用户数超13亿。当你分享内容到微信时,你的好友、好友的好友(通过转发)都有可能看到,能迅速将信息扩散到大量潜在受众面前。例如,一篇优质的科普文章在微信朋友圈分享后,经过多级转发,可能在短时间内获得数万甚至数十万的阅读量,大大拓宽了内容的传播范围。
  • 精准触达:微信是基于社交关系建立的平台,分享的内容会优先推送给你的微信好友和关注的公众号粉丝。这些人与你存在一定的社交关联或兴趣共鸣,对分享内容的接受度相对较高。比如,你是一位摄影爱好者,在微信群分享摄影技巧和作品,群里的摄影同好们会更感兴趣,能更精准地触达目标受众。
  • 传播速度快:微信的信息传播具有即时性,一旦分享内容,好友可以立即看到。而且,通过朋友圈、微信群等渠道,内容可以在短时间内被大量转发和传播,形成病毒式传播效应。例如,一条有趣的搞笑视频在微信上分享后,可能几分钟内就被转发到多个群和朋友圈,迅速在网络上传播开来。

以下为通过微信分享内容的鸿蒙项目代码实战:
添加WeixinUtil

import { GlobalKey, GlobalUtil, Logger } from "@heduohao/bases";
import { bundleManager } from "@kit.AbilityKit";
import { BusinessError } from "@kit.BasicServicesKit";
import { WXApi } from "../sdk/weixin/WXApi";
import * as wxopensdk from '@tencent/wechat_open_sdk';
import { common } from "@kit.AbilityKit";
import { image } from "@kit.ImageKit";

export class WeixinUtil {
  /**
   * 判断是否已安装微信
   * @returns
   */
  static isInstalled() {
    const isInstalled = WXApi.isWXAppInstalled()
    return isInstalled
  }

  /**
   * 判断是否已安装微信
   */
  static isInstalled_old() {
    try {
      let canOpen = bundleManager.canOpenLink('weixin://');
      Logger.info(`WeixinUtil.IsInstalled = ${JSON.stringify(canOpen)}`);
      return true
    } catch (err) {
      let message = (err as BusinessError).message;
      Logger.error(`WeixinUtil.IsInstalled failed, err = ${message}`);
      return false
    }
  }

  /**
   * 分享文字
   * @param text
   */
  static shareText(text: string) {
    let textObject = new wxopensdk.WXTextObject()
    textObject.text = text
    let mediaMessage = new wxopensdk.WXMediaMessage()
    mediaMessage.mediaObject = textObject
    let req = new wxopensdk.SendMessageToWXReq()
    req.scene = wxopensdk.SendMessageToWXReq.WXSceneSession
    req.message = mediaMessage
    //获取UIAbilityContext
    const context = GlobalUtil.getObject(GlobalKey.UIAbilityContext) as common.UIAbilityContext;
    WXApi.sendReq(context, req)
  }

  /**
   * 分享网页内容
   * @param url
   * @param title
   * @param description
   * @param callbackAbility 微信跳回宿主App时拉起的ability名字,如果不填则默认是'EntryAbility'
   */
  static async shareWeb(url: string, title: string, description: string, callbackAbility: string = 'EntryAbility') {
    const webpageObject = new wxopensdk.WXWebpageObject()
    webpageObject.webpageUrl = url

    const mediaMessage = new wxopensdk.WXMediaMessage()
    mediaMessage.mediaObject = webpageObject
    mediaMessage.title = title
    mediaMessage.description = description

    //获取UIAbilityContext
    const context = GlobalUtil.getObject(GlobalKey.UIAbilityContext) as common.UIAbilityContext;
    const thumbData = await context.resourceManager.getMediaContent($rawfile('[bases].drawable-xxhdpi/ic_logo.png'))
    const thumbPixel = image.createImageSource(thumbData.buffer).createPixelMapSync()
    const thumbBuffer = await image.createImagePacker().packToData(thumbPixel, { format: "image/png", quality: 100 })
    mediaMessage.thumbData = new Uint8Array(thumbBuffer)

    const req = new wxopensdk.SendMessageToWXReq()
    req.callbackAbility = callbackAbility
    req.scene = wxopensdk.SendMessageToWXReq.WXSceneSession
    req.message = mediaMessage
    WXApi.sendReq(context, req)
  }
}



总结
  1. 核心功能实现
    • 安装检测:通过 WXApi.isWXAppInstalled()  bundleManager.canOpenLink('weixin://') 两种方式判断微信是否安装,提高兼容性。
    • 文字分享:构建 WXTextObject 媒体对象,通过 SendMessageToWXReq 请求发送到微信会话(WXSceneSession)。
    • 网页分享:支持传入 URL、标题、描述和缩略图,自动处理图片资源转换(从应用资源到微信所需的 Uint8Array 格式),并可指定回调 Ability。
  2. 技术细节
    • 依赖微信开放平台 SDK(wxopensdk)和鸿蒙原生能力(bundleManagerresourceManager 等)。
    • 通过 GlobalUtil 获取全局 UIAbilityContext,解决跨组件上下文传递问题。
    • 图片处理流程:应用资源 → 像素映射(PixelMap)→ 二进制数据(Uint8Array),符合微信对缩略图的格式要求。
  3. 使用场景
    适用于需要在鸿蒙应用中快速集成微信社交分享的场景,支持将文字、网页等内容分享到微信好友或群聊,提升内容传播效率。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。