分享设置
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 |
微信 | 是 | 纯文本 图片 链接 视频 音乐 | 支持 |
微信朋友圈 | 同微信 | 纯文本 图片 链接 视频 音乐 (分享链接不显示描述) | 同微信 |
微信收藏 | 同微信 | 纯文本 图片 链接 视频 音乐 文件 | 同微信 |
抖音编辑页 | 是 | 单图 多图 单视频 多视频 图片视频混合 | 支持(如果抖音授权可以获取到手机号) |
抖音发布页 | 是 | 纯视频 | 支持(如果抖音授权可以获取到手机号) |
抖音好友 | 是 | 单图 网页链接(此功能需要在抖音开放平台申请权限) | 支持(如果抖音授权可以获取到手机号) |
企业微信 | 是 | 纯文本 图片 链接 本地视频 本地文件 | 是(仅返回userid) |
新浪微博 | 是 | 纯文本 图文 图片(不支持网络图片) 链接 视频 音乐 | 是 |
支付宝 | 否 | 纯文本 图片 链接 视频 音乐 | 否 |
钉钉 | 否 | 纯文本 图片 链接 视频 音乐 | 否 |
易信聊天 | 否 | 纯文本 图片 链接 视频 音乐 | 否 |
易信朋友圈 | 否 | 纯文本 图片 链接 视频 音乐 | 否 |
短信 | 否 | 纯文本 图文 图片 | 否 |
邮件 | 否 | 纯文本 图文 图片 链接 | 否 |
印象笔记 | 否 | 纯文本 图片 图文 | 否 |
有道笔记 | 否 | 纯文本 图片 图文 | 否 |
是 | 图片 链接 视频 | 是 | |
facebook messager | 否 | 图片 链接 视频 | 否 |
是 | 纯文本 图文 图片 | 否 | |
是 | 纯文本 图文 图片 链接 视频 音乐(所有图片必须是网络图片) | 否 | |
否 | 图片 | 否 | |
否 | 图片 | 否 | |
Thumblr | 否 | 纯文本 图片 | 否 |
line | 否 | 纯文本 图片 | 否 |
否 | 纯文本 图片 | 否 | |
flickr | 否 | 图片 | 否 |
kakao | 否 | 纯文本 图片 图文 | 否 |
googleplus | 否 | 纯文本 图片 图文 | 否 |
否 | 链接 | 否 | |
foursquare | 否 | 图片 | 否 |
分享枚举类型总览
平台 | 枚举变量 |
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 |
SHARE_MEDIA.FACEBOOK | |
Facebook Message | SHARE_MEDIA.FACEBOOK_MESSAGER |
SHARE_MEDIA.TWITTER | |
SHARE_MEDIA.INSTAGRAM | |
SHARE_MEDIA.PINTEREST | |
SHARE_MEDIA.POCKET | |
领英 | SHARE_MEDIA.LINKEDIN |
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);