|
使用shareSDK的一些总结:
原创奥
最近在使用shareSDK 社会化组件还不错,最开始用的时候是4月份 最终因为各种各样的问题而放弃了,如今又来看看他改的怎么样子了 所以开始试试,感觉还不错 好方面还是挺多的 当然 这里要记住的是他的劣势也就是我今天使用遇到的一些问题(1、显示黑色背景问题 2、 过滤不使用的平台(不用去jar 可能以后要用) 3、过滤分享页面使用不到的平台图标)
1、 使用分享组件 先开始出现一篇黑屏 后来慢慢刷新了数据
![使用shareSDK的一些总结 使用shareSDK的一些总结](https://i-blog.csdnimg.cn/blog_migrate/ff66e3c98c440867266f519c715b0eb6.jpeg)
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
比如
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 这样他就不可用了 图标也隐藏了
7、在做搜狐微博分享的时候 找不到call back, 后来才发现一个问题就是应用设置里面要设置浏览器的回调地址
![使用shareSDK的一些总结 使用shareSDK的一些总结](https://i-blog.csdnimg.cn/blog_migrate/6bf4c305017b728458ff1976871196a1.jpeg)
这个问题是shareSDK的工程师帮忙找到的非常感谢
8、在shareSDK中始终分享搜狐微博不成功 不知道为什么很纠结
9、在shareSDK分享中 有三种情况配置分享的的平台
不过这种方式不适合我 同时我做的时候 也没有成功所以放弃这种做法
{
this.shareApiModels = shareApiModels;
}
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)
// 设置电子邮件的应用信息
}
}
第四步 设置完毕之后 一定要记得 将得到的列表 排序 因为我发现 代码配置时候的排序是不生效的
.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();
XXXXXAplication.setPlatformList(platformList);
10、排序的类如下
public class ComparatorPlatform implements Comparator{
public int compare(Object arg0, Object arg1) {
Platform p0=(Platform)arg0;
Platform p1=(Platform)arg1;
}
}