umeng(友盟)实现第三方登录和分享详解之分享

一、介绍

在上文中umeng(友盟)实现第三方登录和分享详解之登录详解 已经很详细详尽的讲解了umeng分享和登录的配置,还有登录的具体操作。

因为篇幅太长,所以分享想另外写一篇。

umeng分享和登录配置相同,所以不再赘述上述的配置,

大概流程如下:

1、各大平台申请appkey

2、copy你所需要的平台的jar包和资源文件(图片布局等)。

3、Android Manifest XML中配置权限和申明各个平台所需activity,umeng的appkey也要配置。

4、建一个application作为程序入口,在里面配置申请到的appkey,例如PlatformConfig.setQQZone(“100424468”, “c7394704798a158208a74ab60104f0ba”);

5、在umeng后台配置你申请到的appkey。

6、在application的oncreate里面进行umeng初始化,UMShareAPI.get(this);

二、分享实现

分享分为有分享面板和无分享面板的。

1、这是基础的形式,具体的根据分享内容不同而不同

有分享面板的

new ShareAction(MainActivity.this)
    .withText("hello")                    
    .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN)
    .setCallback(umShareListener)
    .open();

无分享面板的

new ShareAction(MainActivity.this)
.setPlatform(SHARE_MEDIA.QQ)//传入平台
.withText("hello")//分享内容
.setCallback(umShareListener)//回调监听器
.share();

都是实例化的new ShareAction ,这个操作在你点击分享按钮的监听事件中实现。

withText(“”)是你分享的内容

setCallback是回调的监听

讲一下区别,无分享面板的,就直接.setPlatform(SHARE_MEDIA.QQ),直接传入相对应平台就可以调用。
有分享面板的,需要在setDisplayList中具体枚举所有的(按照顺序)分享平台。

2、具体实现分享内容

1)纯文本分享

new ShareAction(ShareActivity.this)
.withText("hello")
.share();

.withText(“hello”)里面填写你要分享的内容就好了

2)图片分享

    private UMImage imageurl,imagelocal; 图片推荐资源图片和网络图片

     imageurl = new UMImage(this,图片url);
     imageurl.setThumb(new UMImage(this, R.drawable.thumb));
       // imagelocal = new UMImage(this,R.drawable.logo,umImageMark);
     imagelocal = new UMImage(this,R.drawable.logo);
     imagelocal.setThumb(new UMImage(this, R.drawable.thumb));
 new ShareAction(ShareDetailActivity.this).withMedia(imagelocal )
                            .setPlatform(share_media)
                            .setCallback(shareListener).share();

如果是本地图片就用withMedia(imagelocal ),网络图片withMedia(imageurl )

一般会设置缩略图

 UMImage thumb =  new UMImage(this, R.drawable.thumb);
 imagelocal .setThumb(thumb);

ps:设置图片位置

 UMImageMark umImageMark = new UMImageMark();
        umImageMark.setGravity(Gravity.BOTTOM | Gravity.RIGHT);
        umImageMark.setMarkBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.umsocial_defaultwatermark));
``


当然图片资源还有

UMImage image = new UMImage(ShareActivity.this, "imageurl");//网络图片
UMImage image = new UMImage(ShareActivity.this, file);//本地文件
UMImage image = new UMImage(ShareActivity.this, R.drawable.xxx);//资源文件
UMImage image = new UMImage(ShareActivity.this, bitmap);//bitmap文件
UMImage image = new UMImage(ShareActivity.this, byte[]);//字节流
   new ShareAction(ShareDetailActivity.this).withText(Defaultcontent.text)
                            .withMedia(imagelocal)
                            .setPlatform(share_media)
                            .setCallback(shareListener).share();

4)图文加链接

UMWeb  web = new UMWeb(Defaultcontent.url);
        web.setTitle("This is music title");//标题
        web.setThumb(thumb);  //缩略图,可以本地图片,也可以网络图片
        web.setDescription("my description");//描述

然后调用将这个参数设置到ShareAction中:

