当前位置: 首页 > news >正文

【HarmonyOS】鸿蒙应用实现微信分享-最新版

【HarmonyOS】鸿蒙应用实现微信分享-最新版

一、首先项目依赖鸿蒙版微信开放SDK和下载示例DEMO

1、WeChat_Open_SDK:
去OpenHarmony三方库中心仓,查看微信开放SDK的最新版本,然后去接入,我目前看到最新的是V1.0.14。

// 将下方链接放到浏览器打开,查看sdk版本
https://ohpm.openharmony.cn/#/cn/detail/@tencent%2Fwechat_open_sdk

在这里插入图片描述
(1)使用命令:

ohpm i @tencent/wechat_open_sdk

(2)或者配置进行远程仓库依赖下载:

{"name": "demo","version": "1.0.0","description": "Please describe the basic information.","main": "","author": "","license": "","dependencies": {"@tencent/wechat_open_sdk": "1.0.14"}
}

(3)内网依赖Har包:
如果你的项目是内网,不能链接三方库,也可以使用DEMO压缩包中的Har包进行本地依赖集成(但是这个Har包版本很老了,如果需要最新的,让公司商务或者运营去对接要一下最新的):
在这里插入图片描述

2、官方示例DEMO下载
在这里插入图片描述
这个压缩包里的工程好久没更新了,将下方链接放到浏览器打开就可下载:

https://dldir1.qq.com/WechatWebDev/opensdk/ohos/OpenSDK-1.0.0.zip

二、运行示例项目

微信的示例项目进行配置同步后,设置自动签名就可以直接运行成功,效果如下:
在这里插入图片描述
可以看到微信分享相关在,发送消息按钮,跳转到的页面中,共有两种分享形式,文本和图片。图片又分为网络图片uri,相册选图,和image发送三种
在这里插入图片描述
分享页面实现都在SendMessage中,在没有配置APPID的情况下,点击发送XX消息,会跳转到微信,但是会提示第三方应用信息校验失败:
在这里插入图片描述
需要在Constants.ets中进行配置:
在这里插入图片描述
微信开放平台需要注册你的鸿蒙应用,配置包名等信息。微信最麻烦的就是这个,没有提供一个测试id进行效果查看,只能先去注册你的应用。点击鸿蒙应用手册

三、copy分享相关代码进行接入

1.安装SDK依赖:
sdk版本以三方库的最新版本为准:

 "dependencies": {"@tencent/wechat_open_sdk": "1.0.14"}

在这里插入图片描述

2.参考SendMessage.ets中的代码,copy【文本分享】相关代码:

