From 066a12d1147ba9996f0edc26e7c6fc9b255c52ab Mon Sep 17 00:00:00 2001 From: microJ Date: Mon, 24 Mar 2025 17:16:04 +0800 Subject: [PATCH] refactor: support shareWebpage() --- .../src/main/ets/WechatLibTurboModule.ets | 48 +++++++++++++++++-- .../src/main/ets/WechatLibTurboModule.ets | 48 +++++++++++++++++-- 2 files changed, 88 insertions(+), 8 deletions(-) diff --git a/example/harmony/react_native_wechat_lib/src/main/ets/WechatLibTurboModule.ets b/example/harmony/react_native_wechat_lib/src/main/ets/WechatLibTurboModule.ets index eec166c..bb1ce8f 100644 --- a/example/harmony/react_native_wechat_lib/src/main/ets/WechatLibTurboModule.ets +++ b/example/harmony/react_native_wechat_lib/src/main/ets/WechatLibTurboModule.ets @@ -240,7 +240,7 @@ export class WechatLibTurboModule extends TurboModule implements TM.WechatLibTur http.createHttp().request(url, (error: BusinessError, data: http.HttpResponse) => { if (error || data.responseCode != 200) { - if(callback){ + if (callback) { callback("Download image failed, error code: " + data.responseCode, null) } return @@ -332,8 +332,48 @@ export class WechatLibTurboModule extends TurboModule implements TM.WechatLibTur return this.notSupportPromise(callback) } - shareWebpage(message: TM.WechatLibTurboModule.ShareWebpageMetadata, callback: CallbackBoolean): void { - return this.notSupportPromise(callback) + async shareWebpage(message: TM.WechatLibTurboModule.ShareWebpageMetadata, callback: CallbackBoolean): Promise { + if (!WechatLibTurboModule.wxApi) { + callback(this.NOT_REGISTERED, null); + return; + } + + try { + const webpageObject = new wxopensdk.WXWebpageObject() + webpageObject.webpageUrl = message.webpageUrl ?? '' + + const mediaMessage = new wxopensdk.WXMediaMessage() + mediaMessage.mediaObject = webpageObject + mediaMessage.title = message.title ?? ' ' + mediaMessage.description = message.description ?? ' ' + + let thumbImageUrl = (message.thumbImageUrl ? message.thumbImageUrl : null); + if (thumbImageUrl != null && !(thumbImageUrl === "")) { + await new Promise((resolve) => { + this.downloadImageWithUrl(thumbImageUrl!, async (imageData: ArrayBuffer) => { + if (!imageData) { + callback("shareWebpage Failed to retrieve imageData", null); + return; + } + let thumbPixel = image.createImageSource(imageData).createPixelMapSync(); + // 图片压缩 + let thumbBuffer = await this.bitmapResizeGetBytes(thumbPixel, this.THUMB_SIZE); + mediaMessage.thumbData = new Uint8Array(thumbBuffer); + resolve() + }, callback); + }) + } + + const req = new wxopensdk.SendMessageToWXReq() + req.scene = message.scene ?? wxopensdk.SendMessageToWXReq.WXSceneSession; + req.message = mediaMessage + + const res = await WechatLibTurboModule.wxApi.sendReq(this.context, req) as boolean; + callback(null, res); + } catch (err) { + const message = err instanceof Error ? err.message : 'shareWebpage Unknown error'; + callback(message, null); + } } async shareMiniProgram(message: TM.WechatLibTurboModule.ShareMiniProgramMetadata, callback: CallbackBoolean) { @@ -493,4 +533,4 @@ export class WechatLibTurboModule extends TurboModule implements TM.WechatLibTur subscribeMessage(message: TM.WechatLibTurboModule.SubscribeMessageMetadata, callback: CallbackBoolean): void { return this.notSupportPromise(callback) } -} \ No newline at end of file +} diff --git a/harmony/react_native_wechat_lib/src/main/ets/WechatLibTurboModule.ets b/harmony/react_native_wechat_lib/src/main/ets/WechatLibTurboModule.ets index eec166c..bb1ce8f 100644 --- a/harmony/react_native_wechat_lib/src/main/ets/WechatLibTurboModule.ets +++ b/harmony/react_native_wechat_lib/src/main/ets/WechatLibTurboModule.ets @@ -240,7 +240,7 @@ export class WechatLibTurboModule extends TurboModule implements TM.WechatLibTur http.createHttp().request(url, (error: BusinessError, data: http.HttpResponse) => { if (error || data.responseCode != 200) { - if(callback){ + if (callback) { callback("Download image failed, error code: " + data.responseCode, null) } return @@ -332,8 +332,48 @@ export class WechatLibTurboModule extends TurboModule implements TM.WechatLibTur return this.notSupportPromise(callback) } - shareWebpage(message: TM.WechatLibTurboModule.ShareWebpageMetadata, callback: CallbackBoolean): void { - return this.notSupportPromise(callback) + async shareWebpage(message: TM.WechatLibTurboModule.ShareWebpageMetadata, callback: CallbackBoolean): Promise { + if (!WechatLibTurboModule.wxApi) { + callback(this.NOT_REGISTERED, null); + return; + } + + try { + const webpageObject = new wxopensdk.WXWebpageObject() + webpageObject.webpageUrl = message.webpageUrl ?? '' + + const mediaMessage = new wxopensdk.WXMediaMessage() + mediaMessage.mediaObject = webpageObject + mediaMessage.title = message.title ?? ' ' + mediaMessage.description = message.description ?? ' ' + + let thumbImageUrl = (message.thumbImageUrl ? message.thumbImageUrl : null); + if (thumbImageUrl != null && !(thumbImageUrl === "")) { + await new Promise((resolve) => { + this.downloadImageWithUrl(thumbImageUrl!, async (imageData: ArrayBuffer) => { + if (!imageData) { + callback("shareWebpage Failed to retrieve imageData", null); + return; + } + let thumbPixel = image.createImageSource(imageData).createPixelMapSync(); + // 图片压缩 + let thumbBuffer = await this.bitmapResizeGetBytes(thumbPixel, this.THUMB_SIZE); + mediaMessage.thumbData = new Uint8Array(thumbBuffer); + resolve() + }, callback); + }) + } + + const req = new wxopensdk.SendMessageToWXReq() + req.scene = message.scene ?? wxopensdk.SendMessageToWXReq.WXSceneSession; + req.message = mediaMessage + + const res = await WechatLibTurboModule.wxApi.sendReq(this.context, req) as boolean; + callback(null, res); + } catch (err) { + const message = err instanceof Error ? err.message : 'shareWebpage Unknown error'; + callback(message, null); + } } async shareMiniProgram(message: TM.WechatLibTurboModule.ShareMiniProgramMetadata, callback: CallbackBoolean) { @@ -493,4 +533,4 @@ export class WechatLibTurboModule extends TurboModule implements TM.WechatLibTur subscribeMessage(message: TM.WechatLibTurboModule.SubscribeMessageMetadata, callback: CallbackBoolean): void { return this.notSupportPromise(callback) } -} \ No newline at end of file +}