问题概述
其实第三方分享很早就有了,这个按理说这个应该没什么难度,为啥记录一下呢,因为项目中同时出现了 朋友圈多图分享(多张URL集合),朋友圈URL分享,群和个人URL,图片分享。基本上涵盖了大部分需求,这其中出现了一些问题,在此记录一下。
基本操作流程:
操作流程项目过程:/android-sharesdk完整的集成文档/
大致流程就是
注册ShareSDK账户,获取app key,app screct。注册你需要分享的所有平台信息,像QQ,微信,微博等等你必须的在自己项目中添加应用信息
1. 【优先级最高】使用ShareSDK后台直接配置
2. 【优先级中】使用代码配置"setPlatformDevInfo(String,HashMap<String,Object>)"
3. 【优先级最低】使用“assets/shareSDK.xml”文件配置app信息
多图分享效果
如果是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类型的数组,可传入手机本地图片路径和图片链接。
大致结果如下:
分享URL到朋友圈
如果你的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,那么就会产生如下异常,程序将崩溃:
URL分享到给朋友
这个原本是最简单的分享格式,但是由于我们最初为了做多图分享,在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-/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);}
后记
微信在做分享的时候,有几个地方比较坑,这里记录一下:
分享的类型不同,对参数的要求也不一样,一定要严格对比,否则不能调用微信客户端;你使用测试版本时,需要用到微信注册时的签名(keystore)去打包,然后分享出错;如果测试时,第一次分享使用了错误的签名,那么接下来微信都会使用错误的签名,除非你清理微信缓存和重装微信。为此,个人的建议是你测试使用模拟器测试分享,即使错误了,直接重装微信再次测试。