new ShareAction(ShareActivity.this)
    .withMedia(web)
    .share();

5)视频分享

视频只能使用网络视频:

UMVideo video = new UMVideo(videourl);
video.setTitle("This is music title");//视频的标题
video.setThumb("http://www.umeng.com/images/pic/social/chart_1.png");//视频的缩略图
video.setDescription("my description");//视频的描述

建立好之后可以进行分享:

new ShareAction(ShareActivity.this).withText("hello").withMedia(video).share(); 

6)音乐分享

音乐只能使用网络音乐:

UMusic music = new UMusic(musicurl);//音乐的播放链接
music.setTitle("This is music title");//音乐的标题
music.setThumb("http://www.umeng.com/images/pic/social/chart_1.png");//音乐的缩略图
music.setDescription("my description");//音乐的描述
music.setmTargetUrl(Defaultcontent.url);//音乐的跳转链接

建立好之后可以进行分享:

new ShareAction(ShareActivity.this)
    .withMedia(music)
    .share();     

7)gif

目前只有微信好友分享支持Emoji表情,其他平台暂不支持

UMEmoji emoji = new UMEmoji(this,"http://img5.imgtn.bdimg.com/it/u=2749190246,3857616763&fm=21&gp=0.jpg");
emoji.setThumb(new UMImage(this, R.drawable.thumb));
new ShareAction(ShareActivity.this)
    .withMedia(emoji)
    .share(); 

8)微信小程序

目前只有微信好友支持小程序分享,朋友圈,收藏及其他平台暂不支持:

UMMin umMin = new UMMin(Defaultcontent.url);
umMin.setThumb(imagelocal);
umMin.setTitle(Defaultcontent.title);
umMin.setDescription(Defaultcontent.text);
umMin.setPath("pages/page10007/xxxxxx");
umMin.setUserName("xx_xxx");
new ShareAction(ShareDetailActivity.this)
    .withMedia(umMin)
    .setPlatform(share_media)
    .setCallback(shareListener)
    .share();

