跳转到主要内容
PRODUCT DOCUMENTS

快速找到所需文档,高效完成接入与排障

浏览产品文档与友盟 Skill,展开目录并阅读正文。

分享设置

U-Share为开发者提供了不同种类的分享样式,分享目前支持的类型有:

分享样式支持

U-Share为开发者提供了不同种类的分享样式,分享目前支持的类型有:

  • 网页链接(网页H5链接)

  • 小程序(包括微信小程序和QQ小程序两种)

  • 图片

  • 纯文本

  • 多图(多图要包含文字描述)

  • 视频

  • 音乐

  • 表情(GIF图片,即Emotion类型,只有微信支持)

  • 图片视频混合(仅抖音)

以下是不同分享样式的具体实现代码:

分享网页链接

分享网页链接可以使用UMWeb进行分享:

UMWeb  web =newUMWeb(Defaultcontent.url);
        web.setTitle("This is music title");//标题
        web.setThumb(thumb);//缩略图
        web.setDescription("my description");//描述

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

newShareAction(ShareActivity.this)
.withMedia(web)
.share();
重要

集成U-Share能够实现从App分享H5页面到微信/QQ等平台,如想实现从微信等回流到App,统计分享带来了多少的新老用户以及自动绑定邀请关系,请集成U-Link产品,可在U-Share产品后台查看分享回流次数、分享新增用户等指标。

分享小程序

小程序类型支持分享微信小程序和QQ小程序,其中微信小程序只支持分享到微信好友。朋友圈,微信收藏暂不支持,以下是微信小程序分享代码:

UMMin umMin =newUMMin(Defaultcontent.url);
//兼容低版本的网页链接
umMin.setThumb(imagelocal);
// 小程序消息封面图片
umMin.setTitle(Defaultcontent.title);
// 小程序消息title
umMin.setDescription(Defaultcontent.text);
// 小程序消息描述
umMin.setPath("pages/page10007/xxxxxx");
//小程序页面路径
umMin.setUserName("gh_xxxxxxxxxxxx");
// 小程序原始id,在微信平台查询
newShareAction(ShareDetailActivity.this)
.withMedia(umMin)
.setPlatform(share_media)
.setCallback(shareListener).share();

以下是QQ小程序分享代码:

// QQ小程序分享样例代码,位于官方Demo工程 ShareDetailActivity.java中
publicvoid shareQQMiniApp(){
UMQQMini qqMini =newUMQQMini(Defaultcontent.url);
        qqMini.setThumb(newUMImage(this,Defaultcontent.imageurl));// 缩略图支持网络图片和本地图片
        qqMini.setTitle(Defaultcontent.title);
        qqMini.setDescription(Defaultcontent.text);
        qqMini.setMiniAppId("1110429485");
        qqMini.setPath("pages/index/index");
newShareAction(ShareDetailActivity.this)
.withMedia(qqMini)
.setPlatform(share_media)
.setCallback(shareListener).share();
}

分享图片

在使用ShareAction的时候,调用withMedia可以设置一个UMImage(图片分享),UMImage的构建有如下几种形式

UMImage image =newUMImage(ShareActivity.this,"imageurl");//网络图片
UMImage image =newUMImage(ShareActivity.this, file);//本地文件
UMImage image =newUMImage(ShareActivity.this, R.drawable.xxx);//资源文件
UMImage image =newUMImage(ShareActivity.this, bitmap);//bitmap文件
UMImage image =newUMImage(ShareActivity.this,byte[]);//字节流

推荐使用网络图片和资源文件的方式,平台兼容性更高。对于部分平台,分享的图片需要设置缩略图,缩略图的设置规则为:

UMImage thumb =newUMImage(this, R.drawable.thumb);
image.setThumb(thumb);

用户设置的图片大小最好不要超过250k,缩略图不要超过18k,如果超过太多(最好不要分享1M以上的图片,压缩效率会很低),图片会被压缩。用户可以设置压缩的方式:

