shareSDK使用心得

本人集成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;//每页显示的平台数
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值