HarmonyOS NEXT实战:通过微信分享内容

##HarmonyOS Next实战##三方SDK##教育##

前提条件:已接入微信SDK

参考资料: https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Share_and_Favorites/ohos.html

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

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

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

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)
  }
}
全部评论

相关推荐

06-01 18:36
已编辑
南昌大学 前端工程师
## 时长 70 分钟 北京合思招聘系统### 1.自我介绍环节### 2.做题环节(20 分钟左右)有 22 道选择(html,css,js,数据结构),一道算法题:字符串去重,我和面试官简单说了一下思路(new Set),然后他让我随便写一点交卷了### 3.项目,场景和八股环节(这个环节持续太长了,有些我实在是忘了)1.你是如何做到首屏优化的2.讲讲 CI/CD 是如何实现的3.项目中有使用过 webpack 和 vite 吗4.webpack 和 vite 有什么区别5.有没有使用过什么状态管理工具6.项目使用了什么缓存机制这里我展开讲讲。关于缓存数据,蜀黍使用了缓存头(Cache-Control)和 localStorge。项目中使用了 Promise.all 来进行并发请求,同时从服务器和本地缓存请求数据7.怎么获取的缓存数据localStorge,状态码 3048.缓存的过期时间9.NextJS 中如何设置代码在客户端运行10.NextJS 如何设置服务端运行(好像是这个问法)11.useEffect 中如何进行数据请求(丝滑切换至场景题)12.如果不同 useEffect 中相互依赖过多怎么办(反问面试官,竟然是退化至使用类式组件)13.如果我想让我的 useRef 使用外部的 props 应该怎么办(forwardRef)14.当我的父组件将一个可能会经常变化的 props 传递给子组件时,应该怎么办(useMemo)15.我想全局管理 props,并且防止出现 props drill 的问题,应该怎么办(useContext)16.我想使用 useRef 来实现一个可以返回窗口顶部的功能,应该怎么实现,使用哪些 API17.我想将一个二维数组转换为一维数组怎么办18.如果我的二维数组中不完全都是数组怎么办(instanceof、Array.isArray)19.实现 add(1)(2) === 3 (函数柯里化)20.如何实现 string 和 number 之间的相互转换21.如何改变 this 的指向22.你有没有用过什么 ES6 的新特性23.Promise 打印顺序```javascriptconst promise = new Promise((resolve, reject) => {  console.log(1)  resolve()  console.log(2)})promise.then(() => {  console.log(3)})console.log(4)```24.有没有使用过 typeof25.flex 布局中如何实现水平垂直居中26.如何消除 float 带来的影响27.给定一个完整的 URL,如何获取其查询参数28.React 19 和 React 18 有什么区别29.项目中是否有采用什么对静态资源的优化可能还有,但是暂时想不起来了## 时长 15 分钟 洋葱学园1.对于一个列表,我们通常会给其添加一个 key,可以不添加吗,如果不添加是否有什么问题?2.对于一个 H5 页面加载过慢,如何优化3.将 URL 输入搜索栏,浏览器会做什么4.如何实现进入视窗才进行懒加载5.如何在一个 JS 文件中白屏时返回 Loading 组件(我直接说了 React 和 NextJS 中如何实现哈哈)6.移动端适配7.如何处理重复的请求(本人说了 axios cancelToken、防抖和节流解决这个问题)我确实记得应该还有,但是想不起来(
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务