本人集成shareSDK分享时遇到不少麻烦,通过慢慢解决之后有一些心得体会,可能大牛觉得一般,请勿喷!特此分享希望能帮助更多的开发者。
步骤按照官网来:http://wiki.mob.com/Android_%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97/
1,第一个注意的问题:2.6以上配置文件的包名修改了(把原来的类名cn.sharesdk.framework.ShareSDKShell 改成com.mob.tools.MobUIShell)
2,在assets目录下的shareSDK.xml文件里
微信相关的需要签名才能使用,否则会点击一闪而过(不要认为没集成成功,然后各种去找问题,会郁闷死的!)
ShareByAppClient是否通过客户端分享(绕过审核),如果只是想写一个测试的demo可以绕过审核,但是分享的内容就比较鸡肋了;如果是正式产品,不绕过审核,什么id,key等需要和开放平台上一样。
<!-- ShareByAppClient标识是否使用微博客户端分享,默认是false -->
<!-- Enable参数好东西啊!如果你集成的时候不用那么多平台,而后期扩展功能的话这个就有用了,
你可以先集成多个,哪个暂时不用,把这个参数设置为false即可在分享菜单中不显示。 -->
<SinaWeibo
Id="1"
SortId="1"
AppKey="568898243"
AppSecret="38a4f8204cc784f81f9f0daaf31e02e3"
RedirectUrl="http://www.sharesdk.cn"
ShareByAppClient="false"
Enable="true" />
3,libs直接放进去添加到库就ok了,res也是。
4,src:在分享的方法中
拷贝下来的方法中把setNotification注掉,新版本删除了这个方法;
绕过审核的话setText方法可以显示出你的文本,如果不绕过审核text不显示,不要这个方法,用setUrl和setTitle结合来实现文本显示和链接功能,url传的是你要点击进入的网址。
原来方法
private void showShare(){
ShareSDK.initSDK(this);
OnekeyShare oks = new OnekeyShare();
分享时Notification的图标和文字
oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
oks.setText("我是分享文本");
oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/05/21/oESpJ78_533x800.jpg");
// 启动分享GUI
oks.show(this);
}
修改后的方法
private void showShare(){
ShareSDK.initSDK(this);
OnekeyShare oks = new OnekeyShare();
//关闭sso授权
oks.disableSSOWhenAuthorize();
// 分享时Notification的图标和文字 2.5.9以后的版本不调用此方法
//oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
// title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
oks.setTitle(getString(R.string.share));
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用,网友点进链接后,可以看到分享的详情
oks.setTitleUrl("http://sharesdk.cn");
// text是分享文本,所有平台都需要这个字段
oks.setText("庭前花木满,院外小径芳,四时常相往,晴日共剪窗。大家好,我是文艺青年,啦啦啦~");
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
// oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片
// 网络图片地址,所有平台都需要
oks.setImageUrl();
// url仅在微信(包括好友和朋友圈)中使用,网友点进链接后,可以看到分享的详情
oks.setUrl("http://sharesdk.cn");
// comment是我对这条分享的评论,仅在人人网和QQ空间使用
oks.setComment("我是测试评论文本");
// site是分享此内容的网站名称,仅在QQ空间使用
oks.setSite(getString(R.string.app_name));
// siteUrl是分享此内容的网站地址,仅在QQ空间使用
oks.setSiteUrl("http://sharesdk.cn");
// 启动分享GUI
oks.show(this);
}
5,package cn.sharesdk.onekeyshare.theme.classic这个包下的PlatformListPage可以设置分享菜单的内容,他这个菜单不是popuwindow做的是一个FrameLayout里面放一个LinearLayout作为容器来装你想展示出来的内容,你可以在initPageView()方法中添加内容,并且能实现菜单样式的简单修改:
private void initPageView() {
//分享平台的LinearLayout展示在FrameLayout上
flPage = new FrameLayout(getContext());
flPage.setOnClickListener(this);
flPage.setBackgroundDrawable(new ColorDrawable(0x55000000));//0x55000000
// container of the platform gridview 装分享平台GridView的容器---LinearLayout
llPage = new LinearLayout(getContext()) {
public boolean onTouchEvent(MotionEvent event) {
return true;
}
};
llPage.setOrientation(LinearLayout.VERTICAL);
llPage.setBackgroundDrawable(new ColorDrawable(0xffffffff));//分享平台背景颜色
FrameLayout.LayoutParams lpLl = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT);
lpLl.gravity = Gravity.BOTTOM;
llPage.setLayoutParams(lpLl);
flPage.addView(llPage);
//分享到
TextView textView = new TextView(getContext());
textView.setText("分享到");
textView.setTextColor(0xff3a65ff);
int dp_tv = com.mob.tools.utils.R.dipToPx(getContext(), 20);
textView.setPadding(dp_tv,dp_tv,dp_tv,dp_tv);
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
llPage.addView(textView);
//分割线
View view = new View(getContext());
LinearLayout.LayoutParams viewPar = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, 1);
view.setLayoutParams(viewPar);
view.setBackgroundColor(Color.parseColor("#000000"));
llPage.addView(view);
// gridview 显示分享平台的GridView
grid = new PlatformGridView(getContext());
grid.setEditPageBackground(getBackgroundView());
LinearLayout.LayoutParams lpWg = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
grid.setLayoutParams(lpWg);
llPage.addView(grid);
// cancel button 取消按钮
btnCancel = new Button(getContext());
btnCancel.setTextColor(0xff3a65ff);
btnCancel.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
int resId = getStringRes(getContext(), "ssdk_oks_cancel");
if (resId > 0) {
btnCancel.setText(resId);
}
btnCancel.setPadding(0, 0, 0, com.mob.tools.utils.R.dipToPx(getContext(), 5));
//drawable下的xml文件设置button的样式
resId = getBitmapRes(getContext(), "ssdk_oks_classic_platform_corners_bg");
if(resId > 0){
btnCancel.setBackgroundResource(resId);
}else {
btnCancel.setBackgroundDrawable(new ColorDrawable(0xffffffff));
}
LinearLayout.LayoutParams lpBtn = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, com.mob.tools.utils.R.dipToPx(getContext(), 45));
int dp_10 = com.mob.tools.utils.R.dipToPx(getContext(), 10);
lpBtn.setMargins(dp_10, dp_10, dp_10, dp_10);
btnCancel.setLayoutParams(lpBtn);
llPage.addView(btnCancel);
}
6,还是上面这个包里的PlatformGridView是给GridView添加数据的,有一个方法根据屏幕的宽高比设置网格的显示数:
如果你的平台数多于每页的个数,他会自动分页的。
private void calPageSize() {
float scrW = com.mob.tools.utils.R.getScreenWidth(getContext());//得到屏幕的宽
float scrH = com.mob.tools.utils.R.getScreenHeight(getContext());//得到屏幕的高
float whR = scrW / scrH;//宽高比
if (whR < 0.63) {
COLUMN_PER_LINE = 3;//每行的个数
LINE_PER_PAGE = 2;//分享菜单每页的行数
} else if (whR < 0.75) {
COLUMN_PER_LINE = 3;
LINE_PER_PAGE = 2;
} else {
LINE_PER_PAGE = 1;
if (whR >= 1.75) {
COLUMN_PER_LINE = 6;
} else if (whR >= 1.5) {
COLUMN_PER_LINE = 5;
} else if (whR >= 1.3) {
COLUMN_PER_LINE = 4;
} else {
COLUMN_PER_LINE = 3;
}
}
PAGE_SIZE = COLUMN_PER_LINE * LINE_PER_PAGE;//每页显示的平台数
}