首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-03-05 23:04
  • 4161
  • 13121
blog.csdn.net

【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版本以三方库的最新版本为准:
在这里插入图片描述

 "dependencies": {
    "@tencent/wechat_open_sdk": "1.0.3"
  }
  • 1
  • 2
  • 3

在这里插入图片描述

分享的目标场景,目前仅支持分享到会话,分享到朋友圈功能还在开发中。
分享的目标场景,目前仅支持分享到会话,分享到朋友圈功能还在开发中。
分享的目标场景,目前仅支持分享到会话,分享到朋友圈功能还在开发中。

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 = mediaMessage

    let finished = await this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
    console.log("send request finished: ", finished)
  }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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.WXImageObject
      imageObject.uri = fileUri.getUriFromPath(filePath);
	  // 放到消息对象包裹里
      let mediaMessage = new wxopensdk.WXMediaMessage()
      mediaMessage.mediaObject = imageObject
	  // 放到消息对象包裹里
      let req = new wxopensdk.SendMessageToWXReq()
      req.scene = wxopensdk.SendMessageToWXReq.WXSceneSession;
      req.message = mediaMessage

      this.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))
      })
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

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

  onClickSendImageByAlbum = async ()=>{
    let imageObject = new wxopensdk.WXImageObject
    imageObject.uri = await this.getPictureUriFromAlbum()

    let mediaMessage = new wxopensdk.WXMediaMessage()
    mediaMessage.mediaObject = imageObject

    let req = new wxopensdk.SendMessageToWXReq()
    req.scene = this.currentScene
    req.message = mediaMessage

    this.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);
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

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

  
  onClickSendImageByData = async ()=>{
    // 本地资源管理工具
    let resourceManager = getContext(this).resourceManager
    // 获取资源文件夹中的图片,转化为pixelMap
    let 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);

    // 压缩图片,获取ArrayBuffer
    const 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.WXImageObject

      let buf: buffer.Buffer = buffer.from(data);
      imageObject.imageData = buf.toString('base64', 0, buf.length);

      let mediaMessage = new wxopensdk.WXMediaMessage()
      mediaMessage.mediaObject = imageObject

      let req = new wxopensdk.SendMessageToWXReq()
      req.scene = this.currentScene
      req.message = mediaMessage

      this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
    })
  }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
注:本文转载自blog.csdn.net的GeorgeGcs的文章"https://blog.csdn.net/u010949451/article/details/143973570"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

135
HarmonyOS
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top