Android-友盟社会化分享库&自定义分享

友盟的分享,每次都单独配置,有点麻烦,整了个库

Android的分享功能友盟用的蛮多的,一般情况下自带的分享面板就满足需求了,但是也有一些情况下需要在自己的项目里点击按钮直接跳转分享,所以自带的就不太给力了。这里记录一下项目里自定义分享功能,官方文档里也说明了需要怎么处理,但是对于刚接触的人来说可能就不是那么明了了。这里记录一下下,看看文档,然后开搞!

 注:由于腾讯开放平台增加包名、签名校验,因此使用QQ、Qzone的分享、授权功能的开发者
    必须使用自己在腾讯开放平台申请获取的QQ APPID,否则将无法正常使用。

一、配置 由于我把整个分享部分弄成依赖库了,所以除开QQ微信必须的东西,只需要依赖就行了

  • 1.注册下载SDK,准备QQ微信的ID啊什么的。
  • 2.配置SDK。

在项目的build.gradle加入代码

allprojects {
      repositories {
         ...
         maven { url "https://jitpack.io" }
      }
   }

在module的build.gradle加入

   dependencies {
           compile 'com.github.paradoxie:UmengSocialLibrary:0.2'//0.2版本V7版本为23.3.0
            //正在用22的朋友依赖0.3版本,v7为22.0.+,源码里面是新开了一个分支
   }
  • 3.配置manifest.xml的权限和必要的activity

这样就能调用到友盟的方法了

二、友盟集成的分享

添加友盟分享Controller成员变量

private final UMSocialService mSocialService =
UMServiceFactory.getUMSocialService("com.umeng.share");

在唤起分享的点击事件中加入:

mSocialService.setShareContent("分享内容");
mSocialService.setShareMedia(new UMImage(SettingActivity.this, 图标));
mSocialService.getConfig().removePlatform(SHARE_MEDIA.SINA, SHARE_MEDIA.TENCENT);

// 添加微信平台

UMWXHandler wxHandler = new UMWXHandler(SettingActivity.this, appId, appSecret);
wxHandler.addToSocialSDK();
wxHandler.setTitle(getString(R.string.app_name));
wxHandler.setTargetUrl(getString(R.string.sms_spread_url));

// 添加微信朋友圈

UMWXHandler wxCircleHandler = new UMWXHandler(SettingActivity.this, appId, appSecret);
wxCircleHandler.setToCircle(true);
wxCircleHandler.addToSocialSDK();
wxCircleHandler.setTitle(getString(R.string.app_name));
    wxCircleHandler.setTargetUrl(getString(R.string.sms_spread_url));

//参数1为当前Activity,参数2为开发者在QQ互联申请的APP ID,参数3为开发者在QQ互联申请的APP kEY

UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(SettingActivity.this, "APP ID", "APP KEY");
qqSsoHandler.addToSocialSDK();
qqSsoHandler.setTitle(getString(R.string.app_name));
qqSsoHandler.setTargetUrl(getString(R.string.sms_spread_url));

//参数1为当前Activity,参数2为开发者在QQ互联申请的APP ID,参数3为开发者在QQ互联申请的APP kEY.

QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(SettingActivity.this, "APP ID","APP KEY");
qZoneSsoHandler.addToSocialSDK();
qZoneSsoHandler.setTargetUrl(getString(R.string.sms_spread_url)); 

最后

 mSocialService.openShare(SettingActivity.this, false);

三、自定义分享面板

首先看官方文档的做法

new ShareAction(this)
.setPlatform(SHARE_MEDIA.SINA)
.setCallback(umShareListener)
.withText("hello umeng video")
.withTargetUrl("http://www.baidu.com")
.withMedia(image).share();

传入了umShareListener,需要重写回调接口:

