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

背景

先交代下背景:最近一个需求,根据接口返回数据来控制分享形式,即传入分享类别(比如文章、音频、邀请好友下载应用等)、分享平台(比如微信好友、朋友圈等)、分享类别所对应的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问题都在以至于找了好久都没找出问题…

暂时遇到这两个坑,后续再补充…以上写的内容及粘的代码过于匆忙,如有错误欢迎指正…
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值