Ument_Share集成

U-Share集成



适用范围
该文档适用于Android组件化分享SDK6.9.0及以上版本。

更新说明
如果您想进行SDK升级操作,请根据如下情况选择合适的升级方式

如果您使用的是6.3之前的版本,建议根据集成文档重新进行集成。
如果您使用的是6.3之后的版本,只需要根据限免的升级建议,将6.3以后的变动合并到您的代码中即可。例如您的当前版本是6.4.5,那么请参照6.4.5更新至最新版的更新说明进行更新。
6.4.5接口变动
新浪不再需要WBShareActivity,只需在AndroidManifest中配置:

 <activityandroid:name="com.umeng.socialize.media.WBShareCallBackActivity"android:configChanges="keyboardHidden|orientation"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:launchMode="singleTask"android:exported="false"android:screenOrientation="portrait" ></activity><activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"android:configChanges="keyboardHidden|orientation"android:exported="false"android:windowSoftInputMode="adjustResize"></activity><activityandroid:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"android:launchMode="singleTask"android:name="com.sina.weibo.sdk.share.WbShareTransActivity"><intent-filter><action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>

6.5Jar更新
使用6.5.0的用户需要替换所有jar,同时增加一个新的jar:umeng-common-vx.x.x.jar,这是一个Common包,使用友盟push或统计都会有这个包,保留一个即可。

6.7.0更新
微信配置不再区分精简版或完整版,统一使用com.umeng.socialize.weixin.view.WXCallbackActivityQQ配置不再区分精简版或完整版,AndroidManifest统一配置

 <activityandroid:name="com.tencent.tauth.AuthActivity"android:launchMode="singleTask"android:noHistory="true" ><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="tencent100424468" /></intent-filter></activity><activityandroid:name="com.tencent.connect.common.AssistActivity"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:configChanges="orientation|keyboardHidden|screenSize"/>

6.8.0更新
新浪配置统一修改为:

 <activityandroid:name="com.umeng.socialize.media.WBShareCallBackActivity"android:configChanges="keyboardHidden|orientation"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:exported="false"android:screenOrientation="portrait" ></activity><activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"android:configChanges="keyboardHidden|orientation"android:exported="false"android:windowSoftInputMode="adjustResize"></activity><activityandroid:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"android:launchMode="singleTask"android:name="com.sina.weibo.sdk.share.WbShareTransActivity"><intent-filter><action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>

同时去掉原有的WBShareActivity.java

6.9.0更新
jar包名称修改由以前的SocialSDK_xxx.jar统一改为umeng-share-xxx.jar

QQ兼顾Android 8.0,将配置修改为:

 <activityandroid:name="com.tencent.tauth.AuthActivity"android:launchMode="singleTask"android:noHistory="true" ><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="tencent100424468" /></intent-filter></activity><activityandroid:name="com.tencent.connect.common.AssistActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:configChanges="orientation|keyboardHidden|screenSize"/>

微信兼顾8.0:

<activityandroid:name=".wxapi.WXEntryActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:theme="@android:style/Theme.Translucent.NoTitleBar" />

集成准备
获取Appkey
集成【友盟+】SDK之前,您首先需要到 【友盟+】官网注册并且添加新应用,获得Appkey。

特别提醒 :我们建议开发者在注册账号时使用企业邮箱,避免使用个人邮箱注册,防止由于个人离职带来的问题,建议使用的账号形式:umeng@企业域名、apps@企业域名、dev@企业域名。

center

常见问题FAQ
Q :应用的安卓版和iOS版能否共用一个appkey

A :不同平台的应用禁止使用相同的Appkey,需要分开注册。

Q :注册应用时,提示应用名称已存在;

A :【友盟+】后台的应用名与实际应用名和包名无关,建议命名为应用名+平台(iOS/Android)。

快速集成
快速集成包含自动集成与手动集成两种方式,开发者可以根据自身情况选择一种集成方式即可

手动集成
如果使用了自动集成的开发者,不用再进行手动集成的配置,请跳到权限添加

获取SDK
下载SDK操作流程

下载内容

导入jar和res
将main文件夹以及platform(选择你想使用的平台即可)文件下,对应的资源文件和jar放入你的工程

image | center

添加回调Activity

微信
在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。

image | center

支付宝

与微信相似,支付宝需要在包名目录下创建apshare文件夹,然后建立一个ShareEntryActivity的类,继承ShareCallbackActivity。

钉钉

与微信相似,钉钉需要在包名目录下创建ddshare文件夹,然后建立一个DDShareActivity的类,DingCallBack。

