龙虎国际娱乐平台

友盟+搜索

{{errorMsg}}

友盟Appkey及三方Appkey的申请

AG龙虎国际娱乐网站链接

SDK包目录结构

  • main -- 核心库
umeng_social_api.jar
umeng_social_net.jar
umeng_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
  • shareview
umeng_social_shareview.jar

老用户升级说明

以下内容是针对老用户升级使用,如果是新用户,可以直接跳到工程配置文档

4.x及之前版本

如果您之前使用的是4.x版本的sdk,请删除所有的社会化分享代码,jar以及资源文件,更新现在最新版的sdk,根据快速集成文档重新集成,因为4.x版本接口与现在完全不一样,所有接口都已经发生变化。

5.x版本

如果您之前使用的是5.x版本的sdk,您需要:
  • 删除所有的jar和资源文件,删除的过程中,5.x版本的jar要删除干净,否则可能出现jar冲突
  • 如果您使用的是精简版还需要参照对应平台的工程配置,重新配置工程,请参照工程配置文档
  • 最新版的部分接口变动

6.x版本

如果您之前使用的是6.x版本的sdk,您需要:
  • 替换所有的jar和资源文件
  • 最新版的部分接口变动

6.3接口变动

6.3以后,部分接口发生了如下变化

所有的回调监听器增加onStart()方法

  • 分享回调监听器
