使用shareSDK的一些总结




 
使用shareSDK的一些总结:
原创奥
最近在使用shareSDK 社会化组件还不错,最开始用的时候是4月份 最终因为各种各样的问题而放弃了,如今又来看看他改的怎么样子了 所以开始试试,感觉还不错 好方面还是挺多的 当然 这里要记住的是他的劣势也就是我今天使用遇到的一些问题(1、显示黑色背景问题 2、 过滤不使用的平台(不用去jar 可能以后要用) 3、过滤分享页面使用不到的平台图标)
1、 使用分享组件 先开始出现一篇黑屏 后来慢慢刷新了数据
1、 使用shareSDK的一些总结

使用shareSDK的一些总结
  我研究了一番 发现 这中间是在获取分享平台的时间问题 为此我采用了如下解决方案 
1、 获取平台列表的地方 放在程序的入口   然后设置为全局变量 这个时候也用不了多少时间   同时在这里将id为0的平台过滤掉 因为id为0的是我们暂时不用的 以后可能会用的   代码如下
new Thread(new Runnable() {

@Override
public 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="0184ed49b8028256048ec7dd 28078702"
        Secret="88e421c51be5ef5a"
        RedirectUri="http://www.cmstop.net"
        ShortLinkConversationEna ble="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.setShareContentCustomize Callback(new ShareContentCustomizeDem o());



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="78808411df9b692b2f51588d 0a2a7f20"
        RedirectUrl="http://app.cmstop.dev/r/kxt4dow2kcvi"
        ShortLinkConversationEna ble="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;
}
  第二步分化 ShareApiModel
private 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 shortLinkConversationEna ble, 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 shortLinkConversationEna ble, 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 shortLinkConversationEna ble, boolean enable)
// 设置QQ客户端分享的应用信息
}
else   if ("sms".equals(ailias))
{
// setShortMessageDevInfo(Context context, int id, int sortId, boolean shortLinkConversationEna ble, 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 shortLinkConversationEna ble, 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 shortLinkConversationEna ble, 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 shortLinkConversationEna ble, boolean enable)
// 设置人人网的应用信息
}

else   if ("NetEaseMicroBlog".equals(ailias))
{
ShareSDK.setNetEaseMicroBlogDevIn fo(activity,   shareApiModel.getAppKey(), shareApiModel.getRedirect_uri(),9, 9, true, true);
// setNetEaseMicroBlogDevIn fo(Context context, java.lang.String consumerKey, java.lang.String redirectUri, int id, int sortId, boolean shortLinkConversationEna ble, 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 shortLinkConversationEna ble, boolean enable)
// 设置豆瓣的应用信息
}
else if ("Kaixin".equals(ailias))
{
// setKaixinDevInfo(Context context, java.lang.String appKey, java.lang.String redirectUri, int id, int sortId, boolean shortLinkConversationEna ble, 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 shortLinkConversationEna ble, 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;
  }  
}
 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值