微信小程序> iOS分享微信小程序无反应、失败;iOS多种分享形式(以微信为例:链接+图片+小程序)

iOS分享微信小程序无反应、失败;iOS多种分享形式(以微信为例:链接+图片+小程序)

浏览量:3033 时间: 来源:Mee_L

背景

先交代下背景:最近一个需求,根据接口返回数据来控制分享形式,即传入分享类别(比如文章、音频、邀请好友下载应用等)、分享平台(比如微信好友、朋友圈等)、分享类别所对应的id(比如文章id、音频id等),接口返回相应的分享形式(图片、小程序、网页)及对应的分享所需信息。以此达到根据多种条件灵活控制分享形式。(好吧~承认感觉实际用处并不太大…)

先上代码

1,图片形式

//1.创建多媒体消息结构体        WXMediaMessage *mediaMsg = [WXMediaMessage message];        //2.创建多媒体消息中包含的图片数据对象        WXImageObject *imgObj = [WXImageObject object];        //图片真实数据        imgObj.imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:dic[@"img_url"]]];        //dic为接口返回的分享所需信息,也可以自己处理链接或者添加本地图片        //            UIImage *image = IMAGE(@"invite.jpg");        //        //        imgObj.imageData = UIImagePNGRepresentation(image);        //多媒体数据对象        mediaMsg.mediaObject = imgObj;                //3.创建发送消息至微信终端程序的消息结构体        SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];        //多媒体消息的内容        req.message = mediaMsg;        //指定为发送多媒体消息(不能同时发送文本和多媒体消息,两者只能选其一)        req.bText = NO;        //指定发送到会话(聊天界面)        req.scene = WXSceneSession;  //此处可根据实际情况来加判断  WXSceneTimeline-朋友圈        //发送请求到微信,等待微信返回onResp        [WXApi sendReq:req];

2,小程序形式

//前面最好加个判断,如果以小程序分享到朋友圈,暂时是不支持的        Protocal *data = [[Protocal alloc] init];        data.title = dic[@"title"];        data.desc = dic[@"content"];        data.url = dic[@"url"];                data.img = dic[@"img_url"];                data.programPage = dic[@"app_path"];//小程序路径        data.userName = dic[@"app_userName"];//小程序原始id        //dic为接口返回分享所需信息,Protocal为自己创建的分享模型,        --后面用的友盟的分享,也可用微信原生的,毕竟图省事            //创建分享消息对象    UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];      UMShareMiniProgramObject *shareObject = [UMShareMiniProgramObject shareObjectWithTitle:data_.title descr:data_.desc thumImage:data_.image];        shareObject.webpageUrl =data_.url?:@"";//若url为空此处会无法调起微信,所以此处最好不要写空,见后面遇到的坑        shareObject.userName = data_.userName;        shareObject.path = data_.programPage;        messageObject.shareObject = shareObject;        shareObject.hdImageData = UIImageJPEGRepresentation(data_.image,1);        shareObject.miniProgramType = UShareWXMiniProgramTypeRelease; // 可选体验版和开发板            //调用分享接口    [[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self.mObject completion:^(id data, NSError *error) {        if (error) {            UMSocialLogInfo(@"************Share fail with error %@*********",error);        }else{            if ([data isKindOfClass:[UMSocialShareResponse class]]) {                UMSocialShareResponse *resp = data;                //分享结果消息                UMSocialLogInfo(@"response message is %@",resp.message);                //第三方原始返回的数据                UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);                            }else{                UMSocialLogInfo(@"response data is %@",data);            }        }    }];

3,网页形式(最原始的分享形式)

 Protocal *data = [[Protocal alloc] init];        data.title = dic[@"title"];        data.desc = dic[@"content"];        data.url = dic[@"url"];                data.img = dic[@"img_url"];                --上面基本和小程序类似,下面粘友盟的代码            //创建分享消息对象    UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];     //创建网页内容对象        UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:data_.title?:@"" descr:data_.desc?:@"" thumImage:data_.image];        //设置网页地址        shareObject.webpageUrl = data_.url?:@"";                //分享消息对象设置分享内容对象        messageObject.shareObject = shareObject;         //调用分享接口    [[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self.mObject completion:^(id data, NSError *error) {        if (error) {            UMSocialLogInfo(@"************Share fail with error %@*********",error);        }else{            if ([data isKindOfClass:[UMSocialShareResponse class]]) {                UMSocialShareResponse *resp = data;                //分享结果消息                UMSocialLogInfo(@"response message is %@",resp.message);                //第三方原始返回的数据                UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);                            }else{                UMSocialLogInfo(@"response data is %@",data);            }        }    }];        

因实际项目中用了两个Manager单例封装处理了判断、分类,上面粘的部分代码可能没法直接运行,如有问题可在下方留言…

遇到的坑

分享微信小程序无反应

1,UMShareMiniProgramObject中webpageUrl不可为空小程序
因接口当时返回的是以小程序为分享形式时,并未给url,所以以至于赋值的时候webpageUrl给了空,导致调不起微信。且当时看是适配低版本微信网页链接,所以没有太在意,以至于找了好久才发现这个问题…

2,分享小程序也是以UMSocialPlatformType_WechatSession微信聊天类型,不可自定义类型,否则友盟无法调起微信。
因产品要求分享到微信聊天不只有小程序类型,还有其他类型,所以当时自作聪明在友盟的UMSocialPlatformConfig.h内新添了一种类型小程序
以至于无法调起。并且当时因为原因1中webpageUrl为空,也导致了无法调起,所以此处在自定义类型之前也是无法调起,无反应,所以以为不是这个问题。后来想明白了微信聊天小程序现在也是基于微信聊天发送的,在聊天内只是一种样式而并不是与聊天、朋友圈并列的形式…但当时由于1、2问题都在以至于找了好久都没找出问题…

暂时遇到这两个坑,后续再补充…以上写的内容及粘的代码过于匆忙,如有错误欢迎指正…

小程序

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