使用 SDK

操作步骤

  1. EntryAbility 中响应来自微信的回调,如果不配置将接收不到分享结果。

    export default class EntryAbility extends UIAbility {
      onCreate(want: Want, _launchParam: AbilityConstant.LaunchParam): void {
        ShareService.getInstance().initWeiXin('WXApp_ID')
        this.handleWeChatCallIfNeed(want)
      }
      
      onNewWant(want: Want, _launchParam: AbilityConstant.LaunchParam): void {
        this.handleWeChatCallIfNeed(want)
      }
    
      private handleWeChatCallIfNeed(want: Want) {
        ShareService.getInstance().getWeiXinAppId()?.handleWant(want, WXEventHandler)
      }
  2. 通过 ShareService 实例发起分享请求。

    ShareService 的 API 如下:

    • 注册分享监听

      this.shareService.registerOnWXRespCallback()

    • 注销分享监听

      this.shareService.unRegisterOnWXRespCallback()

    • 发起请求(shareType 分享类型,shareContent 分享内容,callback 分享返回的结果为 ShareCallBack)

      this.shareService.requestShare(ShareType.TEXT, shareContent, callback)

    @Entry
      @Component
      export struct SendMessage {
        //获取shareService实例
        private shareService = ShareService.getInstance()
    
        aboutToAppear(): void {
          //注册分享回调监听
          this.shareService.registerOnWXRespCallback()
        }
        aboutToDisappear(): void {
          //注销监听
          this.shareService.unRegisterOnWXRespCallback()
        }
    
        build() {
          Column({ space: 20 }) {
            Button("发送Text消息").onClick(() => {
              //设置分享内容
              let shareContent = new ShareContent()
              shareContent.text = kTextMessage
              shareContent.title = '测试文本标题'
              shareContent.description = '测试文本描述'
              //发起分享请求,并通过ShareType设置分享类型
              this.shareService.requestShare(ShareType.TEXT, shareContent, callback)
    
            }).width('80%')
          }
  3. 创建接口类 ShareCallBackImpl 实现 ShareCallBack

    export class ShareCallBackImpl implements ShareCallBack {
      //分享取消
      onCancel(): void {
      
      }
      //未安装微信
      onAppUnInstall(): void {
      
      }
      //分享成功
      onSuccess(): void {
       
      }
      //分享异常,返回对应错误码
      onError(msg: string, code: number): void {
        
      }
    }

代码示例

文本分享示例

 //设置分享内容
 let shareContent = new ShareContent()
 shareContent.text = ‘分享内容’
 shareContent.title = '测试文本标题'
 shareContent.description = '测试文本描述'
 //发起分享请求
 this.shareService.requestShare(ShareType.TEXT, shareContent, callback)

图片分享示例

字段

类型

含义

备注

uri

string

图片本地路径的 URI

支持 jpeg/png 类型的图片

imageData

string

图片二进制数据的 base64字符串

系统跳转限制大小不能超过 100KB,URI 和 imageData 同时存在时会优先使用 URI 字段,忽略 imageData。

使用 URI 发送图片

Button("用网络图片发送Image消息(uri)").onClick(async () => {
  let imageUrl = "https://img.tukuppt.com/photo-big/00/10/77/619619681755c5463.jpg"
  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 shareContent = new ShareContent()
    shareContent.uri = fileUri.getUriFromPath(filePath)
    shareContent.title = '测试图片标题'
    shareContent.description = '测试图片描述'
    this.shareService.requestShare(ShareType.IMAGE, shareContent, callback)

  })
}).width('80%')

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))
                            })
}

使用 imageBase64 发送图片

let resourceManager = getContext(this).resourceManager
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 }

this.pixelMap = await imageResource.createPixelMap(opts);

const imagePackerApi: image.ImagePacker = image.createImagePacker();
let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 30 };
imagePackerApi.packing(this.pixelMap, packOpts).then((data: ArrayBuffer) => {
  let shareContent = new ShareContent()
  shareContent.imageData = data
  shareContent.title = '测试图片标题'
  shareContent.description = '测试图片描述'
  this.shareService.requestShare(ShareType.IMAGE, shareContent, callback)

})

网页分享

字段

类型

含义

备注

webpageUrl

string

网页链接

长度需大于 0 且不超过 10KB。

let shareContent = new ShareContent()
shareContent.webpageUrl = "http://www.qq.com"
shareContent.title = '测试网页标题'
shareContent.description = '测试网页描述'

const thumbData = await getContext(this).resourceManager.getMediaContent($r("app.media.test0"))
const thumbPixel = image.createImageSource(thumbData.buffer).createPixelMapSync()
const thumbBuffer = await image.createImagePacker().packing(thumbPixel,{ format: "image/png", quality: 100 })
shareContent.thumbData = new Uint8Array(thumbBuffer)

this.shareService.requestShare(ShareType.WEBPAGE, shareContent, callback)