image.compressStyle =UMImage.CompressStyle.SCALE;//大小压缩,默认为大小压缩,适合普通很大的图
image.compressStyle =UMImage.CompressStyle.QUALITY;//质量压缩,适合长图的分享
压缩格式设置
image.compressFormat =Bitmap.CompressFormat.PNG;//用户分享透明背景的图片可以设置这种方式,但是qq好友,微信朋友圈,不支持透明背景图片,会变成黑色

创建好UMImage之后调用分享即可,如下所示:

newShareAction(ShareActivity.this).withText("hello").withMedia(image).share();

U-Share从v7.2.2 SDK后支持调用系统分享能力实现分享图片到微信功能,详情见下文

多图分享

现在支持多图分享的平台有:新浪微博、QQ空间、抖音,新浪微博超过9张不会上传,QQ空间超过九张会上传QQ空间相册。

newShareAction(ShareDetailActivity.this).withMedias(imagelocal,imagelocal,imagelocall)
.setPlatform(share_media)
.withText("hello")
.setCallback(shareListener).share();
说明

注意上传多图需要带文字描述(WithText)

分享纯文本

纯文本分享如下:

newShareAction(ShareActivity.this).withText("hello").withMedia(image).share();

注:QQ不支持纯文本方式的分享,但QQ空间支持

分享视频

视频只能使用网络视频:

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

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

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

抖音分享单视频或者多视频,均只支持本地视频形式

分享音乐

音乐只能使用网络音乐:

UMusic music =newUMusic(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);//音乐的跳转链接

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

newShareAction(ShareActivity.this).withMedia(music).share();
说明

特别说明:播放链接是指在微信qq分享音乐,是可以在当前聊天界面播放的,要求这个musicurl(播放链接)必须要以.mp3等音乐格式结尾,跳转链接是指点击linkcard之后进行跳转的链接。

分享GIF表情

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

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

分享图片视频混合

仅抖音编辑页支持,

new ShareAction(ShareDetailActivity.this).withMedias(localVideo).withMedias(new UMImage(ShareDetailActivity.this,R.drawable.logo),new UMImage(ShareDetailActivity.this,R.drawable.datu)).withText(Defaultcontent.text)

        .setPlatform(share_media)
        .setCallback(shareListener).share();

调用系统分享能力到微信

此能力是调用系统分享能力实现的,目前仅支持微信好友、微信朋友圈

1、分享到微信好友 支持样式:纯文本、纯图片(包括本地图片和http图片)

2、分享到微信朋友圈 支持样式:纯图片(包括本地图片和http图片)、图文

文

使用说明 在调用分享接口方法前,新增调用bySystem()接口方法,示例如下:

new ShareAction(activity)
 .withText(text)
 .withMedia(image)
 .setPlatform(platform)
 .setCallback(callback)
 .bySystem()
 .share();

第三方平台分享

分享样式总览

平台

是否支持授权登录

可分享内容

获取用户信息

qq

是

图片 链接 视频 音乐

支持

qq空间

同qq

纯文本(说说) 图片(说说) 链接 视频 音乐

同qq

微信

是

纯文本 图片 链接 视频 音乐

支持

微信朋友圈

同微信

纯文本 图片 链接 视频 音乐 (分享链接不显示描述)

同微信

微信收藏

同微信

纯文本 图片 链接 视频 音乐 文件

同微信

抖音编辑页

是

单图 多图 单视频 多视频 图片视频混合

支持(如果抖音授权可以获取到手机号)

抖音发布页

是

纯视频

支持(如果抖音授权可以获取到手机号)

抖音好友

是

单图 网页链接(此功能需要在抖音开放平台申请权限)

支持(如果抖音授权可以获取到手机号)

企业微信

是

纯文本 图片 链接 本地视频 本地文件

是(仅返回userid)

新浪微博

是

纯文本 图文 图片(不支持网络图片) 链接 视频 音乐

是

支付宝

否

纯文本 图片 链接 视频 音乐