new UMShareListener() { 
    @Override 
    public void onResult(SHARE_MEDIA platform) {  
           Toast.makeText(ShareActivity.this,platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
     } 

    @Override
    public void onError(SHARE_MEDIA platform, Throwable t) { 
           Toast.makeText(ShareActivity.this,platform + " 分享失败啦", Toast.LENGTH_SHOR T).show(); 
    } 
    @Override 
    public void onCancel(SHARE_MEDIA platform) { 
            Toast.makeText(ShareActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show(); 
    } 
  };

讲真,第一次看有点蒙逼。。。

*假装有条分割线。。。。。。。。

开始搞自己的:

首先,自己的面板也就是没有面板。。。也就是随便来个按钮都能唤起分享,所以需要来个方法响应点击事件。在此之前,需要将支持的平台初始化加入到SocialSDK,初始化控件之前:

private void prepareShare(){
    // 添加微信平台
    UMWXHandler wxHandler = new UMWXHandler(this, Common.APP_ID, Common.APP_SECRET);
    wxHandler.addToSocialSDK();
    // 支持微信朋友圈
    UMWXHandler wxCircleHandler = new UMWXHandler(this, Common.APP_ID, Common.APP_SECRET);
    wxCircleHandler.setToCircle(true);
    wxCircleHandler.addToSocialSDK();
    //支持QQ
    UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(this, "APP ID","APP KEY");
    qqSsoHandler.addToSocialSDK();
    //QQ空间分享
    QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(this, "APP ID","APP KEY");
    qZoneSsoHandler.addToSocialSDK();
    //新浪微博不用这么干
    //SinaSsoHandler sinaSsoHandler = new SinaSsoHandler(this);
    //sinaSsoHandler.addToSocialSDK();
}

类成员变量mController:

    private final UMSocialService mController =             
    UMServiceFactory.getUMSocialService("com.umeng.share", RequestType.SOCIAL);

然后仿造官方的开始封装自定义分享方法,回调监听,抽象出了很多参数,这样在点击事件中可以直接传值。

    /** 
    * 友盟社会化分享自定义 *
    * @param context     上下文
    * @param mController 分享服务 
    * @param var         平台类型 
    * @param content     平台 
    */
    public static void shareToFriend(Context context, final UMSocialService mController, SHARE_MEDIA var, BaseShareContent content) {    
    //        WeiXinShareContent weixinContent = new WeiXinShareContent();    
            //设置分享文字    
            content.setShareContent("内容");    
            //设置title    
            content.setTitle("标题");    
            //设置分享内容跳转URL
            content.setTargetUrl("WWW.BAIDU.COM" );    
            //设置分享图片    
            UMImage img = new UMImage(context, R.drawable.ic_launcher);    
            content.setShareImage(img);
            mController.setShareMedia(content);    
            setShareBtn(context, mController, var);
    }

    /** 
    * 设置自定义监听 * 
    * @param context     上下文 
    * @param mController 分享服务 
    * @param var         平开类型 
    */
    private static void setShareBtn(final Context context, final UMSocialService mController, SHARE_MEDIA var) {  
    mController.postShare(context, var, new SocializeListeners.SnsPostListener() {
            @Override                
            public void onStart() {                
              }               
         @Override                
            public void onComplete(SHARE_MEDIA arg0, int eCode,SocializeEntity arg2) {
                if (eCode == 200) {
                } else {
                    String eMsg = "";
                    if (eCode == -101) {
                        eMsg = "没有授权";
                    }
                } 
           }
        });

}

比如上面的SHARE_MEDIA参数,即可传入SHARE_MEDIA.WEIXIN,微博QQ类推。
而最后的参数为BaseShareContent类型,实际传参是new出平台对象就可以了,如:new QZoneShareContent()作为参数传入方法。

封装后的点击事件

    //新浪微博
    shareToFriend(this, mController, SHARE_MEDIA.SINA, new SinaShareContent());
    //QQ空间
    shareToFriend(this, mController, SHARE_MEDIA.QZONE, new QZoneShareContent());
    //QQ
    shareToFriend(this, mController, SHARE_MEDIA.QQ, new QQShareContent());
    //微信
    shareToFriend(this, mController, SHARE_MEDIA.WEIXIN, new WeiXinShareContent());
    //微信朋友圈
    shareToFriend(this, mController, SHARE_MEDIA.WEIXIN_CIRCLE, new CircleShareContent());

到这里就OK啦(__)

更加直观系统的使用参看项目内Demo


本文作者:paradoxie
个人主页:谢盒盒的小黑屋,不止说技术
简书地址:简书主页,专注说技术
github地址:paradoxie
转载请注明出处,蟹蟹!
-------我的梦想真的是做一条咸鱼!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容