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 = mediaMessage
this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
你好,机型,微信版本号和复现链接,普通微信分享正常是吗?
你好,我最近也在接微信分享链接和分享小程序功能,也遇到过你这问题。目前已经解决。
鸿蒙环境:微信opensdk:1.0.6 + 微信版本:1.0.3.36
现在分享失败有两种情况:
一: 微信分享链接或者小程序拉不起来,这个是图片太大,必须保证thumbData的 ArraBuffer大小在64k以内,文档有说明,如果超限,this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req) 返回false 二:微信分享能拉起来,但是白屏,这个跟图片pack方式有关,首页原图如果是jpg,那么image.PackingOption 中的format一定要传:'image/jpeg',不能是别的,会导致微信起来后白屏,如果原图是png,那么packing参数format可以是'image/jpeg'或者'image/png'。综上统一使用format可以是'image/jpeg'可以避免因为packing问题导致的微信起来白屏,该原因不清楚到底是鸿蒙的问题还是微信的问题。希望对你有帮助 另外我遇到一个从鸿蒙微信分享出去的链接或者小程序,在Android或者iOS机型上几率性出现分享卡片的封面图加载不出来,不清楚是什么原因导致的,目前尚未解决 @社区技术运营专员--许涛
/**
* 图片压缩
* @param tempFilePath 原图片沙箱路径
* @returns
*/
private async compressImageSource(tempFilePath: string): Promise<ArrayBuffer> {
// 压缩质量(0-100),默认 100
let compressQuality = 100
const fileStat = await fs.stat(tempFilePath)
const fileSize = fileStat.size
// 微信微信限制缩略图图片大小不能超过64k
const overSize = 64 * 1024
const originImageSource = image.createImageSource(tempFilePath)
const imagePacker: image.ImagePacker = image.createImagePacker();
const packOption: image.PackingOption = {
/**notice:这个地方只能用image/jpeg,因为原图是jpg或者png都可以pack成jpeg,
* 微信可以正常使用,但是原图和pack的格式不一致,微信来起来之后白屏无法正常分享
* */
format: 'image/jpeg',
quality: compressQuality
}
let thumbBuffer: ArrayBuffer = new ArrayBuffer(1)
do {
packOption.quality = compressQuality
thumbBuffer = await imagePacker.packing(originImageSource, packOption)
// 质量压缩最小阈值,太低图片可能很糊
if (compressQuality > 40) {
// 每次质量降低5%进一步压缩
compressQuality -= 5
}
} while (thumbBuffer.byteLength > overSize)
console.log('ATag',
`fileSize=${fileSize},thumbBuffer size=${thumbBuffer.byteLength} ,compressQuality=${compressQuality +
5} ,diff=${fileSize -
thumbBuffer.byteLength}`)
return thumbBuffer
}
我也遇到了,可能跟微信版本有关?