否

钉钉

否

纯文本 图片 链接 视频 音乐

否

易信聊天

否

纯文本 图片 链接 视频 音乐

否

易信朋友圈

否

纯文本 图片 链接 视频 音乐

否

短信

否

纯文本 图文 图片

否

邮件

否

纯文本 图文 图片 链接

否

印象笔记

否

纯文本 图片 图文

否

有道笔记

否

纯文本 图片 图文

否

facebook

是

图片 链接 视频

是

facebook messager

否

图片 链接 视频

否

twitter

是

纯文本 图文 图片

否

Linkedin

是

纯文本 图文 图片 链接 视频 音乐(所有图片必须是网络图片)

否

Instagram

否

图片

否

Pinterest

否

图片

否

Thumblr

否

纯文本 图片

否

line

否

纯文本 图片

否

whatsapp

否

纯文本 图片

否

flickr

否

图片

否

kakao

否

纯文本 图片 图文

否

googleplus

否

纯文本 图片 图文

否

pocket

否

链接

否

foursquare

否

图片

否

分享枚举类型总览

平台

枚举变量

QQ

SHARE_MEDIA.QQ

Qzone

SHARE_MEDIA.QZONE

微信

SHARE_MEDIA.WEIXIN

微信朋友圈

SHARE_MEDIA.WEIXIN_CIRCLE

微信收藏

SHARE_MEDIA.WEIXIN_FAVORITE

企业微信

SHARE_MEDIA.WXWORK

新浪

SHARE_MEDIA.SINA

钉钉

SHARE_MEDIA.DINGTALK

抖音编辑页

SHARE_MEDIA.BYTEDANCE

抖音发布页

SHARE_MEDIA.BYTEDANCE_PUBLISH

抖音好友/群

SHARE_MEDIA.BYTEDANCE_FRIENDS

支付宝

SHARE_MEDIA.ALIPAY

有道云笔记

SHARE_MEDIA.YNOTE

印象笔记

SHARE_MEDIA.EVERNOTE

短信

SHARE_MEDIA.SMS

电子邮件

SHARE_MEDIA.EMAIL

易信

SHARE_MEDIA.YIXIN

易信朋友圈

SHARE_MEDIA.YIXIN_CIRCLE

Facebook

SHARE_MEDIA.FACEBOOK

Facebook Message

SHARE_MEDIA.FACEBOOK_MESSAGER

Twitter

SHARE_MEDIA.TWITTER

Instagram

SHARE_MEDIA.INSTAGRAM

Pinterest

SHARE_MEDIA.PINTEREST

Pocket

SHARE_MEDIA.POCKET

领英

SHARE_MEDIA.LINKEDIN

WhatsApp

SHARE_MEDIA.WHATSAPP

LINE

SHARE_MEDIA.LINE

flickr

SHARE_MEDIA.FLICKR

tumblr

SHARE_MEDIA.TUMBLR

KAKAO

SHARE_MEDIA.KAKAO

DropBox

SHARE_MEDIA.DROPBOX

VKontake

SHARE_MEDIA.VKONTAKTE

谷歌+

SHARE_MEDIA.GOOGLEPLUS

更多

SHARE_MEDIA.MORE

说明

相关阅读:分享失败相关问题【SC10016】分享图片的大小限制是多少?【SC10018】如何实现不同分享平台分享不同的内容

分享面板使用

用户点击分享按钮时,首先会调起一个分享面板让用户选择分享平台。U-Share为开发者提供了免费的分享面板功能,开发者可以免去自己配置分享面板的步骤。当然您也可以不使用U-Share的分享面板功能,开发者可以自己写分享按钮或者触发事件,然后调用U-Share的分享方法进行分享。简而言之,直接分享就是在用户自己的界面组件中插入分享行为,分享面板是打开我们写好的一个界面组件,根据点击事件进行分享。

调用分享面板

以下是调用分享面板的方法,打开分享面板的代码如下:

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

