iOS 分享
分享是指第三方 App 通过接入该功能,让用户可以从 App 分享信息到抖音。目前抖音支持的内容格式为单图、多图、单视频及多视频;申请权限后还可使用分享内容携带话题、分享内容携带小程序。
分享的过程是通过相册对资源进行跨进程通信。所以首先要确保您的 App 已经提供相册的权限。
准备工作
开始进行分享之前,已经默认你,完成了接入指南中的申请、配置过程。如果还未完成,请参考 抖音授权分享 SDK 入门指南完成配置。
实现一次分享的步骤如下:
第一步:引入头文件
引入 DouyinOpenSDKShare.h 这个头文件
#import "DouyinOpenSDKShare.h"
第二步:构造分享的请求
构造分享到抖音的分享请求
DouyinOpenSDKShareRequest *req = [[DouyinOpenSDKShareRequest alloc] init];
第三步:设置必传参数
设置分享的资源类型,只能是一个类型图片或者视频。
req.mediaType = DouyinOpenSDKShareMediaTypeImage;
//Or
req.mediaType = DouyinOpenSDKShareMediaTypeVideo;
当资源类型为图片时, 默认生成图片视频. 可以通过
req.imageAlbumMode = YES;
来设置生成图集.设置分享的资源标示,传入资源在系统相册的 local identifier 注意点:
- 若分享的为图片,则图片的宽高比应满足:1/2.2<=宽高比<=2.2。
- 若分享的为视频,视频分辨率应满足:1/2.2<=宽高像素比<=2.2,且总时长大于1s。
- 若分享的为图片个数应该超过1个,图片个数最多12个,视频个数最多12个。
- 带品牌logo或品牌水印的视频,会命中抖音的审核逻辑,有比较大的概率导致分享视频推荐降权处理/分享视频下架处理/分享账号被封禁处理。强烈建议第三方应用自行处理好分享内容中的不合规水印。
- 分享的话题审核依旧遵循抖音的审核逻辑,强烈建议第三方谨慎拟定话题名称,避免强导流行为。
req.localIdentifiers = media; // NSArray
设置分享的目标页面
req.landedPageType = DouyinOpenSDKLandedPageClip // 剪辑页面
// or
req.landedPageType = DouyinOpenSDKLandedPageEdit // 编辑页面
// or
req.landedPageType = DouyinOpenSDKLandedPagePublish // 发布页面,现只支持单视频(需要抖音14.7版本以上)
第四步:设置你需要的可选参数
- 标题
- Hashtag
- 图片贴纸
- Hashtag贴纸
- 分享的上下文(state): 设置分享的上下文,会在一次分享的过程中透传,可自定义一个字符串传入,或者从OpenAPI中申请ShareID。可以从返回的 Resp 中的 state 中获取你在 request 中放设置的 state。如果传入的 state 字段是通过 OpenAPI 获取的 ShareID 你还可以通过 ShareID 精准的追踪分享的视频是否成功,获取分享视频的数据,如点赞数, 评论数等。具体有关 ShareID 的相关的请看 ShareID 的获取和使用
- 设置分享携带小程序:通过 Share Request 的扩展参数可以携带小程序信息,会在视频播放时展示。
挂载小程序请先完成申请->申请及使用说明
注意点: 使用小程序功能需要在开放平台内进行小程序绑定,链接 视频发布时会检查AppID和小程序ID的绑定关系,请确保您使用的小程序已经通过平台正确绑定。 如果您想接入小程序开发,请参考小程序开发
// 1.标题
req.title = [DouyinOpenSDKShareTitle new];
req.title = @"title";
// 2.Hashtag.
DouyinOpenSDKTitleHashtag *hashtag = [DouyinOpenSDKTitleHashtag new];
hashtag.text = "hashtag";
hashtag.index = 0;
[shareReq.title.hashtag addObject:hashtag];
// 3.图片贴纸
DouyinOpenSDKShareImageSticker *imageSticker = [[DouyinOpenSDKShareImageSticker alloc] init];
imageSticker.localIdentifier = identifier;
imageSticker.locationX = @0.5; //proportional position
imageSticker.locationY = @0.5; //proportional position
imageSticker.maxEdge = @300; // width
imageSticker.minimumScale = @0.01;
imageSticker.deleteable = YES;
imageSticker.editable = YES;
[req.imageStickers addObject:imageSticker];
// 4.Hashtag贴纸
DouyinOpenSDKShareHashtagSticker *hashtagSticker = [[DouyinOpenSDKShareHashtagSticker alloc] init];
hashtagSticker.text = @"hashtag";
hashtagSticker.index = 0;
[req.hashtagStickers addObject:hashtagSticker];
// 5.分享的上下文(state):
req.state = @“a47e57c6c559acb88a9569da66ee5f65e0f779c9”;
// 6.设置分享携带小程序
NSMutableDictionary *m_dic = @{}.mutableCopy;
m_dic[@"identifier"] = self.microAppId?:@"";
m_dic[@"title"] = self.microAppTitle?:@"";
m_dic[@"desc"] = self.microAppDesc?:@"";
m_dic[@"startPageURL"] = self.microAppUrl?:@"";
// 小程序,在分享的视频右下角显示抖音小程序入口, 非必须属性
req.extraInfo = @{@"mpInfo" : m_dic.copy};
第五步:发送请求
在设置好分享需要带入的信息之后,通过-[DouyinOpenSDKShareRequest sendShareRequestWithCompleteBlock:]发送分享请求,结果将通过 CompleteBlock 进行回调
[req sendShareRequestWithCompleteBlock:^(DouyinOpenSDKShareResponse * _Nonnull respond) {
NSString *alertString = nil;
if (respond.isSucceed) {
// Share Succeed
} else{
// Share failed
}
}];
分享结果说明: 如果分享失败可通过 respond.errCode 获取错误码对应枚举值 BDOpenPlatformErrorCode 通过 respond.errString 会返回报错信息。
错误码对应表:
BDOpenPlatformErrorCode | errorCode | 描述 |
---|---|---|
BDOpenPlatformSuccess | 0 | 成功 |
BDOpenPlatformErrorCodeCommon | -1 | 通用错误类型 <包括网络错误> |
BDOpenPlatformErrorCodeUserCanceled | -2 | 用户手动取消 |
BDOpenPlatformErrorCodeSendFailed | -3 | 发送失败 |
BDOpenPlatformErrorCodeAuthDenied | -4 | 权限错误 |
BDOpenPlatformErrorCodeUnsupported | -5 | 不支持 |
如果错误码不能方便你定位具体出错的问题,你可以通过 respond.shareState 进行错误定位。需要接入 SDK 2.0.8 以上版本
以下为 Share State 信息的对应关系
BDOpenPlatformShareRespState | value | 描述 |
---|---|---|
BDOpenPlatformShareRespStateSuccess | 20000 | 分享成功 |
BDOpenPlatformShareRespStateUnknownError | 20001 | 未知或者当前SDK版本未分类错误 |
BDOpenPlatformShareRespStateParamValidError | 20002 | 参数解析错误,获取到的资源和传入的资源类型不一致 |
BDOpenPlatformShareRespStateSharePermissionDenied | 20003 | 没有足够的权限进行操作,分享或授权之前请确认您的App有相关操作权限。可在 open.douyin.com 的管理中心查看你有哪些权限 |
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 | 获取资源错误资源可能不存在 |