Android-分享给抖音好友or群

分享到抖音好友/群是指第三方App通过接入该功能,让用户可以从App分享信息到抖音联系人页面。目前该功能支持的内容格式为单图及链接

注:支持分享的最低抖音版本为11.4.0

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

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

第一步:权限申请

向抖音短视频申请你的clientkey及相关权限请到开发者应用登记页面进行申请,申请后将获得clientkey, 之后通过clientkey为应用申请相关的权限,如分享到抖音联系人/群(im.share)等;审核通过后即可使用相关的功能;

第二步:集成到开发环境

目前初步支持了bintray平台发布aar包,因账号管理初期可能会有一些变动,请留意官网更新。

//gradle文件中添加:
repositories {
    maven { url "http://maven.byted.org/repository/android_public/" }
} 
  
dependencies {
    implementation 'com.bytedance.ies.ugc.aweme:opensdk-china-external:0.1.3.0'
    implementation 'com.bytedance.ies.ugc.aweme:opensdk-common:0.1.3.0'
}

第三步:接入步骤

  1. 环境准备 接入分享到IM功能前请确保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则可以跳过此步骤
<activity
    android:name=".douyinapi.DouYinEntryActivity"
    android:launchMode="singleTask"
    android:taskAffinity="你的包名"
    android:exported="true">
</activity>

3. 分享单张图片或html

DouYinOpenApi douyinOpenApi = DouYinOpenApiFactory.create(this);

// 初始化资源路径,路径请提供绝对路径
ShareToContact.Request request = new ShareToContact.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;
// 判断是否可以分享到联系人 if (douyinOpenApi.isAppSupportShareToContacts()) {
    // 调起分享
    douyinOpenApi.shareToContacts(request);
} else {
    Toast.makeText(MainActivity.this, "当前抖音版本不支持", Toast.LENGTH_LONG).show();
}



// 分享html
  ContactHtmlObject htmlObject = new ContactHtmlObject();
// 你的html链接(必填)
htmlObject.setHtml("https://www.baidu.com");
// 你的html描述(必填)
htmlObject.setDiscription("bbbbbbbb");
// 你的html  title(必填)
htmlObject.setTitle("title");
// 你的html的封面图(远程图片) (选填,若不填,则使用开放平台官网申请时上传的图标)
htmlObject.setThumbUrl("https://tpc.googlesyndication.com/simgad/16034773615176939809?sqp=4sqPyQQ7QjkqNxABHQAAtEIgASgBMAk4A0DwkwlYAWBfcAKAAQGIAQGdAQAAgD-oAQGwAYCt4gS4AV_FAS2ynT4&rs=AOga4qnz29EViShgiSFixrRkn77Pu29abA"); 
ShareToContact.Request request = new ShareToContact.Request();
request.htmlObject = htmlObject;
// 吊起分享if (douyinOpenApi.isAppSupportShareToContacts()) {
    douyinOpenApi.shareToContacts(request);
} else {
    Toast.makeText(MainActivity.this, "当前抖音版本不支持", Toast.LENGTH_LONG).show();
}

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

注意:如果您想要分享html链接到抖音联系人,请先到官网管理中心的您应用下的im.share 权限添加分享链接进行页面链接验证,才可以成功分享。

4. 接受返回信息 (DouYinEntryActivity) 包名下创建.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 instanceof ShareToContact.Response) {
        ShareToContact.Response response = (ShareToContact.Response) resp;
        Toast.makeText(this, "error code:" + resp.errorCode + " error Msg:" + resp.errorMsg, Toast.LENGTH_LONG).show();
        finish();
        }
    }

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

注意,若您的应用的代码存在混淆情况,吊起抖音IM分享之后,不能拿到IM分享结果的回调,请将您接收回调的activity(DouYinEntryActivity或者您自定义的回调activity) 也加入免混淆清单

5. 错误码

错误码描述
20000分享成功
20001未知错误
20003无分享权限(检测一下你的包名和client key是否对应,或有无申请该权限)
20004用户手动取消登录
20005用户未授权使用相册
20006网络问题
20008图片个数不符合要求或分享图片路径不符合要求
20013用户手动取消发布
20017无效url

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