关于分享面板的更多功能可以参照分享面板自定义。

不调用分享面板

以下是不调用分享面板的方法,分享可以通过如下代码实现:

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

其中umShareListener为回调监听,构建如下:

privateUMShareListener shareListener =newUMShareListener(){
/**
         * @descrption 分享开始的回调
         * @param platform 平台类型
         */
@Override
publicvoid onStart(SHARE_MEDIA platform){

}

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

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

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

}
};

分享按钮自定义

为分享面板添加一个自定义按钮:

newShareAction(ShareMenuActivity.this)
.setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.QZONE,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE)//分享平台
.addButton("umeng_sharebutton_custom","umeng_sharebutton_custom","info_icon_1","info_icon_1")// 自定义按钮
.setShareboardclickCallback(shareBoardlistener)//面板点击监听器
.open();

addButton:下面对addButton进行一下解释:

  • 第一个参数(umeng_sharebutton_custom)和第二个参数(umeng_sharebutton_custom)第一个参数是显示的名字,第二个参数是平台名称,用法如下:在string文件中设置:

<string name="umeng_sharebutton_custom">自定义分享按钮</string>

然后将名字umeng_sharebutton_custom当做参数传入。

  • 第三个参数(info_icon_1)和第四个参数(info_icon_1):第三个参数是按钮图标的图片名字,第四个按钮是置灰情况下按钮图标的图片名字,例如,你在drawable文件夹下有个图片叫做info_icon_1.png,想用该图片做按钮图标,可以将info_icon_1作为参数传入

分享面板回调监听

该监听器的目的是监听分享面板的点击事件:

privateShareBoardlistener shareBoardlistener =newShareBoardlistener(){

@Override
publicvoid 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{//社交平台的分享行为
newShareAction(ShareActivity.this)
.setPlatform(share_media)
.setCallback(umShareListener)
.withText("多平台分享")
.share();
}
}
};

分享面板自定义

关于分享面板,开发者可以根据喜好,对背景颜色,显示位置,字体颜色等进行配置,配置需要使用ShareBoardConfig类,ShareBoardConfig类的使用方式如下:

ShareBoardConfig config =newShareBoardConfig();//新建ShareBoardConfig

config.setShareboardPostion(ShareBoardConfig.SHAREBOARD_POSITION_CENTER);//设置位置

config.setMenuItemBackgroundShape(ShareBoardConfig.BG_SHAPE_CIRCULAR);

config.setCancelButtonVisibility(true);

shareAction.open(config);//传入分享面板中

具体配置方式如下:设置分享面板title文本内容

publicShareBoardConfig setTitleText(String title)

设置分享面板title文本颜色

publicShareBoardConfig setTitleTextColor(int color)

color的int值(不是color的资源id)设置title是否显示visibility(true为显示,false为隐藏)

publicShareBoardConfig setTitleVisibility(boolean visibility)

设置分享面板的背景颜色color背景颜色color的int值(不是color的资源id)

ShareBoardConfig setShareboardBackgroundColor(int color)

设置分享面板的位置position 位置,可选值:

ShareBoardConfig.SHAREBOARD_POSITION_CENTER(居中显示)
ShareBoardConfig.HAREBOARD_POSITION_BOTTOM(底部显示)
ShareBoardConfig setShareboardPostion(int position)

设置item文字的字体颜色**color的int值(不是color的资源id)

ShareBoardConfig setMenuItemTextColor(int color)

设置item图标按下效果颜色color的int值(不是color的资源id)

ShareBoardConfig setMenuItemIconPressedColor(int color)

设置item背景颜色normalColor背景色color的int值(不是color的资源id)

publicShareBoardConfig setMenuItemBackgroundColor(int normalColor)

设置item背景颜色normalColor背景色pressedColor按下时色值color的int值(不是color的资源id)

publicShareBoardConfig setMenuItemBackgroundColor(int normalColor,int pressedColor)

