Android 分享

分享是指第三方 App 通过接入该功能,让用户可以从 App 分享信息到抖音。目前抖音支持的内容格式为单图、多图、单视频及多视频;申请权限后还可使用分享内容携带话题、分享内容携带小程序。 目前分享分为两种形式的分享:

1. 分享到抖音编辑页

分享到抖音编辑页流程一般为:三方制作好要分享的视频之后,调用 sdk 分享到抖音,会先吊起抖音裁剪页,然后再到抖音编辑页最后再到抖音发布页。

调用抖音分享到编辑页功能后后分别进入的页面如下:

内容类型

动作

单图

分享后进入抖音照片编辑页

多图

分享后进入抖音动画编辑页

单视频

分享后进入抖音视频编辑页

多视频

分享到进入抖音多视频编辑页

图片视频混合

分享后进入抖音视频编辑页

注:支持分享到抖音编辑页最低抖音版本为 7.5.0,图片视频混合分享要求最低抖音版本为 17.4.0

2. 直接分享到抖音发布页

分享到抖音无需经过抖音的裁剪页和抖音的编辑页,可以直接到抖音发布页,减少了分享的链路。

分享到发布页目前只支持单视频发布。

接入该功能时,请将 sdk 升级到 0.1.6.0 版本及其以上,参考Android 接入指南

注:直接分享到抖音发布页最低抖音版本为 14.8.0

发布完成后在相关的 feed 页面会展示第三方的标识或入口;

注: 目前只支持分享本地图片或者视频,且该分享 sdk 不适用抖音极速版,请下载抖音主版完成分享功能

在 android R 的手机上,对于存储到 app 私有目录下面的文件是不允许分享到别的 app 的,所以分享到抖音的功能可能会失效,请开发者及时针对这种情况进行适配。既可以将要分享的文件存储到公开可访问的目录,也可以使用 FileProvider 的方式对分享的文件路径进行临时授权。使用 FileProvider 方式临时授权可以参考《android 分享支持 FileProvider 的方式》

建议开发者针对 Android 7.0 版本及以上设备,判断抖音版本支持的情况下,更新为 FileProvider 的方式进行分享。详情查阅《android 分享支持 FileProvider 方式》

接入步骤

1. 环境准备

接入分享功能前请确保 sdk 环境已配置完毕且获取了相关权限;具体请查阅文档安卓接入指南;

2. 初始化

  • 在Application中,初始化DouYinOpenApiFactory
    @Override
    public void onCreate() {
        super.onCreate();
        String clientkey = "[Client Key]"; // 修改为在开发者应用登记页面申请的clientkey
        DouYinOpenApiFactory.init(new DouYinOpenConfig(clientkey));
    }
  • Manifest中申请权限,注册接收回调activity
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <!--如果第三方自定义了接收回调的activity则可以跳过此步骤-->
    <!--放到application结点下-->
    <activity android:name=".douyinapi.DouYinEntryActivity" android:launchMode="singleTask" android:taskAffinity="你的包名" android:exported="true" />

3. 分享图片和视频

分享到抖音编辑页支持分享图片或视频,此外我们在抖音版本 17.4 支持了图片视频混合内容的分享,你可以使用douyinOpenApi.isAppSupportMixShare()判断是否支持。

3.1. 分享到抖音编辑页

        DouYinOpenApi douyinOpenApi = DouYinOpenApiFactory.create(this);
        // 初始化资源路径,路径请提供绝对路径.demo里有获取绝对路径的util代码
        Share.Request request = new Share.Request();
        ArrayList<String> mUri = new ArrayList<>();
        mUri.add("你的资源路径,请使用绝对路径");

        //分享单图/多图
        ImageObject imageObject = new ImageObject();
        imageObject.mImagePaths = mUri;
        MediaContent mediaContent = new MediaContent();
        mediaContent.mMediaObject = imageObject;
        request.mMediaContent = mediaContent;

        // 分享视频
        VideoObject videoObject = new VideoObject();
        videoObject.mVideoPaths = mUri;
        MediaContent videoContent = new MediaContent();
        videoContent.mMediaObject = videoObject;
        request.mMediaContent = videoContent;

        // 分享混合内容(要求SDK版本至少为0.1.7.0,抖音版本至少为17.4)
        if (douyinOpenApi.isAppSupportMixShare()) {
            MixObject mixObject = new MixObject();
            mixObject.mMediaPaths = mUri;
            MediaContent mixContent = new MediaContent();
            mixContent.mMediaObject = mixObject;
            request.mMediaContent = mixContent;
        }

        // 调起分享
        douyinOpenApi.share(request);

