安卓分享至私信/群
收藏
我的收藏前提条件
支持分享的最低抖音版本为 11.4.0。
在 Android R 的手机上,对于存储到 app 私有目录下面的文件是不允许分享到别的 app 的,所以分享到抖音的功能可能会失效,请开发者及时针对这种情况进行适配。既可以将要分享的文件存储到公开可访问的目录,也可以使用 FileProvider 的方式对分享的文件路径进行临时授权。使用 FileProvider 方式临时授权请参见 Android 分享支持 FileProvider 的方式。
操作步骤
第一步:准备环境
同时确保在应用的管理后台配置了包名等开发信息。。
第二步:接入
- 1.在 Application 中,初始化 DouYinOpenApiFactory。
@Override public void onCreate() { super.onCreate(); String clientkey = "[Client Key]"; // 修改为在开发者应用登记页面申请的clientkey DouYinOpenApiFactory.init(new DouYinOpenConfig(clientkey)); }
- 2.在 Manifest 中申请权限,注册接收回调 activity。
<uses-permission android:name="android.permission.INTERNET" /> //如果第三方自定义了接收回调的activity则可以跳过此步骤 <activity android:name=".douyinapi.DouYinEntryActivity" android:launchMode="singleTask" android:taskAffinity="你的包名" android:exported="true"> </activity>
第三步: 分享内容到抖音好友
分享图片
DouYinOpenApi douyinOpenApi = DouYinOpenApiFactory.create(this); // 初始化资源路径 ShareToContact.Request request = new ShareToContact.Request(); ArrayList<String> mUri = new ArrayList<>(); // 注意: 只能传入一张图片,目前只支持单图且为本地图片 // 初始化资源路径,路径请使用FileProvider路径 File file = new File("xxx文件路径"); //此处需要申明FileProvider,详情参考 Android 分享支持 FileProvider 的方式 Uri uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvide", file); //分别给抖音、抖音极速版、抖音火山版授权 context.grantUriPermission(ParamKeyConstants.DOUYIN_PACKAGE_NAME, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); context.grantUriPermission(ParamKeyConstants.DOUYIN_LITE_PACKAGE_NAME, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); context.grantUriPermission(ParamKeyConstants.DOUYIN_HOTSOON_PACKAGE_NAME, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); mUri.add(uri); ImageObject imageObject = new ImageObject(); imageObject.mImagePaths = mUri; MediaContent mediaContent = new MediaContent(); mediaContent.mMediaObject = imageObject; request.mMediaContent = mediaContent; // 判断是否可以分享到联系人 if (douyinOpenApi.isAppSupportShareToContacts()) { // 调起分享 douyinOpenApi.shareToContacts(request); }
注意: 只能传入一张图片,目前只支持单图且为本地图片
分享网页
DouYinOpenApi douyinOpenApi = DouYinOpenApiFactory.create(this); // 分享html ContactHtmlObject htmlObject = new ContactHtmlObject(); // 你的html链接(必填) htmlObject.setHtml("https://www.bytedance.com/"); // 你的html描述(必填) htmlObject.setDiscription("discription"); // 你的html title(必填) htmlObject.setTitle("title"); // 你的html的封面图(远程图片) (选填,若不填,则使用开放平台官网申请时上传的图标) htmlObject.setThumbUrl("https://lf1-cdn-tos.bytegoofy.com/obj/goofy/developer/open_platform_master/static/media/platform-logo.2812fb08.svg"); ShareToContact.Request request = new ShareToContact.Request(); request.htmlObject = htmlObject; // 调起分享 if (douyinOpenApi.isAppSupportShareToContacts()) { douyinOpenApi.shareToContacts(request); }
注意:如果您想要分享 HTML 链接到抖音联系人,请先到官网管理中心的您应用下的 im.share 权限添加分享链接进行页面链接验证,才可以成功分享。
分享小程序
val douyinOpenApiWrapper = DouYinOpenApiFactory.create(activity) val microAppObject = MicroAppObject() microAppObject.appId = "" // 小程序的appid,必传 microAppObject.title = "" //小程序卡片的title,必传 microAppObject.path = "" //点击小程序落地页的path microAppObject.query = "" //点击小程序落地页的query microAppObject.imageId = "" //小程序卡片的封面图,通过OpenAPI获取,必传 val request = Request() request.mMediaContent = MediaContent().apply { mMediaObject = microAppObject } request.mState = "ww" if (douyinOpenApiWrapper?.isSupportApi( CommonConstants.SUPPORT.SHARE_IM, CommonConstants.SUPPORT.CONTACT_API.CONTACT_SUPPORT_MICRO_APP ) == true ) { douyinOpenApiWrapper?.shareToContacts(request) }
注意:小程序需要跟第三方应用是同一主体下才能分享。
注意: 小程序封面图接口使用移动应用的client_key去获取。
第四步:接受返回信息(DouYinEntryActivity demo)
包名下创建
.douyinapi.DouYinEntryActivity
,初始化DouYinOpenApi
,实现IApiEventHandler
接口,在onResp
方法中回调授权结果。注意:douyinapi.前边的 package 路径需和 app 的包名一致,否则回调将找不到这个类,也可以选择在传分享参数时,通过
<strong>request.callerLocalEntry</strong>
参数来自己指定接收回调的全路径。集成方也可自定义接收回调类,例如:
request.callerLocalEntry = "com.xxx.xxx...activity"
;接收回调类需实现 IApiEventHandler
,若无指定则默认回调 DouYinEntryActivity
。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(); } }
注意:若你的应用的代码存在混淆情况,调起抖音私信分享之后,不能拿到私信分享结果的回调,请将你接收回调的 activity(DouYinEntryActivity 或者您自定义的回调 activity) 也加入免混淆清单。
错误码
resp.errorCode
错误码如下:错误码 | 描述 |
20000 | 分享成功 |
20001 | 未知错误 |
20003 | 无分享权限(检测一下你的包名和 client key 是否对应,或有无申请该权限) |
20004 | 用户手动取消登录 |
20005 | 用户未授权使用相册 |
20006 | 网络问题 |
20008 | 图片个数不符合要求或分享图片路径不符合要求 |
20013 | 用户手动取消发布 |
20017 | 无效 URL |
示例 Demo