使用
使用说明
相关类和接口说明:
类文件 | 说明 |
---|---|
TMFShareService | 核心类,完成初始化和调用各渠道分享接口 |
ITMFShareListener | 分享结果监听接口 |
ITMFShareProperty | 获取分享内容参数接口 |
ITMFSharePropertyBuilder | 创建分享内容接口 |
TMFShareContants | 常量定义,分享类型和错误码 |
使用一般步骤如下,具体实现参考 TMFDemo 工程:
- 初始化
- 创建分享内容。
- 获取 TMFShareService 对象,并设置结果监听。
- 调用 share 方法。
- 对部分渠道,处理分享结果 Intent。
- 调用 release 释放内存。
初始化
接口用于统一管理各个分享渠道的key参数, 后续调用具体分享渠道的时候就不用每次传入key了。
TMFShareService.init(ITMFShareKeys,KEEP_LOG);
Sample:
ITMFShareKeys itmfShareKeys = new ITMFShareKeys() {
public String getWXAppId() {
return BuildConfig.SHARE_WX_APP_ID;
}
public String getQQAppId() {
return BuildConfig.SHARE_QQ_APP_ID;
}
public String getSinaWeiboAppId() {
return BuildConfig.SHARE_WEIBO_APP_ID;
}
public String getSinaWeiboRedirectUrl() {
return BuildConfig.SHARE_WEIBO_REDIRECT_URL;
}
public String getSinaWeiboScope() {
return BuildConfig.SHARE_WEIBO_SCOPE;
}
public String getAlipayAppId() {
return BuildConfig.SHARE_ALIPAY_APP_ID;
}
public String getDingDingAppId() {
return BuildConfig.SHARE_DINGDING_APP_ID;
}
public String getCwxAppId() {
return BuildConfig.SHARE_CWX_APP_ID;
}
public String getCwxAppAgentId() {
return BuildConfig.SHARE_CWX_APP_AGENT_ID;
}
public String getCwxSchema() {
return BuildConfig.SHARE_CWX_SCHEMA;
}
};
TMFShareService.init(itmfShareKeys,false);// 传false则不打印log
创建分享内容接口
接口用于组装分享内容,构造出一个分享内容对象。 接口定义:
/**
* 创建分享参数的构建方法
*
* @return
*/
public static ITMFSharePropertyBuilder createSharePropertyBuilder() {
return new ShareProperty();
}
分享组件参数构造接口:
public interface ITMFSharePropertyBuilder {
//设置分享标题
ITMFSharePropertyBuilder setTitle(String title);
//设置分享内容
ITMFSharePropertyBuilder setContent(String content);
//设置分享后的跳转地址
ITMFSharePropertyBuilder setJumpUrl(String jumpUrl);
//设置分享的图片,用于微信 微博 钉钉 支付宝
ITMFSharePropertyBuilder setBitmap(Bitmap bitmap);
//设置分享的图片,用于QQ 钉钉 支付宝
ITMFSharePropertyBuilder setImageUrl(String imageUrl);
//设置分享的图片,用于QQ 微信 钉钉 支付宝 企业微信
ITMFSharePropertyBuilder setLocalImageUrl(String localImageUrl);
//设置应用名称,用于QQ
ITMFSharePropertyBuilder setAppName(String appName);
//新浪微博验证跳转地址
ITMFSharePropertyBuilder setWeiboRedirectUrl(String redirectUrl);
//新浪微博分享的范围
ITMFSharePropertyBuilder setWeiboScope(String scope);
// 企业微信文件分享
ITMFSharePropertyBuilder setFilePath(String filePath);
// 企业微信视频分享
ITMFSharePropertyBuilder setVideoPath(String videoPath);
//分享参数的构造器
ITMFShareProperty build();
}
Sample :
ITMFShareProperty shareProperty = TMFShareService.createSharePropertyBuilder()
.setTitle("分享到微信好友").setContent("测试分享内容")
.build();
分享接口
由于有的平台如企业微信不止一个参数,所以必须使用初始化接口传入所有参数,后续调用分享就可以不传入key了</br> 接口定义:
/**
* 分享(旧)
*
* @param activity context的上下文
* @param appKey 各分享平台申请的id
* @param shareType 分享类型
* @param shareParam 分享内容
*/
public void share(Activity activity, String appKey, int shareType, ITMFShareProperty shareParam)
/**
* 分享(新)
*
* @param activity context的上下文
* @param sharePlatform 各分享平台
* @param shareParam 分享内容
*/
public void share(Activity activity, SharePlatform sharePlatform, ITMFShareProperty shareParam)
Sample:
shareService.share(this, "wx8071141a542f9dad", TMFShareContants.ShareType.WX_TIMELINE, shareProperty);// 旧
shareService.share(activity, SharePlatform.CWx_Friend, shareProperty);//新
入参:
参数名称 | 参数类型 | 参数描述 | 必选 |
---|---|---|---|
activity | Activity | 当前界面的 Activity 对象 | Y |
appKey | String | 在开放平台(微信/QQ)注册的 AppId | Y |
shareType | int | 分享类型 | Y |
shareParam | ITMFShareProperty | 分享内容 | Y |
分享类型定义:
/**
* 分享类型
*/
interface ShareType {
/**
* 分享到微信好友
*/
int WX_FRIEND = 1;
/**
* 分享到微信朋友圈
*/
int WX_TIMELINE = 2;
/**
* 分享到QQ好友
*/
int QQ_FRIEND = 3;
/**
* 分享到新浪微博
*/
int SINA_WEIBO = 4;
/**
* 分享到支付宝会话,即好友
*/
int ALI_PAY_FRIEND = 5;
/**
* 分享到支付宝生活圈,目前只有网页才能分享到生活圈
*/
int ALI_PAY_TIMELINE = 6;
/**
* 短信分享
*/
int SMS = 7;
/**
* 分享到钉钉好友
*/
int Ding_FRIEND = 8;
/**
* 企业微信好友
*/
int COMPANY_WX_FRIEND = 9;
}
/**
* 分享平台枚举
*/
public enum SharePlatform {
QQ,
Weixin_Friend,
Weixin_TimeLine,
Sina_Weibo,
Alipay_Friend,
Alipay_TimeLine,
SMS,
Ding_Friend,
CWx_Friend
}
分享结果回调接口
监听分享结果,是否分享成功,给用户反馈。
接口定义:
public interface ITMFShareListener {
/**
* 分享成功
*
* @param shareType 分享类型
* @param object 分享后返回的内容
*/
void onSuccess(int shareType, Object object);
/**
* 分享错误
*
* @param shareType 分享类型
* @param errCode 错误码
* @param errMessage 错误信息
*/
void onError(int shareType, int errCode, String errMessage);
}
Sample:
TMFShareService shareService = TMFShareService.getInstance();
shareService.setShareListener(new ITMFShareListener() {
@Override
public void onSuccess(int shareType, Object object) {
if (BuildConfig.DEBUG) {
Log.i(TAG, "分享成功, 分享类型: " + shareType + " 分享回调结果: " + (object != null ? object.toString() : "object is null"));
}
Toast.makeText(this, "分享成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(int shareType, int errCode, String errMessage) {
if (BuildConfig.DEBUG) {
Log.i(TAG, "分享失败, 分享类型: " + shareType + " 错误码: " + errCode + " 错误信息:" + errMessage);
}
switch (errCode) {
case TMFShareContants.ErrorCode.APP_NO_INSTALL:
Toast.makeText(this, "应用未安装", Toast.LENGTH_SHORT).show();
break;
case TMFShareContants.ErrorCode.USER_CANCEL:
Toast.makeText(this, "用户取消", Toast.LENGTH_SHORT).show();
break;
case TMFShareContants.ErrorCode.AUTH_FAIL:
Toast.makeText(this, "验证失败", Toast.LENGTH_SHORT).show();
break;
case TMFShareContants.ErrorCode.UNVALID_PARAM:
Toast.makeText(this, "分享参数不合法", Toast.LENGTH_SHORT).show();
break;
case TMFShareContants.ErrorCode.INTERFACE_NOT_SUPPORT:
Toast.makeText(this, "分享接口不支持", Toast.LENGTH_SHORT).show();
break;
case TMFShareContants.ErrorCode.SEND_REQ_FAIL:
Toast.makeText(this, "发送分享请求失败", Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(this, "未知错误", Toast.LENGTH_SHORT).show();
break;
}
}
});
结果参数:
参数名称 | 参数类型 | 参数描述 |
---|---|---|
shareType | int | 三种分享类型 |
object | Object | 分享成功,平台返回的结果对象 |
errCode | int | 错误码 |
errMessage | String | 错误信息,平台返回 |
错误码:
标识 | 错误码 | 说明 |
---|---|---|
UNKNOWN | -1 | 未知错误 |
USER_CANCEL | -2 | 用户取消 |
AUTH_FAIL | -3 | 账号验证失败 |
APP_NO_INSTALL | -4 | 应用未安装 |
UNVALID_PARAM | -5 | 参数不合法 |
INTERFACE_NOT_SUPPORT | -6 | 接口不支持,如微信版本太低,不能使用朋友圈 |
其他错误码为平台回传的错误码,根据分享类型去对应平台查看。
分享结果 Intent 处理
- 微信渠道
微信分享需设置回调 Activity。 在项目包名响应目录下新建一个 wxapi,并在 wxapi 目录下新增一个 WXEntryActivity 类,继承 Activity。
设置对 intent 的处理:
public class WXEntryActivity extends Activity {
private Handler mHandler;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHandler = new Handler(Looper.getMainLooper());
TMFShareService.getInstance().handleWxIntent(getIntent());
finishDelay();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
TMFShareService.getInstance().handleWxIntent(intent);
finishDelay();
}
private void finishDelay() {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, 100L);
}
}
在 AndroidManifest.xml 配置 Activity:
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
- QQ渠道
QQ 渠道需要在 Activity 的 onActivityResult 方法中设置处理分享结果的 Intent,否则分享结果无法回调:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
TMFShareService.getInstance().handleQQIntent(requestCode, resultCode, data);
}
在 AndroidManifest.xml 配置 QQ 接入 Activity:
<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="${QQ_SHARE_DATA_SCHEME}" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="behind"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
此处 QQ_SHARE_DATA_SCHEME 为 “tencent”+ qqAppId,可参考 TMFDemo;
- 新浪微博渠道
新浪微博渠道需要在 Activity 的 onActivityResult 方法中,设置处理分享结果的 Intent,否则分享结果无法回调:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
TMFShareService.getInstance().handleWeiboIntent(data);
}
- 支付宝渠道
支付宝分享需设置回调 Activity, 如图建立目录,并创建回调 ShareEntryActivity,继承自 Activity。
设置对 Intent 的处理:
public class ShareEntryActivity extends Activity {
private Handler mHandler;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHandler = new Handler(Looper.getMainLooper());
TMFShareService.getInstance().handleAliPayIntent(getIntent());
finishDelay();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
TMFShareService.getInstance().handleAliPayIntent(intent);
finishDelay();
}
private void finishDelay() {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, 100L);
}
}
- 钉钉渠道
钉钉分享需设置回调 Activity, 如图建立目录,并创建回调 DDShareActivity,继承自 Activity。
设置对 Intent 的处理:
public class DDShareActivity extends Activity {
private Handler mHandler;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHandler = new Handler(Looper.getMainLooper());
TMFShareService.getInstance().handleDingIntent(getIntent());
finishDelay();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
TMFShareService.getInstance().handleDingIntent(intent);
finishDelay();
}
private void finishDelay() {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, 100L);
}
}
<activity
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
android:launchMode="singleInstance"
android:name="com.tencent.tmf.demo.ddshare.DDShareActivity">
</activity>