使用shareSDK的一些总结

时间:2021-08-16 17:06:47



 
使用shareSDK的一些总结:原创奥最近在使用shareSDK 社会化组件还不错,最开始用的时候是4月份 最终因为各种各样的问题而放弃了,如今又来看看他改的怎么样子了 所以开始试试,感觉还不错 好方面还是挺多的 当然 这里要记住的是他的劣势也就是我今天使用遇到的一些问题(1、显示黑色背景问题 2、 过滤不使用的平台(不用去jar 可能以后要用) 3、过滤分享页面使用不到的平台图标)1、 使用分享组件 先开始出现一篇黑屏 后来慢慢刷新了数据1、使用shareSDK的一些总结
使用shareSDK的一些总结 我研究了一番 发现 这中间是在获取分享平台的时间问题 为此我采用了如下解决方案 1、 获取平台列表的地方 放在程序的入口  然后设置为全局变量 这个时候也用不了多少时间  同时在这里将id为0的平台过滤掉 因为id为0的是我们暂时不用的 以后可能会用的  代码如下new Thread(new Runnable() {
@Overridepublic void run() {
Platform platformList[] = ShareSDK.getPlatformList(CmsTopActivity.this);List list = new ArrayList();for (int i = 0, length = platformList.length; i < length; i++) {if (platformList[i].getId() != 0) {list.add(platformList[i]);}}platformList = list.toArray(new Platform[list.size()]);CmsTop.setPlatformList(platformList);//设置全局变量}}).start();

2、 这里不得不说明一下 因为获取平台的标识来自 配置文件 或者是后台配置 灵活应用的话 后台配置好一点 但是 如果是多个应用的话使用的方式又不是很相同 所以 这里我先放在前台设置配置文件 ,在设置配置文件的时候 我做了一个处理 那就是 用不到的 一律设置id为0  SortId 依次排序不用管他
比如         Id="0"        SortId="12"        ApiKey="0184ed49b8028256048ec7dd28078702"        Secret="88e421c51be5ef5a"        RedirectUri="http://www.cmstop.net"        ShortLinkConversationEnable="true"        Enable="true" />3、在使用分享的地方 也就是某个按钮或者什么的触发事件里 调用 case R.id.tool_free_imgBtn:
showShare(false, null,defaultContent);我这里是有界面的 *面的填true defaultContent 为默认内容当然不能忘了initSDK和stopSDK。。
方法的完整类如下// 使用快捷分享完成分享(请务必仔细阅读位于SDK解压目录下Docs文件夹中OnekeyShare类的JavaDoc)private void showShare(boolean silent, String platform,String content) {final OnekeyShare oks = new OnekeyShare(CmsTop.getPlatformList());//采用传值方式传递过去oks.setNotification(R.drawable.icon, getString(R.string.app_name));oks.setAddress("12345678901");oks.setTitle(activity.getString(R.string.share));oks.setTitleUrl("http://sharesdk.cn");oks.setText(content);
oks.setImageUrl("http://img.appgo.cn/imgs/sharesdk/content/2013/07/25/1374723172663.jpg");
oks.setComment(activity.getString(R.string.share));oks.setSite(activity.getString(R.string.app_name));
oks.setVenueName("Share SDK");oks.setVenueDescription("This is a beautiful place!");oks.setLatitude(23.056081f);oks.setLongitude(113.385708f);oks.setSilent(silent);if (platform != null) {oks.setPlatform(platform);}
oks.setShareContentCustomizeCallback(new ShareContentCustomizeDemo());


oks.show(activity);}

4、 在OnekeyShare 类里面 讲平台列表传递过去  也就是OnekeyShare里面用的平台都是我们传递过来的   同时要将平台信息传递给分享页面 public OnekeyShare(Platform platformList[]) {reqMap = new HashMap();customers = new ArrayList();callback = this;this.platformList=platformList;}
传递分享页面EditPage page = new EditPage(platformList);page.setShareData(reqMap);page.setParent(this);5、在EditPage 使用传递过来的平台信息 这样就可以过滤掉我们使用不到的分享平台的图标了 同时PlatformGridView中获取平台代码注销奥// 为了更好的ui效果,开启子线程获取平台列表new Thread(){public void run() {// platformList = ShareSDK.getPlatformList(context);// List<Platform> list=new ArrayList<Platform>();//////               for(int i=0,length=platformList.length;i<length;i++){//               if(platformList[i].getId()!=0){//               list.add(platformList[i]);//               }//               }//               platformList=list.toArray(new Platform[list.size()]);UIHandler.sendEmptyMessage(MSG_PLATFORM_LIST_GOT, PlatformGridView.this);}}.start();

6、发现一种最简单的去除分享平台问题 就是设置某个平台为false 这样他就不可用了 图标也隐藏了   <SinaWeibo        Id="1"        SortId="1"        AppKey="3466722401"        AppSecret="78808411df9b692b2f51588d0a2a7f20"        RedirectUrl="http://app.cmstop.dev/r/kxt4dow2kcvi"        ShortLinkConversationEnable="true"        Enable="false"//这里改成false 就不可用了
7、在做搜狐微博分享的时候 找不到call back, 后来才发现一个问题就是应用设置里面要设置浏览器的回调地址  使用shareSDK的一些总结这入图
这个问题是shareSDK的工程师帮忙找到的非常感谢8、在shareSDK中始终分享搜狐微博不成功 不知道为什么很纠结9、在shareSDK分享中 有三种情况配置分享的的平台    第一种 就是后台配置,但是在使用的时候 要 ShareSDK.setNetworkDevInfoEnable(true);不过这种方式不适合我 同时我做的时候 也没有成功所以放弃这种做法    第二种做法就是前台写的配置文件 这种方法可行 但是 比较麻烦 适合固定分享的我们的需求是不固定分享 服务器可以随时更改平台 于是这就是第三种方式 前台代码配置法  首先要删除asset里的配置文件 因为我发现 不管是第一种还是第二种 配置文件始终生效所以要把他删除 至于 要删除jar包 配置为false的做法 也都是可行的 但是还是不够灵活    第一步 从服务器上获取分享平台 解析成平台列表  (我做的比较笨 改天优化 )public void setShareApiModels(ArrayList<ShareApiModel> shareApiModels){this.shareApiModels = shareApiModels;}  第二步分化ShareApiModelprivate int index;private String text;private String alias;private String appid;private String appkey;private String appsecret;private String redirect_uri;
public ShareApiModel(){}第三步 在程序入口 进行配置和设置ArrayList<ShareApiModel> shareApiModels=splashData.getShareApiModels();for(int i=0,length=shareApiModels.size();i<length;i++){ShareApiModel shareApiModel=shareApiModels.get(i);String  ailias=shareApiModel.getAlias();if ("SinaWeibo".equals(ailias)){ShareSDK.setSinaWeiboDevInfo(activity, shareApiModel.getAppKey(), shareApiModel.getAppsecret(), shareApiModel.getRedirect_uri(), 1, 1, true, true);// setSinaWeiboDevInfo(Context context, java.lang.String appKey, java.lang.String appSecret, java.lang.String redirectUrl, int id, int sortId, boolean shortLinkConversationEnable, boolean enable)// 设置新浪微博的应用信息}else if ("TencentWeibo".equals(ailias)){ShareSDK.setTencentWeiboDevInfo(activity, shareApiModel.getAppKey(), shareApiModel.getAppsecret(), shareApiModel.getRedirect_uri(), 2, 2, true, true);// setTencentWeiboDevInfo(Context context, java.lang.String appKey, java.lang.String appSecret, // java.lang.String redirectUri, int id, int sortId, boolean shortLinkConversationEnable, boolean enable)// 设置腾讯微博的应用信息}else if ("QZone".equals(ailias)){ShareSDK.setQZoneDevInfo(activity, shareApiModel.getAppKey(), 3,3, true, true);// ShareSDK.setQZoneDevInfo(activity, shareApiModel.getAppKey(), shareApiModel.getAppsecret(), // shareApiModel.getRedirect_uri(), i, i, true, true);}else  if ("QQ".equals(ailias)){ShareSDK.setQQDevInfo(activity,   shareApiModel.getAppKey(), 4, 4, true, true);// setQQDevInfo(Context context, java.lang.String appId, int id, int sortId, boolean shortLinkConversationEnable, boolean enable)// 设置QQ客户端分享的应用信息}else  if ("sms".equals(ailias)){// setShortMessageDevInfo(Context context, int id, int sortId, boolean shortLinkConversationEnable, boolean enable)// 设置短信息的应用信息ShareSDK.setShortMessageDevInfo(activity, 5, 5, true, true);}else if ("Weixitimeline".equals(ailias)){//朋友圈ShareSDK.setWechatMomentsDevInfo(activity,  shareApiModel.getAppKey(), 6, 6, true, true);// setWechatMomentsDevInfo(Context context, java.lang.String appId, int id, int sortId, boolean shortLinkConversationEnable, boolean enable)// 设置微信朋友圈的应用信息}else if ("Weixisession".equals(ailias)){ShareSDK.setWechatDevInfo(activity,  shareApiModel.getAppKey(), 7, 7, true, true);// setWechatDevInfo(Context context, java.lang.String appId, int id, int sortId, boolean shortLinkConversationEnable, boolean enable)// 设置微信的应用信息}else if ("Renren".equals(ailias)){ShareSDK.setRenrenDevInfo(activity, shareApiModel.getAppKey(), shareApiModel.getAppsecret(), 8, 8, true, true);// setRenrenDevInfo(Context context, java.lang.String apiKey, java.lang.String secretKey, int id, int sortId, boolean shortLinkConversationEnable, boolean enable)// 设置人人网的应用信息}
else  if ("NetEaseMicroBlog".equals(ailias)){ShareSDK.setNetEaseMicroBlogDevInfo(activity,  shareApiModel.getAppKey(), shareApiModel.getRedirect_uri(),9, 9, true, true);// setNetEaseMicroBlogDevInfo(Context context, java.lang.String consumerKey, java.lang.String redirectUri, int id, int sortId, boolean shortLinkConversationEnable, boolean enable)// 设置网易微博的应用信息}else  if ("Douban".equals(ailias)){ShareSDK.setDoubanDevInfo(activity, shareApiModel.getAppKey(), shareApiModel.getAppsecret(), shareApiModel.getRedirect_uri(), 10, 10, true, true);// setDoubanDevInfo(Context context, java.lang.String apiKey, java.lang.String secret, java.lang.String redirectUri, int id, int sortId, boolean shortLinkConversationEnable, boolean enable)// 设置豆瓣的应用信息}else if ("Kaixin".equals(ailias)){// setKaixinDevInfo(Context context, java.lang.String appKey, java.lang.String redirectUri, int id, int sortId, boolean shortLinkConversationEnable, boolean enable)// 设置开心网的应用信息ShareSDK.setKaixinDevInfo(activity, shareApiModel.getAppKey(), shareApiModel.getRedirect_uri(), 11, 11, true, true);}else if ("email".equals(ailias)){ShareSDK.setEmailDevInfo(activity, 12, 12, true, true);// setEmailDevInfo(Context context, int id, int sortId, boolean shortLinkConversationEnable, boolean enable)// 设置电子邮件的应用信息}}

第四步 设置完毕之后 一定要记得 将得到的列表 排序 因为我发现 代码配置时候的排序是不生效的    Platform platformList[] = ShareSDK.getPlatformList(CmsTopActivity.this);List<Platform> list = new ArrayList<Platform>();for (int i = 0, length = platformList.length; i < length; i++) {if (platformList[i].getId() != 0) {list.add(platformList[i]);}}ComparatorPlatform comparator=new ComparatorPlatform(); Collections.sort(list, comparator);//拍序
    然后设置为全局变量以后使用 platformList = list.toArray(new Platform[list.size()]);
XXXXXAplication.setPlatformList(platformList);10、排序的类如下public class ComparatorPlatform implements Comparator{public int compare(Object arg0, Object arg1) {Platform p0=(Platform)arg0;Platform p1=(Platform)arg1;
  //首先比较年龄,如果年龄相同,则比较名字
 int flag=p0.getId()-(p1.getId());//如果是string  可以使用compareTo if(flag==0){  return p0.getSortId()-(p1.getSortId()); }else{  return flag; }  } }