import * as wxopensdk from '@tencent/wechat_open_sdk';onClickSendText = async ()=>{// 创建文本分享容器对象,并且赋值文本let textObject = new wxopensdk.WXTextObject;textObject.text = kTextMessage;// 放到消息对象包裹里let mediaMessage = new wxopensdk.WXMediaMessage();mediaMessage.mediaObject = textObject;// 发送包裹,根据返回值判断成功与否let req = new wxopensdk.SendMessageToWXReq();req.scene = wxopensdk.SendMessageToWXReq.WXSceneSession;req.message = mediaMessagelet finished = await this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)console.log("send request finished: ", finished)}

3.参考SendMessage.ets中的代码,copy【图片分享】相关代码:

(1)用网络图片发送Image消息(uri)

import * as wxopensdk from '@tencent/wechat_open_sdk';onClickSendImageByUrl = ()=>{let imageUrl = "https://img.tukuppt.com/photo-big/00/10/77/619619681755c5463.jpg"// 网络图片的url地址,下载到本地应用沙箱this.downloadImageWithUrl(imageUrl, async (imageData) => {let file: fileIo.File | undefined;let filePath = getContext(this).filesDir + `/original-${Date.now()}.jpg`;file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);fileIo.writeSync(file.fd, imageData);fileIo.closeSync(file);// 创建图片分享容器对象,并且赋值图片本地地址let imageObject = new wxopensdk.WXImageObjectimageObject.uri = fileUri.getUriFromPath(filePath);// 放到消息对象包裹里let mediaMessage = new wxopensdk.WXMediaMessage()mediaMessage.mediaObject = imageObject// 放到消息对象包裹里let req = new wxopensdk.SendMessageToWXReq()req.scene = wxopensdk.SendMessageToWXReq.WXSceneSession;req.message = mediaMessagethis.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)})}downloadImageWithUrl(url: string,completion: (imageData: ArrayBuffer) => void) {http.createHttp().request(url,(error: BusinessError, data: http.HttpResponse) => {if (error || data.responseCode != 200) {return}completion((data.result as ArrayBuffer))})}

(2)从相册中选择图片发送Image消息

  onClickSendImageByAlbum = async ()=>{let imageObject = new wxopensdk.WXImageObjectimageObject.uri = await this.getPictureUriFromAlbum()let mediaMessage = new wxopensdk.WXMediaMessage()mediaMessage.mediaObject = imageObjectlet req = new wxopensdk.SendMessageToWXReq()req.scene = this.currentScenereq.message = mediaMessagethis.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)}async getPictureUriFromAlbum(): Promise<string> {let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;PhotoSelectOptions.maxSelectNumber = 1;let photoPicker = new photoAccessHelper.PhotoViewPicker();let photoSelectResult: photoAccessHelper.PhotoSelectResult = await photoPicker.select(PhotoSelectOptions);let albumPath = photoSelectResult.photoUris[0];let context = getContext(this) as common.UIAbilityContext;let file: fileIo.File | undefined;file = fileIo.openSync(albumPath, fileIo.OpenMode.READ_ONLY);let timeStamp = Date.now();fileIo.copyFileSync(file.fd, context.filesDir + `/original-${timeStamp}.jpg`);fileIo.closeSync(file);let filePath = context.filesDir + `/original-${timeStamp}.jpg`;return fileUri.getUriFromPath(filePath);}

(3)发送Image消息(data) 【应用资源文件夹内的图片资源】

  onClickSendImageByData = async ()=>{// 本地资源管理工具let resourceManager = getContext(this).resourceManager// 获取资源文件夹中的图片,转化为pixelMaplet imageArray = await resourceManager.getMediaContent($r('app.media.test0'));let pixelBuffer = imageArray.buffer as ArrayBuffer;let imageResource = image.createImageSource(pixelBuffer);let opts: image.DecodingOptions = { editable: true }let pixelMap = await imageResource.createPixelMap(opts);// 压缩图片,获取ArrayBufferconst imagePackerApi: image.ImagePacker = image.createImagePacker();let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 30 };imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => {// 老规矩三件套,创建对象,填充,发射let imageObject = new wxopensdk.WXImageObjectlet buf: buffer.Buffer = buffer.from(data);imageObject.imageData = buf.toString('base64', 0, buf.length);let mediaMessage = new wxopensdk.WXMediaMessage()mediaMessage.mediaObject = imageObjectlet req = new wxopensdk.SendMessageToWXReq()req.scene = this.currentScenereq.message = mediaMessagethis.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)})}

注意

微信分享 图片大小有限制,需要小于100kb。所以最好使用Uri的形式进行图片分享。要不然你得处理图片压缩。

3、新增微信分享网页和分享小程序:

(1) 微信分享网页
在这里插入图片描述

const webpageObject = new wxopensdk.WXWebpageObject()
webpageObject.webpageUrl = "http://www.qq.com"const mediaMessage = new wxopensdk.WXMediaMessage()
mediaMessage.mediaObject = webpageObject
mediaMessage.title = "测试网页链接"
mediaMessage.description = "测试网页摘要"const thumbData = await getContext(this).resourceManager.getMediaContent($r("app.media.thumb_img"))
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 = kDemoEntryAbility
req.scene = wxopensdk.SendMessageToWXReq.WXSceneSession
req.message = mediaMessagethis.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)

(2) 微信分享小程序
在这里插入图片描述

const miniProgramObject = new wxopensdk.WXMiniProgramObject()
miniProgramObject.userName = "gh_ac032d0848a9"
miniProgramObject.path = "pages/Home/Home"
miniProgramObject.miniprogramType = wxopensdk.WXMiniProgramType.RELEASEconst mediaMessage = new wxopensdk.WXMediaMessage()
mediaMessage.mediaObject = miniProgramObject
mediaMessage.title = "测试分享小程序Title"
mediaMessage.description = "分享小程序描述信息"const thumbData = await getContext(this).resourceManager.getMediaContent($r("app.media.thumb_img2"))
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 = kDemoEntryAbility
req.scene = wxopensdk.SendMessageToWXReq.WXSceneSession
req.message = mediaMessagethis.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)

3、新增内容分享到朋友圈:

  private currentScene = wxopensdk.SendMessageToWXReq.WXSceneTimeline;