UMShareListener shareListener = new UMShareListener() { @Override public void onStart(SHARE_MEDIA platform) { //分享开始的回调,可以用来处理等待框,或相关的文字提示 } @Override public void onResult(SHARE_MEDIA platform) { } @Override public void onError(SHARE_MEDIA platform, Throwable t) { } @Override public void onCancel(SHARE_MEDIA platform) { } };
  • 授权回调监听器 UMAuthListener authListener = new UMAuthListener() { @Override public void onStart(SHARE_MEDIA platform) { //授权开始的回调,可以用来处理等待框,或相关的文字提示 } @Override public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) { } @Override public void onError(SHARE_MEDIA platform, int action, Throwable t) { } @Override 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("3921700954", "04b48b094faeb16683c32669824ebdad","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: <activity android:name=".WBShareActivity" android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" > <intent-filter> <action 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.soexample; import com.umeng.socialize.media.WBShareCallBackActivity; public class WBShareActivity extends WBShareCallBackActivity { }

6.4.5接口变动

新浪不再需要WBShareActivity,只需在AndroidManifest中配置: <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> <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与新浪

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

配置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

  • 新浪:
<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> <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>
  • 微信:
  • 支付宝: <activity android:name=".apshare.ShareEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  • 钉钉: <activity android:name=".ddshare.DingCallBack" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  • qq精简版:
<activity 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="tencent100424468" /> </intent-filter> </activity> <activity android:name="com.umeng.qq.tencent.AssistActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="orientation|keyboardHidden|screenSize"/>
  • qq完整版:
<activity 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="tencent100424468" /> </intent-filter> </activity> <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判断,用户是否同意了授权。如果没有同意,可以根据回调进行相应处理: @Override 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", "5bb696d9ccd75a38c8a0bfe0675559b3"); PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba"); PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad", "http://sns.whalecloud.com"); } } 在application中初始化sdk,这个初始化最好放在application的程序入口中,防止意外发生: @Override public void onCreate() { super.onCreate(); UMShareAPI.get(this); }

签名配置

签名的概念 将文件夹中的签名文件放入到工程中,例如我的签名文件是debug.keystore 然后增加签名文件的密码: signingConfigs { debug { storeFile file('debug.keystore') storePassword "android" keyAlias "androiddebugkey" keyPassword "android" } } 然后在buildTypes中将这个signingConfigs配置进去,如下图所示: 签名文件如果不加,部分平台的授权会受到影响。

使用分包功能的注意事项

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

完整版区别配置

对于微信和QQ的精简版完整版之间的配置差异,这里做一下特别说明:

微信

微信的差异主要体现在WXEntryActivity的父类WXCallbackActivity上: 精简版WXCallbackActivity的路径为com.umeng.weixin.callback.WXCallbackActivity, 完整版WXCallbackActivity的路径为com.umeng.socialize.weixin.view.WXCallbackActivity

QQ

QQ的差异主要体现在AndroidManifest.xml上: qq精简版: <activity 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="tencent100424468" /> </intent-filter> </activity> <activity android:name="com.umeng.qq.tencent.AssistActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="orientation|keyboardHidden|screenSize"/> qq完整版: <activity 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="tencent100424468" /> </intent-filter> </activity> <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) .open(); 关于分享面板的更多功能可以参照分享面板进阶

分享(不带面板)

分享可以通过如下代码实现: new ShareAction(MainActivity.this) .setPlatform(SHARE_MEDIA.QQ)//传入平台 .withText("hello")//分享内容 .setCallback(umShareListener)//回调监听器 .share(); 其中umShareListener为回调监听,构建如下: 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(); } };

分享消息类型

对于分享内容可以有如下设置

文本

纯文本分享如下: 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进行分享: 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); 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();

分享到其他平台

各平台支持的分享类型预览

平台 是否支持登录 可分享内容 是否支持获取用户信息
QQ 图片 链接 视频 音乐
Qzone 文字(说说) 图片(说说) 链接 视频 音乐
微信 文本 图片 链接 视频 音乐
微信朋友圈 文本 图片 链接(Description不会显示) 视频 音乐
新浪微博 文本 图片 图文 链接(需要linkcard权限,否则不显示图片) 视频 音乐
腾讯微博 是(网页) 文本 图片 图文 链接 视频 音乐
支付宝 文本 图片 链接 视频 音乐
钉钉 文本 图片 链接 视频 音乐
易信/朋友圈 文本 图片 链接 视频 音乐
人人 是(网页) 文本 图文 图片
豆瓣 是(网页) 文本 图文 图片
点点虫动态 文本 图文 图片 链接 视频 音乐
微信收藏 文本 图片 链接 视频 音乐 文件
LinkedIn 文本 图文 图片 链接 视频 音乐
Facebook 图片 链接 视频
Facebook Messenger 图片 链接 视频
Twitter 文本 图文 图片
短信 文本 图文 图片
邮件 文本 图文 图片
Instagram 图片
Pinterest 图片
Tumblr 文本 图片
line 文本 图文 图片
whatsapp 文本 图片 图文
flickr 图片
kakao 文本 图文 图片
googleplus 文本 图文 图片
印象笔记 文本 图片 图文
有道笔记 文本 图片 图文
pocket 链接
foursquare 图片
Dropbox 图片
VKnotakte 图片 文本 链接 音乐 视频

各平台枚举参数

平台 枚举变量
QQ SHARE_MEDIA.QQ
Qzone 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
Facebook SHARE_MEDIA.FACEBOOK
Facebook Message SHARE_MEDIA.FACEBOOK_MESSAGER
Twitter SHARE_MEDIA.TWITTER
易信 SHARE_MEDIA.YIXIN
易信朋友圈 SHARE_MEDIA.YIXIN_CIRCLE
Instagram SHARE_MEDIA.INSTAGRAM
Pinterest SHARE_MEDIA.PINTEREST
印象笔记 SHARE_MEDIA.EVERNOTE
Pocket SHARE_MEDIA.POCKET
领英 SHARE_MEDIA.LINKEDIN
有道云笔记 SHARE_MEDIA.YNOTE
WhatsApp SHARE_MEDIA.WHATSAPP
LINE SHARE_MEDIA.LINE
flickr SHARE_MEDIA.FLICKR
tumblr SHARE_MEDIA.TUMBLR
支付宝 SHARE_MEDIA.ALIPAY
KAKAO SHARE_MEDIA.KAKAO
DropBox SHARE_MEDIA.DROPBOX
VKontake 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) //面板点击监听器 .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() { @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(); } } };

分享编辑页自定义

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

常用接口调用

内存泄露处理方法

在使用分享或者授权的Activity中,重写onDestory()方法: @Override 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)

获取用户资料授权