3.2 直接分享到抖音发布页

        DouYinOpenApi douyinOpenApi = DouYinOpenApiFactory.create(this);

        // 初始化资源路径,路径请提供绝对路径.demo里有获取绝对路径的util代码
        Share.Request request = new Share.Request();
        ArrayList<String> mUri = new ArrayList<>();
        mUri.add("你的资源路径");

        // 只能分享一个视频
        VideoObject videoObject = new VideoObject();
        videoObject.mVideoPaths = mUri;

        MediaContent content = new MediaContent();
        content.mMediaObject = videoObject;
        request.mMediaContent = content;
        if(douyinOpenApi.isAppSupportShareToPublish()) {
            request.shareToPublish = true;
        }

        // 调起分享
        douyinOpenApi.share(request);
  • Share.request其他参数含义:

参数

含义

mMediaContent

置分享的基础媒体数据,目前抖音支持分享类型包括: 单图/多图:生成动画电影,使用ImageObject 。当分享多图时,抖音12.3.0之后,支持多图数量不能超过35, 低版本多图数量不能超过12 单视频/多视频:使用 VideoObject。当分享多视频时,视频个数<=12 通过 request.mMediaContent = [MediaContent] 设置分享媒体资源。

callerLocalEntry

集成方可自定义接收回调类,例如:request.callerLocalEntry = "com.xxx.xxx...activity"; 接收回调类需实现IApiEventHandler,若无指定则默认回调DouYinEntryActivity

mHashTagList

默认话题功能,使用默认话题功能前确保自己app拥有默认话题权限,否则功能无效。权限申请可参考分享内容携带话题相关内容。

mState

两种传值: 1.传入自定义字符串,可在Response中获取到该值,集成方可唯一标识这次请求; 2.传入OpenAPI中申请ShareID,分享结果会通过Webhooks进行回调。通过ShareID文档了解更多

mMicroAppInfo

添加小程序。视频成功发布视频后,在视频左下角带有小程序入口。

{ "appId":"小程序appId", "appTitle":"小程序标题", "description":"小程序描述语", "appUrl":"小程序中生成该页面时写的path地址" }


注:需要添加的小程序需先在小程序平台开通「通用短视频挂载」能力后,才能被添加并显示

shareToPublish

是否直接分享到抖音发布页

4. 接受返回信息 (DouYinEntryActivity demo)

包名下创建.douyinapi.DouYinEntryActivity,初始化DouYinOpenApi,实现IApiEventHandler接口,在onResp方法中回调授权结果。

注:douyinapi.前边的 package 路径需和 app 的包名一致,否则回调将找不到这个类,也可以选择在传分享参数时,通过 request.callerLocalEntry 参数来自己指定接收回调的全路径

public class DouYinEntryActivity extends Activity implements IApiEventHandler {

    DouYinOpenApi douYinOpenApi;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        douYinOpenApi = DouYinOpenApiFactory.create(this);
        douYinOpenApi.handleIntent(getIntent(), this);
    }

    @Override public void onReq(BaseReq req) {

    }

    @Override public void onResp(BaseResp resp) {
        if (resp.getType() == CommonConstants.ModeType.SHARE_CONTENT_TO_TT_RESP) {
            Share.Response response = (Share.Response) resp;
            // 抖音940以后,错误码除了response.errorCode字段,还增加了response.subErrorCode字段,帮助三方排查错误原因
            Toast.makeText(this, "分享失败,errorCode: " + response.errorCode + "subcode" + response.subErrorCode + " Error Msg : " +
                    response.errorMsg, Toast.LENGTH_SHORT).show();
        }

    }

    @Override public void onErrorIntent(@Nullable Intent intent) {
        // 错误数据
        Toast.makeText(this, "Intent出错", Toast.LENGTH_LONG).show();
    }
}

发布成功后,会弹出分享弹窗,若想获取用户分享成功后留在抖音内的回调,需要注册并接收广播信息:

// 接收广播的actionpublic static final StringACTION_STAY_IN_TT = "com.aweme.opensdk.action.stay.in.dy";

回调错误码 errorCode 如下:

response.errorCode

含义

0

正常

-1

未知错误

-2

用户手动取消

-3

发送失败

-4

第三方未获取分享权限或获取权限失败

-5

文件解析错误

subErrorCode 如下:

response.subErrorCode

含义

20002

无效请求参数

20003

授权失败/无权限 或者应用包名与官网填写不对应

20004

用户手动取消登录

20005

用户未授权使用相册

