U-Share集成文档


适用范围

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

更新说明

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

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

6.4.5接口变动

新浪不再需要WBShareActivity,只需在AndroidManifest中配置:

 
 
代码:
<span class="u-code-btn-copy" data-clipboard-text="" 复制代码到剪切板
  1. <activity
  2. android:name="com.tencent.tauth.AuthActivity"
  3. android:launchMode="singleTask"
  4. android:noHistory="true" >
  5. <intent-filter>
  6. <action android:name="android.intent.action.VIEW" />
  7. <category android:name="android.intent.category.DEFAULT" />
  8. <category android:name="android.intent.category.BROWSABLE" />
  9. <data android:scheme="tencent100424468" />
  10. </intent-filter>
  11. </activity>
  12. <activity
  13. android:name="com.tencent.connect.common.AssistActivity"
  14. android:screenOrientation="portrait"
  15. android:theme="@android:style/Theme.Translucent.NoTitleBar"
  16. android:configChanges="orientation|keyboardHidden|screenSize"/>

6.8.0更新

新浪配置统一修改为:

 
 
代码:
<span class="u-code-btn-copy" data-clipboard-text="" 复制代码到剪切板
  1. <activity
  2. android:name="com.tencent.tauth.AuthActivity"
  3. android:launchMode="singleTask"
  4. android:noHistory="true" >
  5. <intent-filter>
  6. <action android:name="android.intent.action.VIEW" />
  7. <category android:name="android.intent.category.DEFAULT" />
  8. <category android:name="android.intent.category.BROWSABLE" />
  9. <data android:scheme="tencent100424468" />
  10. </intent-filter>
  11. </activity>
  12. <activity
  13. android:name="com.tencent.connect.common.AssistActivity"
  14. android:theme="@android:style/Theme.Translucent.NoTitleBar"
  15. android:configChanges="orientation|keyboardHidden|screenSize"/>

微信兼顾8.0:

 
 
代码:
<span class="u-code-btn-copy" data-clipboard-text="" 复制代码到剪切板
  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3. super.onActivityResult(requestCode, resultCode, data);
  4. UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
  5. }

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

配置Android Manifest XML

sdk中需要的Activity

  • 新浪:
 
 
代码:
<span class="u-code-btn-copy" data-clipboard-text="" 复制代码到剪切板
  1. <activity
  2. android:name=".wxapi.WXEntryActivity"
  3. android:configChanges="keyboardHidden|orientation|screenSize"
  4. android:exported="true"
  5. android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  • 支付宝:
 
 
代码:
<span class="u-code-btn-copy" data-clipboard-text="" 复制代码到剪切板
  1. <activity
  2. android:name=".ddshare.DingCallBack"
  3. android:configChanges="keyboardHidden|orientation|screenSize"
  4. android:exported="true"
  5. android:screenOrientation="portrait"
  6. android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  • qq(请注意将我们的qq appkey替换成您自己的qq appkey):
 
 
代码:
<span class="u-code-btn-copy" data-clipboard-text="" 复制代码到剪切板
  1. <activity
  2. android:name="com.umeng.socialize.editorpage.ShareActivity"
  3. android:theme="@android:style/Theme.NoTitleBar"
  4. android:excludeFromRecents="true"
  5. />

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

权限添加

请在AndroidManifest中添加如下权限

 
 
代码:
<span class="u-code-btn-copy" data-clipboard-text="" ">复制代码到剪切板
  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  2. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  3. <uses-permission android:name="android.permission.INTERNET" />

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

 
 
代码:
<span class="u-code-btn-copy" data-clipboard-text="" ">复制代码到剪切板
  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  2. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

Android6.0权限适配

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

 
 
代码:
=23){">复制代码到剪切板
  1. if(Build.VERSION.SDK_INT>=23){
  2. 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};
  3. ActivityCompat.requestPermissions(this,mPermissionList,123);
  4. }

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

 
 
代码:
复制代码到剪切板
  1. @Override
  2. public void onCreate() {
  3. super.onCreate();
  4. UMConfigure.init(this,"5a12384aa40fa3551f0001d1"
  5. ,"umeng",UMConfigure.DEVICE_TYPE_PHONE,"");//58edcfeb310c93091c000be2 5965ee00734be40b580001a0
  6. }

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

 
 
代码:
复制代码到剪切板
  1. signingConfigs {
  2. debug {
  3. storeFile file('debug.keystore')
  4. storePassword "android"
  5. keyAlias "androiddebugkey"
  6. keyPassword "android"
  7. }
  8. }

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

image | center

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

相关阅读

【SX10002】微信您的应用签名不正确

【SQ10005】非官方正版应用,错误码100044

【SS10001】新浪签名问题

使用分包功能的注意事项

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

混淆设置

 
 
代码:
复制代码到剪切板
  1. new ShareAction(MainActivity.this).withText("hello") .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN)
  2. .setCallback(umShareListener).open();

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

分享(不带面板)

分享可以通过如下代码实现:

 
 
代码:
复制代码到剪切板
  1. private UMShareListener shareListener = new UMShareListener() {
  2. /**
  3. * @descrption 分享开始的回调
  4. * @param platform 平台类型
  5. */
  6. @Override
  7. public void onStart(SHARE_MEDIA platform) {
  8. }
  9. /**
  10. * @descrption 分享成功的回调
  11. * @param platform 平台类型
  12. */
  13. @Override
  14. public void onResult(SHARE_MEDIA platform) {
  15. Toast.makeText(ShareDetailActivity.this,"成功 了",Toast.LENGTH_LONG).show();
  16. }
  17. /**
  18. * @descrption 分享失败的回调
  19. * @param platform 平台类型
  20. * @param t 错误原因
  21. */
  22. @Override
  23. public void onError(SHARE_MEDIA platform, Throwable t) {
  24. Toast.makeText(ShareDetailActivity.this,"失 败"+t.getMessage(),Toast.LENGTH_LONG).show();
  25. }
  26. /**
  27. * @descrption 分享取消的回调
  28. * @param platform 平台类型
  29. */
  30. @Override
  31. public void onCancel(SHARE_MEDIA platform) {
  32. Toast.makeText(ShareDetailActivity.this,"取消 了",Toast.LENGTH_LONG).show();
  33. }
  34. };

分享的消息类型

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

文本

纯文本分享如下:

 
 
代码:
复制代码到剪切板
  1. new ShareAction(ShareActivity.this).withText("hello").withMedia(image).share();

图片

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

 
 
代码:
复制代码到剪切板
  1. UMImage thumb = new UMImage(this, R.drawable.thumb);
  2. image.setThumb(thumb);

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

 
 
代码:
复制代码到剪切板
  1. new ShareAction(ShareDetailActivity.this).withMedias(imagelocal,imagelocal,imagelocall)
  2. .setPlatform(share_media)
  3. .withText("hello")
  4. .setCallback(shareListener).share();

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

链接

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

 
 
代码:
复制代码到剪切板
  1. new ShareAction(ShareActivity.this)
  2. .withMedia(web)
  3. .share();

视频

视频只能使用网络视频:

 
 
代码:
复制代码到剪切板
  1. UMusic music = new UMusic(musicurl);//音乐的播放链接
  2. music.setTitle("This is music title");//音乐的标题
  3. music.setThumb("http://www.umeng.com/images/pic/social/chart_1.png");//音乐的缩略图
  4. music.setDescription("my description");//音乐的描述
  5. music.setmTargetUrl(Defaultcontent.url);//音乐的跳转链接

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

 
 
代码:
复制代码到剪切板
  1. new ShareAction(ShareActivity.this).withMedia(music).share();

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

GIF

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

 
 
代码:
复制代码到剪切板
  1. UMEmoji emoji = new UMEmoji(this,"http://img5.imgtn.bdimg.com/it/u=2749190246,3857616763&fm=21&gp=0.jpg");
  2. emoji.setThumb(new UMImage(this, R.drawable.thumb));
  3. new ShareAction(ShareActivity.this)
  4. .withMedia(emoji).share();

微信小程序

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

 
 
代码:
复制代码到剪切板
  1. UMAuthListener authListener = new UMAuthListener() {
  2. /**
  3. * @desc 授权开始的回调
  4. * @param platform 平台名称
  5. */
  6. @Override
  7. public void onStart(SHARE_MEDIA platform) {
  8. }
  9. /**
  10. * @desc 授权成功的回调
  11. * @param platform 平台名称
  12. * @param action 行为序号,开发者用不上
  13. * @param data 用户资料返回
  14. */
  15. @Override
  16. public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
  17. Toast.makeText(mContext, "成功了", Toast.LENGTH_LONG).show();
  18. }
  19. /**
  20. * @desc 授权失败的回调
  21. * @param platform 平台名称
  22. * @param action 行为序号,开发者用不上
  23. * @param t 错误原因
  24. */
  25. @Override
  26. public void onError(SHARE_MEDIA platform, int action, Throwable t) {
  27. Toast.makeText(mContext, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show();
  28. }
  29. /**
  30. * @desc 授权取消的回调
  31. * @param platform 平台名称
  32. * @param action 行为序号,开发者用不上
  33. */
  34. @Override
  35. public void onCancel(SHARE_MEDIA platform, int action) {
  36. Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();
  37. }
  38. };

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

相关阅读:授权失败相关问题

【SQ10003】QQ的unionID为空

U-Share高级功能

删除授权

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

 
 
代码:
复制代码到剪切板
  1. UMShareAPI.get(mContext).deleteOauth(Activity, Platform, authListener);

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

分享按钮自定义

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

 
 
代码:
<span class="u-code-btn-copy" data-clipboard-text="" new="" shareaction(sharemenuactivity.this)"="">复制代码到剪切板
  1. new ShareAction(ShareMenuActivity.this)
  2. .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.QZONE,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE)//分享平台
  3. .addButton("umeng_sharebutton_custom","umeng_sharebutton_custom","info_icon_1","info_icon_1")// 自定义按钮
  4. .setShareboardclickCallback(shareBoardlistener)//面板点击监听器
  5. .open();

addButton

下面对addButton进行一下解释:

  • 第一个参数(umeng_sharebutton_custom)和第二个参数(umeng_sharebutton_custom)第一个参数是显示的名字,第二个参数是平台名称,用法如下:在string文件中设置:
 
 
代码:
复制代码到剪切板
  1. <string name="umeng_sharebutton_custom">自定义分享按钮</string>

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

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

分享面板回调监听

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

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig config = new ShareBoardConfig();//新建ShareBoardConfig config.setShareboardPostion(ShareBoardConfig.SHAREBOARD_POSITION_CENTER);//设置位置
  2. config.setMenuItemBackgroundShape(ShareBoardConfig.BG_SHAPE_CIRCULAR);
  3. config.setCancelButtonVisibility(true);
  4. shareAction.open(config);//传入分享面板中

具体配置方式如下:

设置分享面板title文本内容

 
 
代码:
复制代码到剪切板
  1. public ShareBoardConfig setTitleText(String title)

设置分享面板title文本颜色

 
 
代码:
复制代码到剪切板
  1. public ShareBoardConfig setTitleTextColor(int color)

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

设置title是否显示

visibility(true为显示,false为隐藏)

 
 
代码:
复制代码到剪切板
  1. public ShareBoardConfig setTitleVisibility(boolean visibility)

设置item文字的字体颜色

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

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig setMenuItemTextColor(int color)

设置item图标按下效果颜色

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

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig setMenuItemIconPressedColor(int color)

设置item背景颜色

normalColor背景色color的int值(不是color的资源id)

 
 
代码:
复制代码到剪切板
  1. public ShareBoardConfig setMenuItemBackgroundColor(int normalColor)

设置item背景颜色

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

 
 
代码:
复制代码到剪切板
  1. 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(圆角方形)

 
 
代码:
复制代码到剪切板
  1. 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 圆角角度

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig setMenuItemBackgroundShape(int shape, int angle)

设置指示器的颜色

normalColor未选中的指示器颜色color的int值(不是color的资源id)

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig setIndicatorColor(int normalColor)

设置指示器的颜色

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

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig setIndicatorColor(int normalColor, int selectedColor)

设置指示器的显示状态

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig setIndicatorVisibility(boolean visibility)

设置取消按钮的背景色

normalColor背景色color的int值(不是color的资源id)

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig setCancelButtonBackground(int normalColor)

设置取消按钮的背景色

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

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig setCancelButtonBackground(int normalColor, int pressedColor)

设置取消按钮文本内容

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig setCancelButtonText(String text)

设置取消按钮文本字体颜色

color字体颜色color的int值(不是color的资源id)

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig setCancelButtonTextColor(int color)

设置取消按钮是否显示

visibility(true为显示,false为隐藏)

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig setCancelButtonVisibility(boolean visibility)

设置分享面板的背景颜色

color背景颜色color的int值(不是color的资源id)

 
 
代码:
复制代码到剪切板
  1. ShareBoardConfig setShareboardBackgroundColor(int color)

设置分享面板的位置

position 位置,可选值:

 
 
代码:
复制代码到剪切板
  1. config.setOnDismissListener(new PopupWindow.OnDismissListener() {
  2. @Override
  3. public void onDismiss() {
  4. }
  5. });

内存泄漏解决方案

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

 
 
代码:
复制代码到剪切板
  1. UMShareConfig config = new UMShareConfig();
  2. config.isNeedAuthOnGetUserInfo(true);
  3. UMShareAPI.get(InfoDetailActivity.this).setShareConfig(config);

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

水印开启

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

 
 
代码:
复制代码到剪切板
  1. 110201:未登陆
  2. 110405:登录请求被限制
  3. 110404:请求参数缺少appid
  4. 110401:请求的应用不存在
  5. 110407:应用已经下架
  6. 110406:应用没有通过审核
  7. 100044:未经过安全校验的包名和签名
  8. 110500:获取用户授权信息失败
  9. 110501:获取应用的授权信息失败
  10. 110502:设置用户授权失败
  11. 110503:获取token失败
  12. 110504:系统内部错误

微信平台错误码对照

 
 
代码:
复制代码到剪切板
  1. <activity
  2. android:name=".yxapi.YXEntryActivity"
  3. android:configChanges="keyboardHidden|orientation|screenSize"
  4. android:exported="true"
  5. android:screenOrientation="portrait"
  6. android:theme="@android:style/Theme.Translucent.NoTitleBar" />

facebook

facebook需要像前面快速集成文档中写的一样,配置appkey,同时在AndroidManifest中配置:

 
 
代码:
<span class="u-code-btn-copy" data-clipboard-text="" 复制代码到剪切板
  1. <meta-data
  2. android:name="com.facebook.sdk.ApplicationId"
  3. android:value="@string/facebook_app_id" />

其中487692214752558是facebook的appid这里需要注意,appid一定要存在string文件中,并以facebook_app_id名字进行保存。

twitter

twitter需要像前面快速集成文档中写的一样,配置appkey,同时在AndroidManifest中配置:

 
 
代码:
<span class="u-code-btn-copy" data-clipboard-text="" <activity"="">复制代码到剪切板
  1. <activity
  2. android:name="com.umeng.socialize.handler.TwitterWebActivity"
  3. android:configChanges=
  4. "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
  5. android:theme="@android:style/Theme.Translucent.NoTitleBar"
  6. android:label="@string/app_name" />

Kakao

KaKao平台除了需要设置appid以外,还需要在AndroidManifest中添加如下代码:

 
 
代码:
复制代码到剪切板
  1. <activity android:name="com.kakao.auth.authorization.authcode.KakaoWebViewActivity"/>

用以保证kakao的正常授权分享

豆瓣、人人、腾讯微博

猜你喜欢

转载自blog.csdn.net/qq_42120002/article/details/80608362