在这里插入图片描述

注意

微信分享小程序 不要使用示例的userName,否则会导致分享失败。请使用自己的目标小程序配置信息。

版本更新参考

版本号更新时间更新内容
1.0.142025-05-06 15:15:44WXWebpageObject(微信网页对象)中支持 isSecretMessage(私密消息标识)功能,用于控制消息在微信内的可见范围。
1.0.122025-03-25 15:09:41SendMessageToWXReq(向微信发送消息的请求)中支持 WXSceneTimeline(朋友圈场景),实现将内容分享到朋友圈。
1.0.112025-03-25 15:09:41修复因 AppLink 协议(应用链接协议)冲突导致的问题,避免与其他应用或系统功能冲突。
1.0.102025-01-14 19:04:10支持通过 openLink(打开链接)方式启动微信,方便在应用内直接跳转到微信指定页面。
1.0.92024-12-24 14:26:45新增对 WXFileObject(微信文件对象)的支持,可用于在微信中分享文件。
1.0.82024-12-24 14:26:45修复序列化相关问题,确保数据在传输和存储过程中正确转换和恢复。
1.0.72024-12-24 14:26:45支持 LaunchFromWXReq(从微信启动应用请求),处理从微信打开应用的场景。
1.0.62024-12-24 14:26:45支持将 WXWebpageObject(微信网页对象)和 WXMiniProgramObject(微信小程序对象)用于 WXMediaMessage.mediaObject(微信媒体消息的媒体对象),扩展了消息内容类型。
1.0.52024-11-27 10:20:34支持 OpenBusinessView(打开业务视图)功能,用于打开微信内的特定业务页面。
1.0.42024-11-27 10:20:34- 支持 isWXAppInstalled(检测微信是否安装)功能
- 添加混淆所需的 consumer-rules(消费者规则),确保SDK代码在混淆过程中不被错误处理。
1.0.32024-10-31 15:36:43支持 LaunchMiniProgram(启动小程序)功能,实现从应用直接跳转到指定小程序。
1.0.22024-10-31 15:36:43修复当 startAbility(启动能力/组件)成功时,WXApi.sendReq(微信接口发送请求)不返回结果(Promise 不 resolve)的问题。
1.0.12024-10-09 12:28:24BaseReq(基础请求)中新增 callbackAbility(回调能力/回调组件),优化请求回调机制。
1.0.02024-10-09 12:28:24初始化微信开放平台SDK(WeChat OpenSDK),提供基础的微信功能支持。
http://www.dtcms.com/a/419395.html

相关文章:

  • 房地产项目网站建设方案做外贸的网站简称为什么网站
  • Vue 3 开发的 HLS 视频流播放组件+异常处理
  • 前端核心框架vue之(路由核心案例篇3/5)
  • vue中不同的watch方法的坑
  • 网站首页排版设计广州网络公关公司
  • 批量重命名技巧:使用PowerShell一键整理图片文件命名规范
  • 手机版网站怎么做的企业解决方案架构师
  • 网站企业备案改个人备案专业微网站制作
  • 新天力科技以创新驱动发展,铸就食品包装容器行业领军者
  • crew AI笔记[7] - flow特性示例
  • 广州制作网站公司网站开发收税
  • 二阶可降阶微分方程的求解方法总结
  • 纯静态企业网站模板免费下载手机app编程
  • Redis在高并发场景中的核心优势
  • 教育网站 网页赏析网络营销推广的优缺点
  • 金溪县建设局网站品牌网站怎么建立
  • 中国气候政策不确定性数据(2000-2022)
  • 大发快三网站自做青海省城乡建设厅网站
  • 800G DR8与其他800G光模块的对比分析
  • 第四部分:VTK常用类详解(第100章 vtkHandleWidget句柄控件类)
  • Kafka 和 RabbitMQ 使用:消息队列的强大工具
  • 网站注册信息网站的建设有什么好处
  • 物理层-传输介质
  • npm 包构建与发布
  • 第四部分:VTK常用类详解(第99章 vtkBorderWidget边框控件类)
  • 如何播放 M3U8 格式的视频
  • 视频推拉流EasyDSS如何运用无人机直播技术高效排查焚烧烟火?
  • 常规网站服务器cms程序
  • tomcat创建bat启动,结合任务计划实现自动重启tomcat服务
  • 滨海网站建设wordpress .htaccess下载