QQ与新浪

QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的Activity中,添加:

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

注意onActivityResult不可在fragment中实现,如果在fragment中调用登录或分享,需要在fragment依赖的Activity中实现

配置Android Manifest XML
sdk中需要的Activity
新浪:

  <activityandroid:name="com.umeng.socialize.media.WBShareCallBackActivity"android:configChanges="keyboardHidden|orientation"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:exported="false"></activity><activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"android:configChanges="keyboardHidden|orientation"android:exported="false"android:windowSoftInputMode="adjustResize"></activity><activityandroid:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"android:launchMode="singleTask"android:name="com.sina.weibo.sdk.share.WbShareTransActivity"><intent-filter><action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>

微信:

 <activityandroid:name=".wxapi.WXEntryActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:theme="@android:style/Theme.Translucent.NoTitleBar" />

支付宝:

钉钉:

  <activityandroid:name=".ddshare.DingCallBack"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar" />

qq(请注意将我们的qq appkey替换成您自己的qq appkey):

 <activityandroid:name="com.tencent.tauth.AuthActivity"android:launchMode="singleTask"android:noHistory="true" ><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="tencent100424468" /></intent-filter></activity><activityandroid:name="com.tencent.connect.common.AssistActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:configChanges="orientation|keyboardHidden|screenSize"/>

分享编辑页(只有豆瓣,人人,腾讯微博,领英,twitter需要):

<activityandroid:name="com.umeng.socialize.editorpage.ShareActivity"android:theme="@android:style/Theme.NoTitleBar"android:excludeFromRecents="true"/>

其他平台的配置请参照附录其他平台配置。

权限添加
请在AndroidManifest中添加如下权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

如果需要使用QQ纯图分享或避免其它平台纯图分享的时候图片不被压缩,可以增加以下权限:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

Android6.0权限适配
请查看你的build.gradle文件,如果 targetSdkVersion小于或等于22,可以忽略这一步,如果大于或等于23,需要做权限的动态申请:

if(Build.VERSION.SDK_INT>=23){String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS};ActivityCompat.requestPermissions(this,mPermissionList,123);}

其中123是requestcode,可以根据这个code判断,用户是否同意了授权。如果没有同意,可以根据回调进行相应处理:

@Override
public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
}

初始化设置
初始化需要在您的Application中调用我们的初始化接口:

@Overridepublic void onCreate() {super.onCreate();UMConfigure.init(this,"5a12384aa40fa3551f0001d1","umeng",UMConfigure.DEVICE_TYPE_PHONE,"");//58edcfeb310c93091c000be2 5965ee00734be40b580001a0}

更多了解初始化接口可以参照文档接下来需要设置各个平台的appkey:

  PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");//豆瓣RENREN平台目前只能在服务器端配置PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");PlatformConfig.setAlipay("2015111700822536");PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");PlatformConfig.setPinterest("1439206");PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");PlatformConfig.setDing("dingoalmlnohc0wggfedpk");PlatformConfig.setVKontakte("5764965","5My6SNliAaLxEm3Lyd9J");PlatformConfig.setDropbox("oz8v5apet3arcdy","h7p2pjbzkkxt02a");PlatformConfig.setYnote("9c82bf470cba7bd2f1819b0ee26f86c6ce670e9b");

该设置需要在Application中进行设置。

签名配置
签名的概念将文件夹中的签名文件放入到工程中,例如我的签名文件是debug.keystore

image | center

然后增加签名文件的密码:

signingConfigs {debug {storeFile file('debug.keystore')storePassword "android"keyAlias "androiddebugkey"keyPassword "android"}
}

然后在buildTypes中将这个signingConfigs配置进去,如下图所示:

image | center

签名文件如果不加,部分平台的授权会受到影响。

使用分包功能的注意事项
部分用户可能会由于方法数限制问题使用了multiDexEnabled true对于这部分用户,需要正确配置application否则可能会出现NoClassDefFoundError具体配置可以参照MultiDex教学

混淆设置

-dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-dontwarn com.facebook.**
-keep public class javax.**
-keep public class android.webkit.**
-dontwarn android.support.v4.**
-keep enum com.facebook.**
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public interface com.facebook.**
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**
-keep public class com.umeng.socialize.* {*;}
-keep class com.facebook.**
-keep class com.facebook.** { *; }
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**
-keep class com.umeng.socialize.handler.**
-keep class com.umeng.socialize.handler.*
-keep class com.umeng.weixin.handler.**
-keep class com.umeng.weixin.handler.*
-keep class com.umeng.qq.handler.**
-keep class com.umeng.qq.handler.*
-keep class UMMoreHandler{*;}
-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}
-keep class im.yixin.sdk.api.YXMessage {*;}
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
-keep class com.tencent.mm.sdk.** {*;
}
-keep class com.tencent.mm.opensdk.** {*;
}
-keep class com.tencent.wxop.** {*;
}
-keep class com.tencent.mm.sdk.** {*;
}
-keep class com.twitter.** { *; }
-keep class com.tencent.** {*;}
-dontwarn com.tencent.**
-keep class com.kakao.** {*;}
-dontwarn com.kakao.**
-keep public class com.umeng.com.umeng.soexample.R$*{public static final int *;
}
-keep public class com.linkedin.android.mobilesdk.R$*{public static final int *;
}
-keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String);
}
-keep class com.tencent.open.TDialog$*
-keep class com.tencent.open.TDialog$* {*;}
-keep class com.tencent.open.PKDialog
-keep class com.tencent.open.PKDialog {*;}
-keep class com.tencent.open.PKDialog$*
-keep class com.tencent.open.PKDialog$* {*;}
-keep class com.umeng.socialize.impl.ImageImpl {*;}
-keep class com.sina.** {*;}
-dontwarn com.sina.**
-keep class  com.alipay.share.sdk.** {*;
}
-keepnames class * implements android.os.Parcelable {public static final ** CREATOR;
}
-keep class com.linkedin.** { *; }
-keep class com.android.dingtalk.share.ddsharemodule.** { *; }
-keepattributes Signature

U-Share基础功能
分享
友盟分享分为两种形式:

使用分享面板的分享,用户可以调用我们的打开分享面板的方法,点击分享面板的对应平台进行分享。

不使用分享面板的分享,用户可以自己写分享按钮,或者触发事件,然后调用我们的分享方法,进行分享。

简而言之,直接分享就是在用户自己的界面组件中插入分享行为,分享面板是打开我们写好的一个界面组件,根据点击事件进行分享。

分享(带面板)
打开分享面板的代码如下:

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();

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

 private UMShareListener shareListener = new UMShareListener() {/*** @descrption 分享开始的回调* @param platform 平台类型*/@Overridepublic void onStart(SHARE_MEDIA platform) {}/*** @descrption 分享成功的回调* @param platform 平台类型*/@Overridepublic void onResult(SHARE_MEDIA platform) {Toast.makeText(ShareDetailActivity.this,"成功                                        了",Toast.LENGTH_LONG).show();}/*** @descrption 分享失败的回调* @param platform 平台类型* @param t 错误原因*/@Overridepublic void onError(SHARE_MEDIA platform, Throwable t) {Toast.makeText(ShareDetailActivity.this,"失败"+t.getMessage(),Toast.LENGTH_LONG).show();}/*** @descrption 分享取消的回调* @param platform 平台类型*/@Overridepublic void onCancel(SHARE_MEDIA platform) {Toast.makeText(ShareDetailActivity.this,"取消了",Toast.LENGTH_LONG).show();}};

分享的消息类型
对于分享内容可以有如下设置

文本
纯文本分享如下:

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

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

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[]);//字节流

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

UMImage thumb =  new UMImage(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之后调用分享即可,如下所示:

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

多图分享
现在支持多图分享的平台有两个,一个是新浪微博一个是QQ空间,都是最多上传9张图片,新浪微博超过9张不会上传,QQ空间超过九张会上传QQ空间相册。

  new ShareAction(ShareDetailActivity.this).withMedias(imagelocal,imagelocal,imagelocall).setPlatform(share_media).withText("hello").setCallback(shareListener).share();

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

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

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();

视频
视频只能使用网络视频:

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();

音乐
音乐只能使用网络音乐:

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();

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

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();

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

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

第三方登录
第三方登录包含两种使用场景:

获取用户资料的授权接口,使用该接口可以获取该三方平台返回的所有资料(包括姓名,性别,头像等)目前支持第三方登录的平台包括:

国内平台(微信、新浪微博、QQ、豆瓣、人人)

国外平台(Facebook、Twitter、linkedIn、kakao、VKontakte、Dropbox)

这里推荐直接使用第一种方式实现,因为本质上三方登录最终都需要拉取三方平台的用户资料,从这点来说,直接调用SDK和通过后台服务器请求,安全性是一样的。

获取用户资料
获取用户资料可以使用如下接口:

mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener);