获取用户资料可以使用如下接口: mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener); 其中umAuthListener为授权回调,构建如下: UMAuthListener authListener = new UMAuthListener() { /** * @desc 授权开始的回调 * @param platform 平台名称 */ @Override public void onStart(SHARE_MEDIA platform) { } /** * @desc 授权成功的回调 * @param platform 平台名称 * @param action 行为序号,开发者用不上 * @param data 用户资料返回 */ @Override 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 错误原因 */ @Override public void onError(SHARE_MEDIA platform, int action, Throwable t) { Toast.makeText(mContext, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show(); } /** * @desc 授权取消的回调 * @param platform 平台名称 * @param action 行为序号,开发者用不上 */ @Override public void onCancel(SHARE_MEDIA platform, int action) { Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show(); } }; 登录成功后,第三方平台会将用户资料传回, 全部会在Map data中返回 ,由于各个平台对于用户资料的标识不同,因此为了便于开发者使用,我们将一些常用的字段做了统一封装,开发者可以直接获取,不再需要对不同平台的不同字段名做转换,这里列出我们封装的字段及含义。
UShare封装后字段名 QQ原始字段名 微信原始字段名 新浪原始字段名 字段含义 备注
uid openid unionid id 用户唯一标识 uid可以实现Android与iOS平台打通,但QQ平台只能使用unionid实现打通
name screen_name screen_name screen_name 用户昵称
gender gender gender gender 用户性别 该字段会直接返回男女
iconurl 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 平台名称 */ @Override public void onStart(SHARE_MEDIA platform) { } /** * @desc 授权成功的回调 * @param platform 平台名称 * @param action 行为序号,开发者用不上 * @param data 用户资料返回 */ @Override 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 错误原因 */ @Override public void onError(SHARE_MEDIA platform, int action, Throwable t) { Toast.makeText(mContext, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show(); } /** * @desc 授权取消的回调 * @param platform 平台名称 * @param action 行为序号,开发者用不上 */ @Override 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:系统内部错误

微信平台错误码对照

40001 invalid credential 不合法的调用凭证 40002 invalid grant_type 不合法的grant_type 40003 invalid openid 不合法的OpenID 40004 invalid media type 不合法的媒体文件类型 40007 invalid media_id 不合法的media_id 40008 invalid message type 不合法的message_type 40009 invalid image size 不合法的图片大小 40010 invalid voice size 不合法的语音大小 40011 invalid video size 不合法的视频大小 40012 invalid thumb size 不合法的缩略图大小 40013 invalid appid 不合法的AppID 40014 invalid access_token 不合法的access_token 40015 invalid menu type 不合法的菜单类型 40016 invalid button size 不合法的菜单按钮个数 40017 invalid button type 不合法的按钮类型 40018 invalid button name size 不合法的按钮名称长度 40019 invalid button key size 不合法的按钮KEY长度 40020 invalid button url size 不合法的url长度 40023 invalid sub button size 不合法的子菜单按钮个数 40024 invalid sub button type 不合法的子菜单类型 40025 invalid sub button name size 不合法的子菜单按钮名称长度 40026 invalid sub button key size 不合法的子菜单按钮KEY长度 40027 invalid sub button url size 不合法的子菜单按钮url长度 40029 invalid code 不合法或已过期的code 40030 invalid refresh_token 不合法的refresh_token 40036 invalid template_id size 不合法的template_id长度 40037 invalid template_id 不合法的template_id 40039 invalid url size 不合法的url长度 40048 invalid url domain 不合法的url域名 40054 invalid sub button url domain 不合法的子菜单按钮url域名 40055 invalid button url domain 不合法的菜单按钮url域名 40066 invalid url 不合法的url 41001 access_token missing 缺失access_token参数 41002 appid missing 缺失appid参数 41003 refresh_token missing 缺失refresh_token参数 41004 appsecret missing 缺失secret参数 41005 media data missing 缺失二进制媒体文件 41006 media_id missing 缺失media_id参数 41007 sub_menu data missing 缺失子菜单数据 41008 missing code 缺失code参数 41009 missing openid 缺失openid参数 41010 missing url 缺失url参数 42001 access_token expired access_token超时 42002 refresh_token expired refresh_token超时 42003 code expired code超时 43001 require GET method 需要使用GET方法请求 43002 require POST method 需要使用POST方法请求 43003 require https 需要使用HTTPS 43004 require subscribe 需要订阅关系 44001 empty media data 空白的二进制数据 44002 empty post data 空白的POST数据 44003 empty news data 空白的news数据 44004 empty content 空白的内容 44005 empty list size 空白的列表 45001 media size out of limit 二进制文件超过限制 45002 content size out of limit content参数超过限制 45003 title size out of limit title参数超过限制 45004 description size out of limit description参数超过限制 45005 url size out of limit url参数长度超过限制 45006 picurl size out of limit picurl参数超过限制 45007 playtime out of limit 播放时间超过限制(语音为60s最大) 45008 article size out of limit article参数超过限制 45009 api freq out of limit 接口调动频率超过限制 45010 create menu limit 建立菜单被限制 45011 api limit 频率限制 45012 template size out of limit 模板大小超过限制 45016 can't modify sys group 不能修改默认组 45017 can't set group name too long sys group 修改组名过长 45018 too many group now, no need to add new 组数量过多 50001 api unauthorized 接口未授权

各平台授权回调map对照

新浪微博

uid 用户id name (6.2以前用userName)用户名 accessToken (6.2以前用access_token) RefreshToken(6.2以前用refresh_token) expiration (6.2以前用expires_in)过期时间 iconurl (6.2以前用icon_url)头像,没有设置头像时为null 注意:如果使用精简版,网页授权没有用户名和头像

微信

openid uid (6.2以前用unionid)用户id accessToken (6.2以前用access_token) RefreshToken(6.2以前用refresh_token) expiration (6.2以前用expires_in)过期时间

QQ

uid 用户id openid accessToken (6.2以前用access_token) expiration (6.2以前用expires_in)过期时间

人人

uid accessToken (6.2以前用access_token) expiration (6.2以前用expires_in)过期时间 access_secret

豆瓣

uid accessToken (6.2以前用access_token) expiration (6.2以前用expires_in)过期时间 access_secret

twitter

uid 用户id accessToken (6.2以前用access_token) access_token_secret name (6.2以前用userName)用户名

facebook

uid 用户id accessToken (6.2以前用access_token) expiration (6.2以前用expires_in)过期时间

Linkin

accessToken (6.2以前用access_token) expiration (6.2以前用expires_on)过期时间

用户资料基本信息解析如下

在返回的map中各个信息对应的key值如下

新浪微博:

用户id:uid 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

qq:

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)

facebook:

用户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)

