iOS分享至私信/群收藏我的收藏
收藏
我的收藏前提条件
- •在开始分享之前,请确保您已经完成了 iOS 接入指南中的申请和配置过程。如果您还没有完成,请参考 iOS 接入进行接入。
- •分享功能的实现过程是通过相册来进行跨进程通信,从而实现资源共享。因此,首先要确保您的 App 能够提供相册资源。
- •部分参数和功能仅在最新版本的 SDK 和抖音中可用,请注意具体功能的版本要求。
- •请将需要分享的视频/图片保存到系统相册中。届时传入的分享资源为系统相册的本地标识符(Local Identifier)。需要注意以下几点:
- ◦本地标识符是唯一标识系统相册中每个资源的标识符。它是一个字符串,通常由数字和字母组成。
- ◦在分享视频/图片时,请确保传入正确的本地标识符。如果传入的本地标识符不正确,可能会导致分享失败或分享的资源不正确。
- ◦本地标识符可能会因为系统相册的更新或删除操作而发生变化。因此,如果你在分享之前修改或删除了系统相册中的资源,可能需要重新获取正确的本地标识符。
- ◦如果你遇到了分享失败或分享的资源不正确的问题,请检查传入的本地标识符是否正确,并确保系统相册中的资源没有被修改或删除。
- ◦带品牌 logo 或品牌水印的视频,会命中抖音的审核逻辑,有比较大的概率导致分享视频推荐降权处理/分享视频下架处理/分享账号被封禁处理。强烈建议第三方应用自 行处理好分享内容中的不合规水印。
- ◦分享的话题审核依旧遵循抖音的审核逻辑,强烈建议第三方谨慎拟定话题名称,避免强导流行为。
操作步骤
第一步:引入头文件
引入
<DouyinOpenSDK/DouyinOpenSDKShare.h>
头文件:#import <DouyinOpenSDK/DouyinOpenSDKShare.h>
第二步:构造分享的请求
构造分享到抖音的分享请求:
DouyinOpenSDKShareRequest *req = [[DouyinOpenSDKShareRequest alloc] init];
第三步:设置分享图片或者链接参数
分享图片
设置分享的资源标示,传入资源在系统相册的 local identifier。
NSArray<NSString *> * identifiers = @[@"identifiers1"]; // 获取系统相册localIdentifiers并赋值给identifiers req.localIdentifiers = identifiers;
设置分享操作到抖音私信:
req.shareAction = BDOpenPlatformShareTypeShareContentToIM;
分享链接
分享的链接需要通过审核。「管理中心」>「应用管理」>「应用详情」页中下图进行链接审核。
注意以下代码示例内字段皆必传。
DouyinOpenSDKShareLink *link = [DouyinOpenSDKShareLink new]; link.linkURLString = @"https://open.douyin.com/platform"; link.linkTitle = @"抖音开放平台"; link.linkDescription = @"抖音开放平台,致力于打造抖音开放的生态系统,将从基础能力、内容、数据、服务等层面的开放,为开发者提供高效便捷的解决方案"; link.linkCoverURLString = @"https://sf3-cdn-tos.douyinstatic.com/obj/ttfe/open/imgs/logo-text.png"; req.shareLink = link;
设置分享操作到抖音私信:
req.shareAction = BDOpenPlatformShareTypeShareContentToIM;
分享小程序
注意:小程序需要跟第三方应用是同一主体下才能分享。
DouyinOpenSDKShareMicroApp *shareMicroApp = [DouyinOpenSDKShareMicroApp new]; shareMicroApp.appId = @""; // 小程序的appid,必传 shareMicroApp.title = @""; //小程序卡片的title,必传 shareMicroApp.path = @""; //点击小程序落地页的path shareMicroApp.query = @""; //点击小程序落地页的query shareMicroApp.imageID = @""; //小程序卡片的封面图,通过OpenAPI获取,必传 req.shareMicroApp = shareMicroApp;
设置分享操作到抖音私信:
req.shareAction = BDOpenPlatformShareTypeShareContentToIM;
第四步:发送请求
在设置好分享需要带入的信息之后,
,,-[DouyinOpenSDKShareRequest sendShareRequestWithCompleteBlock:]
发送分享请求,结果将通过CompleteBlock
进行回调。[req sendShareRequestWithCompleteBlock:^(BDOpenPlatformShareResponse * _Nonnull respond) { NSString *alertString = nil; if (respond.isSucceed) { // Share Succeed } else{ // Share failed } }];
分享结果说明:如果分享失败可通过
respond.errCode
获取错误码对应枚举值BDOpenPlatformErrorCode
通过respond.errString
会返回报错信息。错误码对应表:
如果错误码不能方便你定位具体出错的问题,你可以通过
respond.shareState
进行错误定位。需要接入 SDK 2.0.8 以上版本。以下为 Share State 信息的对应关系:
BDOpenPlatformShareRespState | value | 描述 |
BDOpenPlatformShareRespStateSuccess | 20000 | 分享成功 |
BDOpenPlatformShareRespStateUnknownError | 20001 | 未知或者当前 SDK 版本未分类错误 |
BDOpenPlatformShareRespStateParamValidError | 20002 | 参数解析错误,获取到的资源和传入的资源类型不一致 |
BDOpenPlatformShareRespStateSharePermissionDenied | 20003 | |
BDOpenPlatformShareRespStateUserNotLogin | 20004 | 用户未登录 |
BDOpenPlatformShareRespStateNotHavePhotoLibraryPermission | 20005 | 抖音没有相册权限 |
BDOpenPlatformShareRespStateNetworkError | 20006 | 抖音网络错误 |
BDOpenPlatformShareRespStateVideoTimeLimitError | 20007 | 视频时长不符合限制 |
BDOpenPlatformShareRespStatePhotoResolutionError | 20008 | 图片资源分辨率不符合限制 |
BDOpenPlatformShareRespTimeStampError | 20009 | 时间戳检查失败 |
BDOpenPlatformShareRespStateHandleMediaError | 20010 | 处理照片资源出错 |
BDOpenPlatformShareRespStateVideoResolutionError | 20011 | 视 频分辨率不符合限制 |
BDOpenPlatformShareRespStateVideoFormatError | 20012 | 视频格式不支持 |
BDOpenPlatformShareRespStateCancel | 20013 | 用户取消分享 |
BDOpenPlatformShareRespStateHaveUploadingTask | 20014 | 用户有未完成编辑的发布内容 |
BDOpenPlatformShareRespStateSaveAsDraft | 20015 | 用户将分享内容存储为了草稿或用户账号不允许发布视频 |
BDOpenPlatformShareRespStatePublishFailed | 20016 | 发布视频失败 |
BDOpenPlatformShareRespStateMediaInIcloudError | 21001 | 从 iCloud 同步资源出错 |
BDOpenPlatformShareRespStateParamsParsingError | 21002 | 传递的参数处理错误 |
BDOpenPlatformShareRespStateGetMediaError | 21003 | 获取资源错误资源可能不存在 |
示例 Demo
常见问题
Q1:起抖音立刻报错,错误码 respond.shareState 为 20003?
A: 一般都是包名错误,检查应用后台包名是否与当前应用包名是否匹配。clientKey 和 bundleID 要匹配。
Q2:用户分享完毕后没有跳回 App。
Q3:跳回 App 后,没有触发回调。
。A:请考 iOS 接入 中三部分,完成初始化 AppDelegate / SceneDelegate 部分。如果没有实现相关代码,SDK 拿不到抖音拉回 App 的 schema,无法得知前次分享发布结果,也就无法调用回调。