其中umAuthListener为授权回调,构建如下:

UMAuthListener authListener = new UMAuthListener() {/*** @desc 授权开始的回调* @param platform 平台名称*/@Overridepublic void onStart(SHARE_MEDIA platform) {}/*** @desc 授权成功的回调* @param platform 平台名称* @param action 行为序号,开发者用不上* @param data 用户资料返回*/@Overridepublic void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {Toast.makeText(mContext, "成功了", Toast.LENGTH_LONG).show();}/*** @desc 授权失败的回调* @param platform 平台名称* @param action 行为序号,开发者用不上* @param t 错误原因*/@Overridepublic void onError(SHARE_MEDIA platform, int action, Throwable t) {Toast.makeText(mContext, "失败:" + t.getMessage(),                                     Toast.LENGTH_LONG).show();}/*** @desc 授权取消的回调* @param platform 平台名称* @param action 行为序号,开发者用不上*/@Overridepublic void onCancel(SHARE_MEDIA platform, int action) {Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();}};

登录成功后,第三方平台会将用户资料传回, 全部会在Map data中返回 ,由于各个平台对于用户资料的标识不同,因此为了便于开发者使用,我们将一些常用的字段做了统一封装,开发者可以直接获取,不再需要对不同平台的不同字段名做转换,这里列出我们封装的字段及含义。

U-Share高级功能

删除授权
对于退出登录,想要删除授权的用户可以使用如下接口:

UMShareAPI.get(mContext).deleteOauth(Activity, Platform, authListener);

其中第一个参数为Context,第二个参数为平台,第三个参数为删除授权的回调。

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

new ShareAction(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作为参数传入

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

private ShareBoardlistener shareBoardlistener = new  ShareBoardlistener() {@Overridepublic 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();}}
};

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

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

ShareBoardConfig config = new ShareBoardConfig();//新建ShareBoardConfig
config.setShareboardPostion(ShareBoardConfig.SHAREBOARD_POSITION_CENTER);//设置位置
config.setMenuItemBackgroundShape(ShareBoardConfig.BG_SHAPE_CIRCULAR);
config.setCancelButtonVisibility(true);
shareAction.open(config);//传入分享面板中

具体配置方式如下:

设置分享面板title文本内容

public ShareBoardConfig setTitleText(String title)

设置分享面板title文本颜色

public ShareBoardConfig setTitleTextColor(int color)

color的int值(不是color的资源id)

设置title是否显示
visibility(true为显示,false为隐藏)

public ShareBoardConfig setTitleVisibility(boolean visibility)

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

ShareBoardConfig setMenuItemTextColor(int color)

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

ShareBoardConfig setMenuItemIconPressedColor(int color)

设置item背景颜色
normalColor背景色

color的int值(不是color的资源id)

public ShareBoardConfig setMenuItemBackgroundColor(int normalColor)

设置item背景颜色
normalColor背景色

pressedColor按下时色值

color的int值(不是color的资源id)

public ShareBoardConfig setMenuItemBackgroundColor(int normalColor, int pressedColor)

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

ShareBoardConfig.BG_SHAPE_NONE(无背景)
ShareBoardConfig.BG_SHAPE_CIRCULAR(圆形)
ShareBoardConfig.BG_SHAPE_ROUNDED_SQUARE(圆角方形)

public ShareBoardConfig 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未选中的指示器颜色

color的int值(不是color的资源id)

ShareBoardConfig setIndicatorColor(int normalColor)

设置指示器的颜色
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)

设置分享面板的背景颜色
color背景颜色

color的int值(不是color的资源id)

ShareBoardConfig setShareboardBackgroundColor(int color)

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

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

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

config.setOnDismissListener(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {}
});

内存泄漏解决方案
在使用分享或者授权的Activity中,重写onDestory()方法:

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

判断客户端安装
使用如下接口

mShareAPI.isInstall(this, SHARE_MEDIA.WEIXIN)

设置每次登录拉取确认界面

UMShareConfig config = new UMShareConfig();
config.isNeedAuthOnGetUserInfo(true);
UMShareAPI.get(InfoDetailActivity.this).setShareConfig(config);

目前SDK默认设置为在Token有效期内登录不进行二次授权,如果有需要每次登录都弹出授权页面,便于切换账号的开发者可以添加上述代码

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

UMImageMark umImageMark = new UMImageMark();
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 = new UMImage(this,R.drawable.logo,umImageMark);

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

