其实第三方分享很早就有了,这个按理说这个应该没什么难度,为啥记录一下呢,因为项目中同时出现了 朋友圈多图分享(多张URL集合),朋友圈URL分享,群和个人URL,图片分享。基本上涵盖了大部分需求,这其中出现了一些问题,在此记录一下。
操作流程项目过程:http://wiki.mob.com/android-sharesdk完整的集成文档/
大致流程就是
如果是IOS,直接多图分享到微信客户端是不支持的,而Android客户端也是需要通过不验证的方式才能通过的,你在官方文档上可以查看说明:官网说明
如果你也想设置多图分享,那么需要如下代码:
/**
* 图片列表分享到微信朋友圈
* @param desc
* @param imageList
* @param listener
*/
public static void shareWeChatImageListComments(String desc, String[] imageList , PlatformActionListener listener) {
HashMap<String,Object> optionMap = new HashMap<>();
optionMap.put("Id","5");
optionMap.put("SortId","5");
optionMap.put("AppId","your app id");
optionMap.put("AppSecret","your app secret");
optionMap.put("BypassApproval",true);
optionMap.put("Enable",true);
ShareSDK.setPlatformDevInfo(WechatMoments.NAME,optionMap);
Platform platform = ShareSDK.getPlatform(WechatMoments.NAME);
Platform.ShareParams shareParams = new Platform.ShareParams();
shareParams.setText(desc);
shareParams.setImageArray(imageList);
shareParams.setShareType(Platform.SHARE_IMAGE);
platform.setPlatformActionListener(listener);
platform.share(shareParams);
}
最主要的就是这个代码:
optionMap.put("BypassApproval",true);
它的意思是微信和朋友圈绕过审核的方式支持多图分享,ImageArray是String类型的数组,可传入手机本地图片路径和图片链接。
大致结果如下:
如果你的app中同时存在多图朋友圈分享和URL朋友圈分享,那么此时URL分享时,BypassApproval属性需要设置成false(即必须通过审核才能分享),基本代码如下:
/**
* URL分享到微信朋友圈
* @param url 跳转的URL
* @param imageUrl 图片上展示的URL
* @param title 分享简介的title
* @param content 分享简介上内容
* @param mListener 分享监听器
*/
public static void shareWeChatMomments(String url, String imageUrl, String title, String content, PlatformActionListener mListener) {
HashMap<String,Object> optionMap = new HashMap<>();
optionMap.put("Id","5");
optionMap.put("SortId","5");
optionMap.put("AppId","your app id");
optionMap.put("AppSecret","your app secret");
optionMap.put("BypassApproval",false);
optionMap.put("Enable",true);
ShareSDK.setPlatformDevInfo(WechatMoments.NAME,optionMap);
Platform platform = ShareSDK.getPlatform(WechatMoments.NAME);
Platform.ShareParams shareParams = new Platform.ShareParams();
shareParams.setShareType(Platform.SHARE_WEBPAGE);
shareParams.setTitle(title);
shareParams.setTitleUrl(url);
shareParams.setText(content);
shareParams.setUrl(url);
shareParams.setImageUrl(imageUrl);
platform.setPlatformActionListener(mListener);
platform.share(shareParams);
}
如果你将BypassApproval还是设置为true,那么就会产生如下异常,程序将崩溃:
这个原本是最简单的分享格式,但是由于我们最初为了做多图分享,在shareSDK.xml文档中对微信设置了绕开审核,即
optionMap.put("BypassApproval",true);
Platform platform = ShareSDK.getPlatform(Wechat.NAME);
Platform.ShareParams shareParams = new Platform.ShareParams();
shareParams.setTitle("share title");
shareParams.setText("share content");
shareParams.setImageUrl("http://dev.e-shigong.com/ic_launcher.png");
shareParams.setUrl(share url);
shareParams.setShareType(Platform.SHARE_WEBPAGE);
platform.setPlatformActionListener(mListener);
platform.share(shareParams);
然后分享出来的结果是:
配置错误的分享 | 配置正确的分享 |
---|---|
我一直认为是我们的appId和AppSecret配置得有问题,后来在咨询mob相关人员之后,只需要把
optionMap.put("BypassApproval",true);
该为optionMap.put("BypassApproval",false);
即可。
详细代码如下:
public static void shareWebpager(String title ,String shareUrl,String shareIcon, String content ,PlatformActionListener mListener){
HashMap<String,Object> optionMap = new HashMap<>();
optionMap.put("Id","5");
optionMap.put("SortId","5");
optionMap.put("AppId","your app id ");
optionMap.put("AppSecret","your app secret");
optionMap.put("BypassApproval",false);
optionMap.put("Enable",true);
ShareSDK.setPlatformDevInfo(Wechat.NAME,optionMap);
Platform platform = ShareSDK.getPlatform(Wechat.NAME);
Platform.ShareParams shareParams = new Platform.ShareParams();
shareParams.setTitle(title);
shareParams.setText(content);
shareParams.setImageUrl(shareIcon);
shareParams.setUrl(shareUrl);
shareParams.setShareType(Platform.SHARE_WEBPAGE);
platform.setPlatformActionListener(mListener);
platform.share(shareParams);
}
微信在做分享的时候,有几个地方比较坑,这里记录一下: