![Author](https://camo.githubusercontent.com/5b0847c29bfa6d75bff44eafd70c4dc9d30ed93063591940a0e77513d75cbccd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f417574686f722d5a65726f2d3442433531442e737667)
- 在模块目录下的build.gradle文件的dependencies添加
dependencies {
implementation 'com.github.toocms-library:TabShare:3.0.1'
}
- 在项目包名下创建wxapi包,并在wxapi包中创建WXEntryActivity类,继承WXCallbackActivity类
- Manifest配置
<!-- 分享和登录都要注册的Activity -->
<!--QQ/QZONE-->
<!--这里需要注意的是android:scheme="tencent100371282"这个属性tencent后边的数字需要改成QQ和QZone的AppId-->
<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="tencent100371282" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- 微信登录页面 -->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
- 代码配置,在AppConfig类中的initJarForWeApplication回调方法中设置分享平台的唯一标识
@Override
public void initJarForWeApplication(Application application) {
// 第三方账号所对应的唯一标识
PlatformConfig.setQQZone("1105240612", "2iDzT9GvL7L9Q9bg");
PlatformConfig.setWeixin("wx0f7b622f264f30f5", "c5da5d5cc432d38358a850ad20f4f9fc");
}
/**
* 调起分享
*
* @param share_media 分享到的平台(根据个数决定是否弹出分享面板,单个不弹出,多个弹出)
*/
private void doShare(SHARE_MEDIA... share_media) {
TabShare.getOneKeyShare(this)
// 设置要分享的平台列表,枚举类为SHARE_MEDIA,例如SHARE_MEDIA.QQ
.setPlatform(share_media)
// 设置要分享的url、标题、描述、图片(分享内容4选1)
.setUrl("http://www.toocms.com",
"晟轩科技",
"晟轩科技成立于2007年,12年时间让我们从默默无闻做到了行业优质服务商,主要从事网站建设,APP开发,微信开发,品牌设计等服务,能为您提供个性化的互联网全套解决方案",
R.raw.shengxuan) // 也可设置网络图片地址:"http://xsd-img.toocms.com//Uploads/Config/2016-12-07/5847d181ebeaa.png"
// 设置要分享的view/layoutId(分享内容4选1)
.setLayout(R.id.share_view)
// 设置要分享的imageUrl/resId(分享内容4选1)
.setImage(R.raw.shengxuan)
// 设置要分享的小程序,实测描述貌似没什么用(分享内容4选1)
.setMin("http://www.toocms.com", "易商综合商城", "买啥都便宜", "pages/index/index", "gh_723a21db6d3a", R.raw.shengxuan)
// 设置分享回调监听
.setShareCallback(new OnShareListener() {
@Override
public void onResult(SHARE_MEDIA share_media) {
showToast("成功");
}
@Override
public void onError(SHARE_MEDIA share_media, Throwable throwable) {
showToast("失败");
}
@Override
public void onCancel(SHARE_MEDIA share_media) {
showToast("取消");
}
})
// 执行分享操作
.share();
}
// 单个平台分享(不弹出分享面板)
doShare(SHARE_MEDIA.WEIXIN);
// 多个平台分享(弹出分享面板)
doShare(SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE);
// 授权登录
TabShare.getOneKeyLogin(this).showUser(this, true, share_media, onAuthListener);
// 撤销授权
TabShare.getOneKeyLogin(this).revokeAuthorize(this, share_media, onAuthListener);
private OnAuthListener onAuthListener = new OnAuthListener() {
@Override
public void onComplete(SHARE_MEDIA share_media, int action, PlatformUser platformUser) {
switch (action) {
case ACTION_AUTHORIZE: // 授权
showDialog(share_media.name() + "授权登录成功",
"OpenId:" + platformUser.getOpenId() + "\n" + // openid
"Name:" + platformUser.getName() + "\n" + // 昵称
"Gender:" + platformUser.getGender() + "\n" + // 性别
"Head:" + platformUser.getHead() + "\n" + // 头像url
"Token:" + platformUser.getToken()); // token
break;
case ACTION_DELETE: // 撤销授权
showToast("已撤销" + share_media.name() + "授权");
break;
}
}
@Override
public void onError(SHARE_MEDIA share_media, int action, Throwable throwable) {
switch (action) {
case ACTION_AUTHORIZE: // 授权
showToast(share_media.name() + "授权失败");
break;
case ACTION_DELETE: // 撤销授权
showToast("撤销" + share_media.name() + "授权出错");
break;
}
}
@Override
public void onCancel(SHARE_MEDIA share_media, int action) {
showToast("取消" + share_media.name() + "授权");
}
};
TabShare.getOneKeyLogin(this).isAuthorize(this, share_media)
// 为了让回调监听起作用,还需在onActivityResult中调用方法,同时注意:分享/登录只能在Activity中调起
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
- 添加释放代码(重要,不添加会造成第二次分享/授权没有反应)
@Override
protected void onDestroy() {
super.onDestroy();
TabShare.release(this);
}
- 将所需集成平台对应的友盟Jar包放到libs中
- 将平台logo命名成umeng_socialize_平台名.png并放到drawable-xhdpi文件夹中(适合多平台分享)
- 在initJarForWeApplication回调方法中增加集成平台的配置
- 配置必要项(可根据运行时的错误日志从友盟复制)
- Manifest.xml
- layout
- style
- drawable
- string
TabShare.getOneKeyShare(this)
.setPlatform(share_media)
.addButton("复制链接", "copyurl", "umeng_socialize_copyurl", "umeng_socialize_copyurl")
.addButton("屏蔽", "delete", "umeng_socialize_delete", "umeng_socialize_delete")
.addButton("更多", "more", "umeng_socialize_more", "umeng_socialize_more")
.setShareboardclickCallback(shareBoardlistener)
.share();
private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {
@Override
public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
// 通过判断share_media是否为空来决定点击的选项是自定义按钮还是三方平台
if (share_media == null) { // 自定义按钮
switch (snsPlatform.mKeyword) {
case "copyurl":
showToast("复制成功");
break;
case "delete":
showToast("屏蔽成功");
break;
case "more":
showToast("敬请期待");
break;
}
} else { // 三方平台分享
doShare(share_media); // 该方法为上述单平台分享封装方法
}
}
};