【HarmonyOS】鸿蒙应用接入微信分享

金歌  论坛元老 | 2024-12-6 17:47:25 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1044|帖子 1044|积分 3132

【HarmonyOS】鸿蒙应用接入微信分享

一、下载鸿蒙版微信开放SDK和示例DEMO

1.WeChat_Open_SDK:

点击跳转@tencent/wechat_open_sdk(V1.0.3)
2.官方示例DEMO下载

点击下载OpenSDK-1.0.0.zip
二、运行示例项目

微信的示例项目进行配置同步后,设置自动签名就可以直接运行成功,结果如下:

可以看到微信分享相关在,发送消息按钮,跳转到的页面中,共有两种分享形式,文本和图片。图片又分为网络图片uri,相册选图,和image发送三种

分享页面实现都在SendMessage中,在没有配置APPID的情况下,点击发送XX消息,会跳转到微信,但是会提示第三方应用信息校验失败:

需要在Constants.ets中进行配置:

微信开放平台需要注册你的鸿蒙应用,配置包名等信息。微信最麻烦的就是这个,没有提供一个测试id进行结果检察,只能先去注册你的应用。点击鸿蒙应用手册
三、copy分享相关代码进行接入

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

  1. "dependencies": {
  2.     "@tencent/wechat_open_sdk": "1.0.3"
  3.   }
复制代码

分享的目的场景,目前仅支持分享到会话,分享到朋侪圈功能还在开发中。
分享的目的场景,目前仅支持分享到会话,分享到朋侪圈功能还在开发中。
分享的目的场景,目前仅支持分享到会话,分享到朋侪圈功能还在开发中。
2.参考SendMessage.ets中的代码,copy【文本分享】相关代码:
  1. import * as wxopensdk from '@tencent/wechat_open_sdk';
  2.   onClickSendText = async ()=>{
  3.           // 创建文本分享容器对象,并且赋值文本
  4.     let textObject = new wxopensdk.WXTextObject;
  5.     textObject.text = kTextMessage;
  6.         // 放到消息对象包裹里
  7.     let mediaMessage = new wxopensdk.WXMediaMessage();
  8.     mediaMessage.mediaObject = textObject;
  9.         // 发送包裹,根据返回值判断成功与否
  10.     let req = new wxopensdk.SendMessageToWXReq();
  11.     req.scene = wxopensdk.SendMessageToWXReq.WXSceneSession;
  12.     req.message = mediaMessage
  13.     let finished = await this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
  14.     console.log("send request finished: ", finished)
  15.   }
复制代码
3.参考SendMessage.ets中的代码,copy【图片分享】相关代码:
(1)用网络图片发送Image消息(uri)
  1. import * as wxopensdk from '@tencent/wechat_open_sdk';
  2.   onClickSendImageByUrl = ()=>{
  3.     let imageUrl = "https://img.tukuppt.com/photo-big/00/10/77/619619681755c5463.jpg"
  4.     // 网络图片的url地址,下载到本地应用沙箱
  5.     this.downloadImageWithUrl(imageUrl, async (imageData) => {
  6.       let file: fileIo.File | undefined;
  7.       let filePath = getContext(this).filesDir + `/original-${Date.now()}.jpg`;
  8.       file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
  9.       fileIo.writeSync(file.fd, imageData);
  10.       fileIo.closeSync(file);
  11.           // 创建图片分享容器对象,并且赋值图片本地地址
  12.       let imageObject = new wxopensdk.WXImageObject
  13.       imageObject.uri = fileUri.getUriFromPath(filePath);
  14.           // 放到消息对象包裹里
  15.       let mediaMessage = new wxopensdk.WXMediaMessage()
  16.       mediaMessage.mediaObject = imageObject
  17.           // 放到消息对象包裹里
  18.       let req = new wxopensdk.SendMessageToWXReq()
  19.       req.scene = wxopensdk.SendMessageToWXReq.WXSceneSession;
  20.       req.message = mediaMessage
  21.       this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
  22.     })
  23.   }
  24.   
  25.   downloadImageWithUrl(url: string,
  26.     completion: (imageData: ArrayBuffer) => void) {
  27.     http.createHttp().request(url,
  28.       (error: BusinessError, data: http.HttpResponse) => {
  29.         if (error || data.responseCode != 200) {
  30.           return
  31.         }
  32.         completion((data.result as ArrayBuffer))
  33.       })
  34.   }
复制代码
(2)从相册中选择图片发送Image消息
  1.   onClickSendImageByAlbum = async ()=>{
  2.     let imageObject = new wxopensdk.WXImageObject
  3.     imageObject.uri = await this.getPictureUriFromAlbum()
  4.     let mediaMessage = new wxopensdk.WXMediaMessage()
  5.     mediaMessage.mediaObject = imageObject
  6.     let req = new wxopensdk.SendMessageToWXReq()
  7.     req.scene = this.currentScene
  8.     req.message = mediaMessage
  9.     this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
  10.   }
  11.   async getPictureUriFromAlbum(): Promise<string> {
  12.     let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
  13.     PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
  14.     PhotoSelectOptions.maxSelectNumber = 1;
  15.     let photoPicker = new photoAccessHelper.PhotoViewPicker();
  16.     let photoSelectResult: photoAccessHelper.PhotoSelectResult = await photoPicker.select(PhotoSelectOptions);
  17.     let albumPath = photoSelectResult.photoUris[0];
  18.     let context = getContext(this) as common.UIAbilityContext;
  19.     let file: fileIo.File | undefined;
  20.     file = fileIo.openSync(albumPath, fileIo.OpenMode.READ_ONLY);
  21.     let timeStamp = Date.now();
  22.     fileIo.copyFileSync(file.fd, context.filesDir + `/original-${timeStamp}.jpg`);
  23.     fileIo.closeSync(file);
  24.     let filePath = context.filesDir + `/original-${timeStamp}.jpg`;
  25.     return fileUri.getUriFromPath(filePath);
  26.   }
复制代码
(3)发送Image消息(data) 【应用资源文件夹内的图片资源】
  1.   
  2.   onClickSendImageByData = async ()=>{
  3.     // 本地资源管理工具
  4.     let resourceManager = getContext(this).resourceManager
  5.     // 获取资源文件夹中的图片,转化为pixelMap
  6.     let imageArray = await resourceManager.getMediaContent($r('app.media.test0'));
  7.     let pixelBuffer = imageArray.buffer as ArrayBuffer;
  8.     let imageResource = image.createImageSource(pixelBuffer);
  9.     let opts: image.DecodingOptions = { editable: true }
  10.     let pixelMap = await imageResource.createPixelMap(opts);
  11.     // 压缩图片,获取ArrayBuffer
  12.     const imagePackerApi: image.ImagePacker = image.createImagePacker();
  13.     let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 30 };
  14.     imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => {
  15.       // 老规矩三件套,创建对象,填充,发射
  16.       let imageObject = new wxopensdk.WXImageObject
  17.       let buf: buffer.Buffer = buffer.from(data);
  18.       imageObject.imageData = buf.toString('base64', 0, buf.length);
  19.       let mediaMessage = new wxopensdk.WXMediaMessage()
  20.       mediaMessage.mediaObject = imageObject
  21.       let req = new wxopensdk.SendMessageToWXReq()
  22.       req.scene = this.currentScene
  23.       req.message = mediaMessage
  24.       this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
  25.     })
  26.   }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表