微信分享开发那点事

移动端开发中微信分享图片的时候,可以说有两种方式:1. 通过imageUrl来设定一个图片的地址分享出去;2. 通过imageData将图片转换成二进制数据(可以通过 UIImageJPEGRepresentation() 或 UIImagePNGRepresentation())
)分享出去。但是有个问题可能很多人会遇到,然后以为解决了问题实际上没解决。当用户通过App分享图片时,如果在开发的时候使用第一种方式分享那么会发现,分享给朋友(Session)的时候会由于没有设置thumbImage而出现一个很丑的底图!
难看的底图


而分享到朋友圈(Timeline)时则一直分享不出去,即使设置了thumbImage。相比第一种方式,第二种方式则分享给朋友或分享到朋友圈都是可以成功的,但是有个问题:当你分享给朋友的时候,在没有WXMediaMessage对象设置title时,在微信中打开图片,我们可以看到分享出去的图片的后缀名是 *.dat。
后缀名是dat

于是我们给WXMediaMessage对象设置一个title,发现成功了,后缀名不再是dat了。

没有dat后缀的dat文件

但是,你以为这样它就不是dat文件了吗?我们知道微信有长按图片识别二维码的功能,于是在这图片上拼命按,发现没反应。好吧,果然还是dat文件。
如果你只是想让用户分享图片,那这样做已经足够了。但是如果你想让用户能把分享出去后的图片让其他人能够长按识别二维码,那就只能另寻蹊径了。
目前我的一种解决方案是:结合上面所说的两种分享图片的方式来解决这个问题,即:分享图片给朋友的时候,我们选择分享图片的url,为了不让分享出去的图片有个难看的底图,我们可以设置一个thumbImage给WXMediaMessage对象。分享图片到朋友圈时我们选择直接分享图片,因为这时分享出去的图片就是真的图片格式,而不是dat格式的。

长按图片识别二维码

长按,确实成功了。以下是代码:

- (void)shareImageToWeChatWithScene:(enum WXScene)scene {
    if (![WXApi isWXAppInstalled]) {
        NSLog(@"没有安装微信");
        return;
    }

    SendMessageToWXReq *message = [[SendMessageToWXReq alloc] init];
    message.scene = scene;
    message.bText = NO;

    WXMediaMessage *mediaMessage = [WXMediaMessage message];
    mediaMessage.title = @"Seed-发现不一般";
    UIImage *img = [self.imageView.image resizedImageToSize:CGSizeMake(100, 100)];
    [mediaMessage setThumbImage:img];
    WXImageObject *imageObject = [WXImageObject object];
    if (scene == WXSceneTimeline) {
        imageObject.imageData = UIImageJPEGRepresentation(self.imageView.image, 1.0);
    } else {
        imageObject.imageUrl = imageURL;
    }

    mediaMessage.mediaObject = imageObject;

    message.message = mediaMessage;

    [WXApi sendReq:message];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值