emoji = new UMEmoji(this,”http://img5.imgtn.bdimg.com/it/u=2749190246,3857616763&fm=21&gp=0.jpg“);
emoji.setThumb(new UMImage(this, R.drawable.thumb));

9)分享文件

  new ShareAction(ShareDetailActivity.this)
                            .withFile(file)
                            .withText(Defaultcontent.text)
                            .withSubject(Defaultcontent.title)
                            .setPlatform(share_media)
                            .setCallback(shareListener).share();

 file = new File(this.getFilesDir()+"test.txt");
        if (!file.exists()){
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (SocializeUtils.File2byte(file).length<=0){
            String content = "U-share分享";
            byte[] contentInBytes = content.getBytes();
            try {
                FileOutputStream fop = new FileOutputStream(file);
                fop.write(contentInBytes);
                fop.flush();
                fop.close();

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

10)有面板的自定义面板

    /*增加自定义按钮的分享面板*/
 mShareAction = new ShareAction(ShareMenuActivity.this).setDisplayList(
                SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.WEIXIN_FAVORITE,
                SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE,
                SHARE_MEDIA.ALIPAY, SHARE_MEDIA.RENREN, SHARE_MEDIA.DOUBAN,
                SHARE_MEDIA.SMS, SHARE_MEDIA.EMAIL, SHARE_MEDIA.YNOTE,
                SHARE_MEDIA.EVERNOTE, SHARE_MEDIA.LAIWANG, SHARE_MEDIA.LAIWANG_DYNAMIC,
                SHARE_MEDIA.LINKEDIN, SHARE_MEDIA.YIXIN, SHARE_MEDIA.YIXIN_CIRCLE,
                SHARE_MEDIA.TENCENT, SHARE_MEDIA.FACEBOOK, SHARE_MEDIA.TWITTER,
                SHARE_MEDIA.WHATSAPP, SHARE_MEDIA.GOOGLEPLUS, SHARE_MEDIA.LINE,
                SHARE_MEDIA.INSTAGRAM, SHARE_MEDIA.KAKAO, SHARE_MEDIA.PINTEREST,
                SHARE_MEDIA.POCKET, SHARE_MEDIA.TUMBLR, SHARE_MEDIA.FLICKR,
                SHARE_MEDIA.FOURSQUARE, SHARE_MEDIA.MORE)
                .addButton("umeng_sharebutton_copy", "umeng_sharebutton_copy", "umeng_socialize_copy", "umeng_socialize_copy")
                .addButton("umeng_sharebutton_copyurl", "umeng_sharebutton_copyurl", "umeng_socialize_copyurl", "umeng_socialize_copyurl")
                .setShareboardclickCallback(new ShareBoardlistener() {
                    @Override
                    public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
                        if (snsPlatform.mShowWord.equals("umeng_sharebutton_copy")) {
                            Toast.makeText(ShareMenuActivity.this, "复制文本按钮", Toast.LENGTH_LONG).show();
                        } else if (snsPlatform.mShowWord.equals("umeng_sharebutton_copyurl")) {
                            Toast.makeText(ShareMenuActivity.this, "复制链接按钮", Toast.LENGTH_LONG).show();

                        }else if(share_media == SHARE_MEDIA.SMS) {
                            new ShareAction(ShareMenuActivity.this).withText("来自分享面板标题")
                                .setPlatform(share_media)
                                .setCallback(mShareListener)
                                .share();
                        }else
                         {
                            UMWeb web = new UMWeb(Defaultcontent.url);
                            web.setTitle("来自分享面板标题");
                            web.setDescription("来自分享面板内容");
                            web.setThumb(new UMImage(ShareMenuActivity.this, R.drawable.logo));
                            new ShareAction(ShareMenuActivity.this).withMedia(web)
                                    .setPlatform(share_media)
                                    .setCallback(mShareListener)
                                    .share();
                        }
                    }
                });

分享面板监听

private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {

@Override
public void onclick(SnsPlatform snsPlatform,SHARE_MEDIA share_media) {
    if (share_media==null){
    //根据key来区分自定义按钮的类型,并进行对应的操作
        if (snsPlatform.mKeyword.equals("umeng_sharebutton_custom")){
            Toast.makeText(ShareActivity.this,"add button                                       success",Toast.LENGTH_LONG).show();
        }

    }
    else {//社交平台的分享行为
        new ShareAction(ShareActivity.this)
        .setPlatform(share_media)
        .setCallback(umShareListener)
        .withText("多平台分享")
        .share();
    }
}

};

3、分享都需要回调和监听

 private UMShareListener shareListener = new UMShareListener() {
        /**
         * @descrption 分享开始的回调
         * @param platform 平台类型
         */
        @Override
        public void onStart(SHARE_MEDIA platform) {

        }

        /**
         * @descrption 分享成功的回调
         * @param platform 平台类型
         */
        @Override
        public void onResult(SHARE_MEDIA platform) {
            Toast.makeText(ShareDetailActivity.this,"成功了",Toast.LENGTH_LONG).show();
        }

        /**
         * @descrption 分享失败的回调
         * @param platform 平台类型
         * @param t 错误原因
         */
        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            Toast.makeText(ShareDetailActivity.this,"失败"+t.getMessage(),Toast.LENGTH_LONG).show();
        }

        /**
         * @descrption 分享取消的回调
         * @param platform 平台类型
         */
        @Override
        public void onCancel(SHARE_MEDIA platform) {
            Toast.makeText(ShareDetailActivity.this,"取消了",Toast.LENGTH_LONG).show();

        }
    };

还需要在分享的activity加入

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode,resultCode,data);
    }

为了防止内存泄漏,我们通常要:

@Override
protected void onDestroy() {
    super.onDestroy();
    UMShareAPI.get(this).release();
}

三、后记

大概就是这些了,写完之后发现自己写的也很烂。还有很多高级功能没写,不过时间有限,大家见谅吧。不清楚的地方大家一起交流,互相学习,哈哈。

umeng(友盟)实现第三方登录和分享详解之登录详解

你可能感兴趣的