Authmap中的get方法UserInfo方法是不是有个BUG

> 社会化分享 > 社会化Android组件 > UShare集成文档
友盟Appkey及三方Appkey的申请
SDK包目录结构
main -- 核心库
umeng_social_api.jarumeng_social_net.jarumeng_social_tool.jar
platforms -- 分享平台库
QQ精简版(SocialSDK_QQ_Simplify.jar)微信完整版(wechat-sdk-android-with-mta-1.0.2.jar SocialSDK_WeiXin_Full.jar)新浪精简版(SocialSDK_Sina_Simplif.jar)
这里只列举QQ、微信和新浪,最终platforms文件夹内包含的文件与下载页面选择的平台有关
shareboard
umeng_shareboard_widget.jar(工程中存在support v4或不使用面板可以不加)umeng_social_shareboard.jar
这一项属于可选项目,使用了默认分享面板UI时需要添加
umeng_social_shareview.jar
这一项是否出现在压缩包中与下载页面选择平台有关,勾选了豆瓣、人人,twitter,linkedin时会出现
老用户升级说明
以下内容是针对老用户升级使用,如果是新用户,可以直接跳到
4.x及之前版本
如果您之前使用的是4.x版本的sdk,请删除所有的社会化分享代码,jar以及资源文件,更新现在最新版的sdk,根据快速集成文档重新集成,因为4.x版本接口与现在完全不一样,所有接口都已经发生变化。
如果您之前使用的是5.x版本的sdk,您需要:
删除所有的jar和资源文件,删除的过程中,5.x版本的jar要删除干净,否则可能出现jar冲突
如果您使用的是精简版还需要参照对应平台的工程配置,重新配置工程,请参照
最新版的部分
如果您之前使用的是6.x版本的sdk,您需要:
替换所有的jar和资源文件
最新版的部分
6.3接口变动
6.3以后,部分接口发生了如下变化
所有的回调监听器增加onStart()方法
分享回调监听器
UMShareListener shareListener = new UMShareListener() {
public void onStart(SHARE_MEDIA platform) {
//分享开始的回调,可以用来处理等待框,或相关的文字提示
public void onResult(SHARE_MEDIA platform) {
public void onError(SHARE_MEDIA platform, Throwable t) {
public void onCancel(SHARE_MEDIA platform) {
授权回调监听器
UMAuthListener authListener = new UMAuthListener() {
public void onStart(SHARE_MEDIA platform) {
//授权开始的回调,可以用来处理等待框,或相关的文字提示
public void onComplete(SHARE_MEDIA platform, int action, Map&String, String& data) {
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
public void onCancel(SHARE_MEDIA platform, int action) {
去掉了ShareAction的WithTargetURl
进行网页分享请使用UMWeb类型。
音乐类型新增setmTargetUrl方法,部分平台可以设置跳转链接。
去掉了withTitle接口
title参数只在UMWeb类型中存在,设置title请使用UMWeb类型
设置新浪回调地址
6.3版本之前设置新浪的回调地址是通过Config.REDIRECT_URL
6.3版本之后在设置appid的时候一起设置回调地址:
PlatformConfig.setSinaWeibo("", "04b48b094faeb24ebdad","http://sns.whalecloud.com");
去掉了等待窗
用户如需添加等待窗,可在监听器的onStart中show dialog,在回调完成后dismiss
由于微信、QQ等平台当用户选择留在应用后无法执行回调,因此建议在onResume中执行dialog消失事件
三方获取用户资料时是否每次都要进行授权
UMShareConfig config = new UMShareConfig();
config.isNeedAuthOnGetUserInfo(true);
UMShareAPI.get(InfoDetailActivity.this).setShareConfig(config);
目前SDK默认设置为在Token有效期内登录不进行二次授权,如果有需要每次登录都弹出授权页面,便于切换账号的开发者可以添加上述代码
是否使用分享编辑页
UMShareConfig config = new UMShareConfig();
config.isOpenShareEditActivity(true);
UMShareAPI.get(InfoDetailActivity.this).setShareConfig(config);
注意此接口只有在豆瓣和人人分享时生效,微信、QQ的分享编辑页为客户端提供,无法去除
6.4接口变动
由于新浪即将对之前的云端接口进行关停,所以新浪精简版需要做一些改版:
代码层面不需要变动,只需要升级到6.4,替换6.4之后的所有jar
同时精简版需要增加一个回调Activity:
android:name=".WBShareActivity"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait" &
&intent-filter&
android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /&
&category android:name="android.intent.category.DEFAULT" /&
&/intent-filter&
&/activity&
这个Activity在包名路径下:
package com.umeng.
import com.umeng.socialize.media.WBShareCallBackA
public class WBShareActivity extends WBShareCallBackActivity {
6.4.5接口变动
新浪不再需要WBShareActivity,只需在AndroidManifest中配置:
android: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&
android: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&
接下来,我们以新浪微博,微信,QQ三个平台为例:
导入jar和res
导入jar和res主要有以下两种形式:
手动导入:
将main文件夹以及platform(选择你想使用的平台即可)文件下,对应的资源文件和jar放入你的工程
集成工具导入:
下图便是我们的集成工具:
双击点开集成工具
选择你使用的平台和IDE:
点击OK键,会生成umeng_integratetool_result一个文件夹:
将对应的文件夹拷贝进入你的工程中即可。
添加回调Activity
在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。这里注意一定是包名路径下,例如我的包名是com.umeng.soexample,则配置如下:(需要注意,如果使用精简版WXCallbackActivity的路径为com.umeng.weixin.callback.WXCallbackActivity,如果使用完整版路径是com.umeng.socialize.weixin.view.WXCallbackActivity)
与微信相似,支付宝需要在包名目录下创建apshare文件夹,然后建立一个ShareEntryActivity的类,继承ShareCallbackActivity。
与微信相似,钉钉需要在包名目录下创建ddshare文件夹,然后建立一个DDShareActivity的类,DingCallBack。
QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的Activity中,添加:
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
权限的添加
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&
&uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/&
&uses-permission android:name="android.permission.INTERNET" /&
&uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&
&uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&
&uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /&
sdk中需要的Activity
android: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&
android: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&
android:name=".apshare.ShareEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /&
android:name=".ddshare.DingCallBack"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /&
qq精简版:
android:name="com.umeng.qq.tencent.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="tencent" /&
&/intent-filter&
&/activity&
android:name="com.umeng.qq.tencent.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"/&
qq完整版:
android: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="tencent" /&
&/intent-filter&
&/activity&
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"/&
分享编辑页(只有新浪微博,精简版,豆瓣,人人,腾讯微博,领英,twitter需要):
其他平台的回调activity请到附录中查询。
添加友盟appkey
&meta-data
android:name="UMENG_APPKEY"
android:value="561cae6ae0f55abd990035bf" &
&/meta-data&
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判断,用户是否同意了授权。如果没有同意,可以根据回调进行相应处理:
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
配置友盟key及三方key
建立一个application文件,注意要在AndroidManifest文件中配置(如果本身已有,不需要重新建立):
&application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:name=".App"
android:theme="@style/AppTheme"&
在application文件中配置三方平台的appkey:
这里作为示例,只配置了微信、QQ/Qzone、新浪的三方appkey,如果使用其他平台,在这里增加对应平台key配置
public class App extends Application{
PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe");
PlatformConfig.setQQZone("", "caab60104f0ba");
PlatformConfig.setSinaWeibo("", "04b48b094faeb24ebdad", "http://sns.whalecloud.com");
在application中初始化sdk,这个初始化最好放在application的程序入口中,防止意外发生:
public void onCreate() {
super.onCreate();
UMShareAPI.get(this);
将文件夹中的签名文件放入到工程中,例如我的签名文件是debug.keystore
然后增加签名文件的密码:
signingConfigs {
storeFile file('debug.keystore')
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android"
然后在buildTypes中将这个signingConfigs配置进去,如下图所示:
签名文件如果不加,部分平台的授权会受到影响。
使用分包功能的注意事项
部分用户可能会由于方法数限制问题使用了multiDexEnabled true
对于这部分用户,需要正确配置application否则可能会出现NoClassDefFoundError
具体配置可以参照
完整版区别配置
对于微信和QQ的精简版完整版之间的配置差异,这里做一下特别说明:
微信的差异主要体现在WXEntryActivity的父类WXCallbackActivity上:
精简版WXCallbackActivity的路径为com.umeng.weixin.callback.WXCallbackActivity,
完整版WXCallbackActivity的路径为com.umeng.socialize.weixin.view.WXCallbackActivity
QQ的差异主要体现在AndroidManifest.xml上:
qq精简版:
android:name="com.umeng.qq.tencent.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="tencent" /&
&/intent-filter&
&/activity&
android:name="com.umeng.qq.tencent.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"/&
qq完整版:
android: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="tencent" /&
&/intent-filter&
&/activity&
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"/&
-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.** {
-dontwarn twitter4j.**
-keep class twitter4j.** { *; }
-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
友盟分享分为两种形式:
使用分享面板的分享,用户可以调用我们的打开分享面板的方法,点击分享面板的对应平台进行分享。
不使用分享面板的分享,用户可以自己写分享按钮,或者触发事件,然后调用我们的分享方法,进行分享。
简而言之,直接分享就是在用户自己的界面组件中插入分享行为,分享面板是打开我们写好的一个界面组件,根据点击事件进行分享。
分享(带面板)
打开分享面板的代码如下:
new ShareAction(MainActivity.this)
.withText("hello")
.setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN)
.setCallback(umShareListener)
关于分享面板的更多功能可以参照。
分享(不带面板)
分享可以通过如下代码实现:
new ShareAction(MainActivity.this)
.setPlatform(SHARE_MEDIA.QQ)//传入平台
.withText("hello")//分享内容
.setCallback(umShareListener)//回调监听器
其中umShareListener为回调监听,构建如下:
private UMShareListener shareListener = new UMShareListener() {
* @descrption 分享开始的回调
* @param platform 平台类型
public void onStart(SHARE_MEDIA platform) {
* @descrption 分享成功的回调
* @param platform 平台类型
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(ShareDetailActivity.this,"成功了",Toast.LENGTH_LONG).show();
* @descrption 分享失败的回调
* @param platform 平台类型
* @param t 错误原因
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(ShareDetailActivity.this,"失败"+t.getMessage(),Toast.LENGTH_LONG).show();
* @descrption 分享取消的回调
* @param platform 平台类型
public 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();
分享链接可以使用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)
视频只能使用网络视频:
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)
特别说明:播放链接是指在微信qq分享音乐,是可以在当前聊天界面播放的,要求这个musicurl(播放链接)必须要以.mp3等音乐格式结尾,跳转链接是指点击linkcard之后进行跳转的链接。
目前只有微信好友分享支持Emoji表情,其他平台暂不支持
UMEmoji emoji = new UMEmoji(this,"http://img5.imgtn.bdimg.com/it/u=,&fm=21&gp=0.jpg");
emoji.setThumb(new UMImage(this, R.drawable.thumb));
new ShareAction(ShareActivity.this)
.withMedia(emoji)
微信小程序
目前只有微信好友支持小程序分享,朋友圈,收藏及其他平台暂不支持:
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)
分享到其他平台
各平台支持的分享类型预览
是否支持登录
可分享内容
是否支持获取用户信息
图片 链接 视频 音乐
文字(说说) 图片(说说) 链接 视频 音乐
文本 图片 链接 视频 音乐
微信朋友圈
文本 图片 链接(Description不会显示) 视频 音乐
文本 图片 图文 链接(需要linkcard权限,否则不显示图片) 视频 音乐
是(网页)
文本 图片 图文 链接 视频 音乐
图片 链接 视频 音乐
图片 链接 视频 音乐
易信/朋友圈
文本 图片 链接 视频 音乐
是(网页)
文本 图文 图片
是(网页)
文本 图文 图片
点点虫动态
文本 图文 图片 链接 视频 音乐
文本 图片 链接 视频 音乐 文件
文本 图文 图片 链接 视频 音乐
图片 链接 视频
Facebook Messenger
图片 链接 视频
文本 图文 图片
文本 图文 图片
文本 图文 图片
文本 图文 图片
文本 图片 图文
文本 图文 图片
googleplus
文本 图文 图片
文本 图片 图文
文本 图片 图文
foursquare
图片 文本 链接 音乐 视频
各平台枚举参数
SHARE_MEDIA.QQ
SHARE_MEDIA.QZONE
SHARE_MEDIA.WEIXIN
微信朋友圈
SHARE_MEDIA.WEIXIN_CIRCLE
SHARE_MEDIA.WEIXIN_FAVORITE
SHARE_MEDIA.TENCENT
SHARE_MEDIA.SINA
SHARE_MEDIA.RENREN
SHARE_MEDIA.SMS
SHARE_MEDIA.EMAIL
SHARE_MEDIA.DOUBAN
SHARE_MEDIA.FACEBOOK
Facebook Message
SHARE_MEDIA.FACEBOOK_MESSAGER
SHARE_MEDIA.TWITTER
SHARE_MEDIA.YIXIN
易信朋友圈
SHARE_MEDIA.YIXIN_CIRCLE
SHARE_MEDIA.INSTAGRAM
SHARE_MEDIA.PINTEREST
SHARE_MEDIA.EVERNOTE
SHARE_MEDIA.POCKET
SHARE_MEDIA.LINKEDIN
有道云笔记
SHARE_MEDIA.YNOTE
SHARE_MEDIA.WHATSAPP
SHARE_MEDIA.LINE
SHARE_MEDIA.FLICKR
SHARE_MEDIA.TUMBLR
SHARE_MEDIA.ALIPAY
SHARE_MEDIA.KAKAO
SHARE_MEDIA.DROPBOX
SHARE_MEDIA.VKONTAKTE
SHARE_MEDIA.DINGTALK
SHARE_MEDIA.GOOGLEPLUS
SHARE_MEDIA.MORE
分享UI自定义
分享按钮自定义
为分享面板添加一个自定义按钮:
new ShareAction(ShareMenuActivity.this)
.setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE)
//分享平台
.addButton("umeng_sharebutton_custom","umeng_sharebutton_custom","info_icon_1","info_icon_1")
// 自定义按钮
.setShareboardclickCallback(shareBoardlistener)
//面板点击监听器
下面对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() {
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("多平台分享")
分享编辑页自定义
分享编辑页只能在人人,豆瓣,twitter,领英中使用,该编辑页的自定义只支持umeng_socialize_share.xml中的配置,具体组件对应如下:
常用接口调用
内存泄露处理方法
在使用分享或者授权的Activity中,重写onDestory()方法:
protected void onDestroy() {
super.onDestroy();
UMShareAPI.get(this).release();
判断客户端安装
使用如下接口
mShareAPI.isInstall(this, SHARE_MEDIA.WEIXIN)
Debug模式开启方式
在初始化sdk的地方
Config.DEBUG = true
在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);
需要注意的是本地文件和网络链接的图片形式,不支持添加水印。
三方登录集成
第三方登录包含两种使用场景:
获取用户资料的授权接口,使用该接口可以获取该三方平台返回的所有资料(包括姓名,性别,头像等)
三方授权,开发者调用授权接口,可以获取accesstoken相关的信息,但是没有用户资料(姓名,性别,头像等),需要开发者根据token自己去请求用户资料,对于保密性要求较高的用户可以使用。
目前支持第三方登录的平台包括:
国内平台(微信、新浪微博、QQ、豆瓣、人人)
国外平台(Facebook、Twitter、linkedIn、kakao、VKontakte、Dropbox)
这里推荐直接使用第一种方式实现,因为本质上三方登录最终都需要拉取三方平台的用户资料,从这点来说,直接调用SDK和通过后台服务器请求,安全性是一样的
获取用户资料授权
获取用户资料可以使用如下接口:
mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener);
其中umAuthListener为授权回调,构建如下:
UMAuthListener authListener = new UMAuthListener() {
* @desc 授权开始的回调
* @param platform 平台名称
public void onStart(SHARE_MEDIA platform) {
* @desc 授权成功的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param data 用户资料返回
public 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 错误原因
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(mContext, "失败:" + t.getMessage(),
Toast.LENGTH_LONG).show();
* @desc 授权取消的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();
登录成功后,第三方平台会将用户资料传回, 全部会在Map data中返回 ,由于各个平台对于用户资料的标识不同,因此为了便于开发者使用,我们将一些常用的字段做了统一封装,开发者可以直接获取,不再需要对不同平台的不同字段名做转换,这里列出我们封装的字段及含义。
UShare封装后字段名
QQ原始字段名
微信原始字段名
新浪原始字段名
用户唯一标识
uid可以实现Android与iOS平台打通,但QQ平台只能使用unionid实现打通
screen_name
screen_name
screen_name
该字段会直接返回男女
profile_image_url
profile_image_url
profile_image_url
其它字段返回规则可以参照
第三方授权
获取用户资料可以使用如下接口:
mShareAPI.doOauthVerify(MainActivity.this, SHARE_MEDIA.QQ, umAuthListener);
其中umAuthListener为授权回调,构建如下:
UMAuthListener authListener = new UMAuthListener() {
* @desc 授权开始的回调
* @param platform 平台名称
public void onStart(SHARE_MEDIA platform) {
* @desc 授权成功的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param data 用户资料返回
public 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 错误原因
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(mContext, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show();
* @desc 授权取消的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();
这里需要注意,相比获取用户资料,授权只能返回uid和token等部分信息。
各平台字段返回规则可以参照
三方平台错误码
QQ平台错误码对照
110201:未登陆
110405:登录请求被限制
110404:请求参数缺少appid
110401:请求的应用不存在
110407:应用已经下架
110406:应用没有通过审核
100044:未经过安全校验的包名和签名
110500:获取用户授权信息失败
110501:获取应用的授权信息失败
110502:设置用户授权失败
110503:获取token失败
110504:系统内部错误
微信平台错误码对照
invalid credential
不合法的调用凭证
invalid grant_type
不合法的grant_type
invalid openid
不合法的OpenID
invalid media type
不合法的媒体文件类型
invalid media_id
不合法的media_id
invalid message type
不合法的message_type
invalid image size
不合法的图片大小
invalid voice size
不合法的语音大小
invalid video size
不合法的视频大小
invalid thumb size
不合法的缩略图大小
invalid appid
不合法的AppID
invalid access_token
不合法的access_token
invalid menu type
不合法的菜单类型
invalid button size 不合法的菜单按钮个数
invalid button type 不合法的按钮类型
invalid button name size
不合法的按钮名称长度
invalid button key size 不合法的按钮KEY长度
invalid button url size 不合法的url长度
invalid sub button size 不合法的子菜单按钮个数
invalid sub button type 不合法的子菜单类型
invalid sub button name size
不合法的子菜单按钮名称长度
invalid sub button key size 不合法的子菜单按钮KEY长度
invalid sub button url size 不合法的子菜单按钮url长度
invalid code
不合法或已过期的code
invalid refresh_token
不合法的refresh_token
invalid template_id size
不合法的template_id长度
invalid template_id 不合法的template_id
invalid url size
不合法的url长度
invalid url domain
不合法的url域名
invalid sub button url domain
不合法的子菜单按钮url域名
invalid button url domain
不合法的菜单按钮url域名
invalid url 不合法的url
access_token missing
缺失access_token参数
appid missing
缺失appid参数
refresh_token missing
缺失refresh_token参数
appsecret missing
缺失secret参数
media data missing
缺失二进制媒体文件
media_id missing
缺失media_id参数
sub_menu data missing
缺失子菜单数据
missing code
缺失code参数
missing openid
缺失openid参数
missing url 缺失url参数
access_token expired
access_token超时
refresh_token expired
refresh_token超时
code expired
require GET method
需要使用GET方法请求
require POST method 需要使用POST方法请求
require https
需要使用HTTPS
require subscribe
需要订阅关系
empty media data
空白的二进制数据
empty post data 空白的POST数据
empty news data 空白的news数据
empty content
空白的内容
empty list size 空白的列表
media size out of limit 二进制文件超过限制
content size out of limit
content参数超过限制
title size out of limit title参数超过限制
description size out of limit
description参数超过限制
url size out of limit
url参数长度超过限制
picurl size out of limit
picurl参数超过限制
playtime out of limit
播放时间超过限制(语音为60s最大)
article size out of limit
article参数超过限制
api freq out of limit
接口调动频率超过限制
create menu limit
建立菜单被限制
template size out of limit
模板大小超过限制
can't modify sys group
不能修改默认组
can't set group name too long sys group 修改组名过长
too many group now, no need to add new
组数量过多
api unauthorized
接口未授权
各平台授权回调map对照
uid 用户id
(6.2以前用userName)用户名
accessToken
(6.2以前用access_token)
RefreshToken(6.2以前用refresh_token)
expiration
(6.2以前用expires_in)过期时间
iconurl (6.2以前用icon_url)头像,没有设置头像时为null
注意:如果使用精简版,网页授权没有用户名和头像
(6.2以前用unionid)用户id
accessToken
(6.2以前用access_token)
RefreshToken(6.2以前用refresh_token)
expiration
(6.2以前用expires_in)过期时间
accessToken
(6.2以前用access_token)
expiration
(6.2以前用expires_in)过期时间
accessToken
(6.2以前用access_token)
expiration
(6.2以前用expires_in)过期时间
access_secret
accessToken
(6.2以前用access_token)
expiration
(6.2以前用expires_in)过期时间
access_secret
uid 用户id
accessToken
(6.2以前用access_token)
access_token_secret
(6.2以前用userName)用户名
uid 用户id
accessToken
(6.2以前用access_token)
expiration
(6.2以前用expires_in)过期时间
accessToken
(6.2以前用access_token)
expiration
(6.2以前用expires_on)过期时间
用户资料基本信息解析如下
在返回的map中各个信息对应的key值如下
新浪微博:
accesstoken: accessToken
(6.2以前用access_token)
refreshtoken: (6.2以前用refresh_token)
过期时间:expiration
(6.2以前用expires_in)
用户名:name(6.2以前用screen_name)
位置:location
头像:iconurl(6.2以前用profile_image_url)
性别:gender
关注数:followers_count
好友数:friends_count
name:name(6.2以前用screen_name)
用户id(openid):uid
accesstoken:
accessToken
(6.2以前用access_token)
过期时间:expiration
(6.2以前用expires_in)
性别:gender
头像:iconurl(6.2以前用profile_image_url)
是否黄钻:is_yellow_year_vip
黄钻等级:yellow_vip_level
城市:city
省份:province
QQ目前uid暂时无法实现多个应用间打通操作,如需打通请使用unionID字段,该字段需要向QQ平台申请
微信返回的openID和unionID都可以实现用户标识的需求,二者的区别在于,unionID可以实现同一个开发者账号下的应用之间账号打通的需求
unionid:uid
openid:openid
unionid:unionid
accesstoken:
accessToken
(6.2以前用access_token)
refreshtoken: refreshtoken: (6.2以前用refresh_token)
过期时间:expiration
(6.2以前用expires_in)
name:name(6.2以前用screen_name)
城市:city
省份:prvinice
国家:country
性别:gender
头像:iconurl(6.2以前用profile_image_url)
用户id:uid(6.2以前用id)
first_name:first_name
last_name:last_name
middle_name:middle_name
name:name
linkUri:linkUri
头像:iconurl(6.2以前用profilePictureUri)
uid 用户id
access_token
accessToken
(6.2以前用access_token)
access_token_secret
name(6.2以前用username)
名:firstName
姓:lastName
头像:iconurl(6.2以前用profile_image_url)
名字:name(6.2以前用screen_name)
头衔:headline
国家代码:location_country_code
所在地:location_name
其它平台配置
以下为其它平台的特殊配置
如前面快速集成文档所示需要像微信一样添加一个回调的Activity,在包名目录下建立一个文件夹yxapi,在这个文件夹中新建一个类
public class YXEntryActivity extends YXCallbackActivity {
同时在AndroidManifest中添加对应的配置
android:name=".yxapi.YXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /&
facebook需要像前面快速集成文档中写的一样,配置appkey,同时在AndroidManifest中配置:
android:name="com.umeng.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /&
&meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" /&
其中558是facebook的appid
这里需要注意,appid一定要存在string文件中,并以facebook_app_id名字进行保存。
twitter需要像前面快速集成文档中写的一样,配置appkey,同时在AndroidManifest中配置:
android:name="com.umeng.socialize.handler.TwitterWebActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" /&
KaKao平台除了需要设置appid以外,还需要在AndroidManifest中添加如下代码:
&activity android:name="com.kakao.auth.authorization.authcode.KakaoWebViewActivity"/&
用以保证kakao的正常授权分享
豆瓣、人人、腾讯微博
这个三个平台不需要在代码中设置appkey,jar包放进去就可以使用,但是需要将appkey填写在友盟的后台。
分享面板自定义进阶
关于分享面板,开发者可以根据喜好,对背景颜色,显示位置,字体颜色等进行配置,配置需要使用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,可选值:
1 ShareBoardConfig.BG_SHAPE_NONE(无背景)
2 ShareBoardConfig.BG_SHAPE_CIRCULAR(圆形)
3 ShareBoardConfig.BG_SHAPE_ROUNDED_SQUARE(圆角方形)
public ShareBoardConfig setMenuItemBackgroundShape(int shape)
设置item背景形状
shape 背景形状的type,可选值:
1 ShareBoardConfig.BG_SHAPE_NONE(无背景)
2 ShareBoardConfig.BG_SHAPE_CIRCULAR(圆形)
3 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() {
public void onDismiss() {}

我要回帖

更多关于 jquery中get方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信