设置item背景形状shape 背景形状的type,可选值:

  • ShareBoardConfig.BG_SHAPE_NONE(无背景)

  • ShareBoardConfig.BG_SHAPE_CIRCULAR(圆形)

  • ShareBoardConfig.BG_SHAPE_ROUNDED_SQUARE(圆角方形)

publicShareBoardConfig setMenuItemBackgroundShape(int shape)

设置item背景形状shape 背景形状的type,可选值:

  • ShareBoardConfig.BG_SHAPE_NONE(无背景)

  • ShareBoardConfig.BG_SHAPE_CIRCULAR(圆形)

  • ShareBoardConfig.BG_SHAPE_ROUNDED_SQUARE(圆角方形)

angle 圆角角度

ShareBoardConfig setMenuItemBackgroundShape(int shape,int angle)

设置指示器的颜色normalColor未选中的指示器颜色selectedColor当前页面指示器的颜色color的int值(不是color的资源id)

ShareBoardConfig setIndicatorColor(int normalColor,int selectedColor)

设置指示器的显示状态

ShareBoardConfig setIndicatorVisibility(boolean visibility)

设置取消按钮的背景色normalColor背景色color的int值(不是color的资源id)

ShareBoardConfig setCancelButtonBackground(int normalColor)

设置取消按钮的背景色normalColor背景色pressedColor按下时色值color的int值(不是color的资源id)

ShareBoardConfig setCancelButtonBackground(int normalColor,int pressedColor)

设置取消按钮文本内容

ShareBoardConfig setCancelButtonText(String text)

设置取消按钮文本字体颜色color字体颜色color的int值(不是color的资源id)

ShareBoardConfig setCancelButtonTextColor(int color)

设置取消按钮是否显示visibility(true为显示,false为隐藏)

ShareBoardConfig setCancelButtonVisibility(boolean visibility)

设置分享面板消失监听分享面板的关闭监听可以通过这种方式设定:

config.setOnDismissListener(newPopupWindow.OnDismissListener(){
@Override
publicvoid onDismiss(){

}
});

分享编辑页自定义

分享编辑页只能在twitter,领英中使用,该编辑页的自定义只支持umeng_socialize_share.xml中的配置,具体组件对应如下:

内存泄漏解决方案

在使用分享或者授权的Activity中,重写onDestory()方法:

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

水印开启

在6.2之后的版本之后,开发者可以调用我们的方法添加水印。需要注意的是,控制添加水印图片的大小,防止OOM首先使用水印功能,需要额外的umeng_social_tool.jar,不使用水印功能,可以不用添加。然后调用方法,进行添加:

UMImageMark umImageMark =newUMImageMark();
umImageMark.setGravity(Gravity.BOTTOM |Gravity.RIGHT);
umImageMark.setMarkBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.umeng_socialize_twitter));
umImageMark.setAlpha(xxxx)//设置透明度
umImageMark.setMargins(left,top,right,bottom)//设置边距

然后将构建好的umImageMark放入要分享的UMImage中即可:

imagelocal =newUMImage(this,R.drawable.logo,umImageMark);

需要注意的是本地文件和网络链接的图片形式,不支持添加水印。

智能分享功能

为了提升用户分享链路体验,友盟+为您提供了智能分享功能,避免分享/授权面板出现未安装的应用,以及相关的分享指标反作弊分析,您可以选择打开或者关闭此功能 打开接口:

UMShareAPI.setSmartEnable(true)

关闭接口:

UMShareAPI.setSmartEnable(false);

关闭接口说明

如希望关闭设备ID采集,请参照以下方式

// IMSI采集开关接口
// 参数flag: true-允许采集IMSI;false-不允许采集IMSI
public static void enableImsiCollection(boolean flag);

// ICCID采集开关接口
// 参数flag: true-允许采集ICCID;false-不允许采集ICCID
public static void enableIccidCollection(boolean flag);

// IMEI采集开关接口
// 参数flag: true-允许采集IMEI;false-不允许采集IMEI
public static void enableImeiCollection(boolean flag);