twitter

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 uid:uid 所在地:location_name

其它平台配置

以下为其它平台的特殊配置

易信

如前面快速集成文档所示需要像微信一样添加一个回调的Activity,在包名目录下建立一个文件夹yxapi,在这个文件夹中新建一个类 public class YXEntryActivity extends YXCallbackActivity { } 同时在AndroidManifest中添加对应的配置 <activity android:name=".yxapi.YXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />

facebook

facebook需要像前面快速集成文档中写的一样,配置appkey,同时在AndroidManifest中配置: <activity 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" /> 其中487692214752558是facebook的appid 这里需要注意,appid一定要存在string文件中,并以facebook_app_id名字进行保存。

twitter

twitter需要像前面快速集成文档中写的一样,配置appkey,同时在AndroidManifest中配置: <activity 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

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() { @Override public void onDismiss() { } });
龙虎国际娱乐平台qy8千亿国际新官网qy8千亿国际官网龙8国际
龙8国际梦之城娱乐手机APP龙8娱乐老虎机龙8娱乐老虎机
龙8国际qy8千亿国际新官网qy8千亿国际官网亚虎娱乐官网
龙虎国际娱乐平台龙虎国际娱乐官网AG龙虎国际娱乐网站龙8国际
龙8国际梦之城娱乐手机APP龙8娱乐老虎机龙8娱乐老虎机