张萌韩墨羽——Ument_Share集成相关推荐

  1. 张萌韩墨羽——android摄像头推流

    android摄像头推流 功能概述 摄像头推流,是指采集手机摄像头的画面以及麦克风的声音,进行编码之后再推送到直播云平台上.腾讯云 LiteAVSDK 通过 TXLivePusher 接口提供摄像头推 ...

  2. 张萌韩墨羽——打包升级兼容适配

    打包升级兼容适配 meta-data标签读取以及多渠道打包原理 //解决报错flavorDimensions "versionCode"productFlavors {Tencen ...

  3. 张萌韩墨羽——Android蓝牙

    蓝牙 是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据交换 关于蓝牙的权限主要涉及到下面三个: BLUETOOTH:允许配对的设备进行连接 BLUETOOTH_ADMIN:允 ...

  4. 张萌韩墨羽——CommonTabLayout使用

    CommonTabLayout使用 音乐 package com.example.banner_use.fragment; import android.graphics.Canvas; import ...

  5. 张萌韩墨羽——BroadCast 广播

    BroadCast 广播 广播作用以及机制 其实BroadcastReceiver就是应用程序间的全局大喇叭,即通信的一个手段, 系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机 ...

  6. 寒食 —— [当代] 光剑

    又一年寒食 闹市人群寻归隐 昨夜梦断魂消 羁情游荡 流云落花舞 怎奈 春宽梦窄 弱柳一丝扶风 柔情一寸耘心 卷尽愁云 归梦趁风絮 壬寅年三月初四 寒食 杭州 查看全文 http://www.taodu ...

  7. 阿里云原生张羽辰:服务发现技术选型那点事儿

    作者 | 张羽辰(同昭) 引子 -- 什么是服务发现? 近日来,和很多来自传统行业.国企.政府的客户在沟通技术细节时,发现云原生所代表的技术已经逐渐成为大家的共识,从一个虚无缥缈的概念渐渐变成这些客户 ...

  8. 3月30日见!荣耀30S外观“偷跑”:经典蝶羽纹理设计

    众所周知,全新的华为P40系列旗舰将于3月26日正式亮相,随着发布时间的日益临近,该系列新机也吸引了极高的关注度.不过除了顶级旗舰机型之外,近来子品牌荣耀也即将推出今年的首款旗舰--荣耀30S,这段时 ...

  9. 墨天轮沙龙 | 庚顿数据姚羽:实时数据技术赋能流程工业,保障业务连续性

    在8月24日举办的[墨天轮数据库沙龙第九期-工业实时数据库专场]中,庚顿数据董事长兼总经理 姚羽分享了<实时数据技术赋能流程工业,保障业务连续性,强化工业化AI基础设施>主题演讲,本文为整 ...

最新文章

  1. 保护眼睛设置.txt
  2. Win10自动息屏太快解决方法
  3. android后台文件下载库,android中如何下载文件并显示下载进度
  4. 【剑指offer】最长不含重复字符的子字符串
  5. 使用Java调用以WSDL形式发布的web service
  6. 《长安十二时辰》背后的文娱大脑:如何提升爆款的确定性?
  7. highroller赌城java下载,非常有用的链接
  8. drools的guvnor_Drools Guvnor –管理访问
  9. 火狐浏览器表单不跳转_坑爹火狐浏览器会记录表单数据,导致服务器控件点击事件出bug...
  10. 《RECURRENT BATCH NORMALIZATION》
  11. Office文件嵌入特殊字体
  12. java第三方支付接口,附详细答案
  13. linux 有线程本地存储 (tls)?,有没有办法确定Linux上的库使用的线程本地存储模型...
  14. 线上阿里云mysql慢_MySQL · 案例分析 · RDS MySQL线上实例insert慢常见原因分析-阿里云开发者社区...
  15. python批量复制文件夹下所有文件_python定时复制远程文件夹中所有文件
  16. Android 签名板
  17. 为什么我不建议在阿里云官网报考ACP/ACE认证?
  18. vmware-Esxi6.5实际安装
  19. MySQL 事务隔离级别
  20. 色环电阻的识别和检测

热门文章

  1. matlab生成热敏电阻温度和阻值的数学关系式
  2. r生成新的dataframe_R语言中数据框的定义与使用
  3. java 打jar包 (JAR命令)
  4. linux用c实现pwd命令,linux pwd指令的C实现
  5. 如何用Python搭建一个搜题软件?
  6. flash+AS3制作的倒计时效果
  7. motion_model总结
  8. Java 垃圾回收机制算法分析
  9. 1231 统计闰年(1)
  10. C# StreamRead和StreamWrite