20006

请求授权时网络出错

20007

视频不支持

20008

分享图文不支持

20010

解析媒体资源失败,包含图片,视频 或者正在发布另一次分享

20011

视频尺寸或比例不支持

20012

视频格式不支持(要求mp4)

20013

用户手动取消发布

20015

用户存为草稿

22001

不支持的分辨率 android 独有

注意: 如想获得 subErrorCode,请将 sdk 升级到 0.0.1.5 版本,抖音大于 940 版本

注意,若您的应用的代码存在混淆,若在混淆的情况下存在不能吊起分享的情况,请在您的 proguard 文件中添加 -keep class com.bytedance.sdk.open.aweme., 若吊起分享后不能收到回调,请将您接收回调的 activity(DouYinEntryActivity 或者您自定义的回调 activity) 也加入免混淆清单**

5. 文件要求

分享至抖音的视频/图片需满足以下限制,否则将导致文件解析错误分享失败

  • 传入视频要求 时长要求在1s以上 格式要求mp4文件,且文件支持解析 画幅会根据机型白名单判断是否支持更高分辨率的,非白名单最短边不大于1100px,机型白名单以内是4096*2160 多视频数量不能超过12
  • 传入图片要求 高宽比需满足区间 1/2.2~2.2(低版本)1/3~3(抖音17.4之后) 抖音12.3.0之后,支持多图数量不能超过35, 低版本多图数量不能超过12 注意:分享内容带水印可能会受到限制或被删除,请勿携带水印

分享内容携带小程序

支持第三方分享内容至抖音时,携带相关小程序信息,成功发布视频后,在视频左下角带有小程序入口。开发者需要先在字节跳动小程序平台上开发小程序后,在抖音开放平台提交该功能的申请,完成 app 和指定小程序的绑定。点击开通分享内容携带小程序 注意:抖音 6.7.0 以上版本可用

挂载小程序请先完成申请->申请及使用说明

        Share.Request request = new Share.Request();
        MicroAppInfo mMicroInfo = new MicroAppInfo();
        mMicroInfo.setAppTitle("小程序title");
        mMicroInfo.setDescription("小程序描述");
        mMicroInfo.setAppId("ttef9b992670b151ec");
        mMicroInfo.setAppUrl("pages/movie/index?utm_source=share_wxapp&cityId=10&cityName=%E4%B8%8A%E6%B5%B7");
        request.mMicroAppInfo = mMicroInfo;

注意: 使用分享携带小程序,请在<strong>build.gradle</strong>中添加 gson 依赖,否则会报错找不到 gson 文件

分享内容携带话题

支持有第三方预设内容分享抖音时默认携带的话题,指定的话题会展现在发布页面,用户可自行删除该话题,该话题类型支持商业化话题和普通话题。发布后同抖音原生话题没有差别。注意:抖音 10.1.0 以下版本可支持携带一个话题,抖音 10.1.0 之后支持携带多个话题

Share.Request request = new Share.Request()
//拼接分享内容
ArrayList<String> hashtags = new ArrayList<>();
hashtags.add("话题");
request.mHashTagList = hashtags;

注意: 分享的话题审核依旧遵循抖音的审核逻辑,强烈建议第三方谨慎拟定话题名称,避免强导流行为。

附:接入 0.1.1.0sdk 需要做的更改

此处仅介绍 0.1.1.0 版本变更,最新版本接入请参考接入指南

类库引入方式

dependencies {
    implementation 'com.bytedance.ies.ugc.aweme:opensdk-china-external:0.1.1.0'
    implementation 'com.bytedance.ies.ugc.aweme:opensdk-common:0.1.1.0'
}

新版 sdk 需要引入两个 aar,这是与旧版 sdk 最大的不同

主要类名修改

分享包名变动的类

这几个类引入的时候,只需修改为正确的包名即可。

默认回调类的更改为.douyinapi.DouYinEntryActivity

默认回调 Activity .tiktokapi.TikTokEntryActivity 更改为 .douyinapi.DouYinEntryActivity,自定义回调 Activity 可忽略本条

将 TikTokOpenApiFactory 类更改为 DouYinOpenApiFactory

  • DouYinOpenApiFactory.create()方法创建DouYinOpenApi,此方法不再提供targetApp的传参,使用该方法仅仅只能吊起抖音授权和分享,若要使用TikTok的分享,请仔细阅读tiktok for developers内容。

错误码可以统一在 CommonConstants 里面查找, 原 TikTokConstants 已删除

诚邀您对本文档易读易用性进行评价
好用
不好用