使用

使用说明

相关类和接口说明:

类文件 说明
TMFShareService 核心类,完成初始化和调用各渠道分享接口
ITMFShareListener 分享结果监听接口
ITMFShareProperty 获取分享内容参数接口
ITMFSharePropertyBuilder 创建分享内容接口
TMFShareContants 常量定义,分享类型和错误码

使用一般步骤如下,具体实现参考 TMFDemo 工程:

  1. 初始化
  2. 创建分享内容。
  3. 获取 TMFShareService 对象,并设置结果监听。
  4. 调用 share 方法。
  5. 对部分渠道,处理分享结果 Intent。
  6. 调用 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。

undefined

设置对 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>
Copyright © 2013-2023 Tencent Cloud. all right reserved,powered by GitbookUpdate Time 2023-08-31 14:46:07

results matching ""

    No results matching ""