# 快手服务端SDK接入- java版本

更新时间:2024-11-22 17:26:50

# 1 简介

为了简化开发者接入开放平台能力,提供了服务端的SDK,开发者可以依托此SDK快速接入开放平台。

# 2 如何接入

在项目中POM文件引入依赖

<dependency>
    <groupId>com.github.kwaiopen</groupId>
    <artifactId>kwai-open-sdk</artifactId>
    <version>1.0.6</version>
</dependency>

关于SDK版本号更新,请关注平台公告.

# 3 包含组件

组件 介绍
KwaiOpenOauthApi oauth2.0协议的接口封装
KwaiOpenUserApi 获取用户信息的相关接口封装
KwaiOpenVideoApi 发布内容能力的相关接口封装
KwaiOpenLiveApi 直播能力的相关接口封装

# 3.1 KwaiOpenOauthApi

# 3.1.1初始化

KwaiOpenOauthApi kwaiOpenOauthApi = KwaiOpenOauthApi.init(appId);

建议声明为javabean或者静态变量.

# 3.1.2 KwaiOpenOauthApi.getAccessToken

授权code置换access_token

请求参数 说明
code 授权流程获取的授权code
appSecret 注册app时获取的appSecret
返回参数 说明
accessToken 访问令牌,需要开发者自己保存,访问openAPI时需要传递
expiresIn 访问令牌过期时间,单位(秒)
refreshToken 刷新令牌,需要开发者自己保存,在accessToken过期前刷新accessToken
openId 授权用户对应的唯一ID,开发者需要保存起来和当前的用户做关联
scopes 本次授权token中包含的scope列表,如果请求的openAPI对应的scope没有包含在这个列表里,需要让用户授权
refreshTokenExpiresIn refreshToken的过期时间,单位(秒)

调用demo

try{
	AccessTokenRequest request = new AccessTokenRequest(code, appSecret);
	AccessTokenResponse response = kwaiOpenOauthApi.getAccessToken(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}

# 3.1.3 KwaiOpenOauthApi.refreshToken

在accessToken过期前,需要调用此接口刷新accessToken和refreshToken

请求参数 说明
refreshToken 刷新令牌,确保refreshToken的仍在有效时间内
appSecret 注册app时获取的appSecret
返回参数 说明
accessToken 访问令牌,需要开发者自己保存,访问openAPI时需要传递
expiresIn 访问令牌过期时间,单位(秒)
refreshToken 刷新令牌,需要开发者自己保存,在accessToken过期前刷新accessToken
scopes 本次授权token中包含的scope列表,如果请求的openAPI对应的scope没有包含在这个列表里,需要让用户授权
refreshTokenExpiresIn refreshToken的过期时间,单位(秒)

调用demo

try{
	RefreshTokenRequest request = new RefreshTokenRequest(refreshToken, appSecret);
        RefreshTokenResponse refreshTokenResponse = kwaiOpenOauthApi.refreshToken(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}

# 3.2 KwaiOpenUserApi

# 3.2.1初始化

KwaiOpenUserApi kwaiOpenUserApi = KwaiOpenUserApi.init(appId);

建议声明为javabean或者静态变量.

# 3.2.2 KwaiOpenUserApi.getUserInfo

获取用户信息

请求参数 说明
accessToken getAccessToken接口获取到的accessToken,

需要确保scope包含 user_info,
同时需要确保accessToken在有效期内 |

返回参数 - 说明
userInfo - 用户信息
- name 用户昵称
- sex 用户性别
- fan 用户粉丝数
- follow 用户关注数
- head 用户头像图片地址
- bigHead 用户高清头像图片地址
- city 用户城市

调用demo

try{
	UserInfoRequest request = new UserInfoRequest(accessToken);
        UserInfoResponse userInfo = kwaiOpenUserApi.getUserInfo(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}

# 3.2.3 KwaiOpenUserApi.getUserPhone<功能内测中>

获取用户电话信息

请求参数 说明
accessToken getAccessToken接口获取到的accessToken,

需要确保scope包含 user_phone,
同时需要确保accessToken在有效期内 | | appSecret | 应用的appSecret,从应用的详情页获取 |

返回参数 - 说明
userPhoneInfo - 电话信息
- countryCode 电话的区域码,国内为 86
- phoneNumber 用户的电话号码

调用demo

try{
	UserPhoneRequest request = new UserPhoneRequest(accessToken, appSecret);
        UserPhoneResponse userPhone = kwaiOpenUserApi.getUserPhone(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}

# 3.3 KwaiOpenVideoApi

# 3.3.1初始化

KwaiOpenVideoApi kwaiOpenVideoApi = KwaiOpenVideoApi.init(appId);

建议声明为javabean或者静态变量.

# 3.3.2 KwaiOpenVideoApi.queryVideoList

查询用户的作品列表

请求参数 说明
accessToken getAccessToken接口获取到的accessToken,

需要确保scope包含 user_video_info,
同时需要确保accessToken在有效期内 | | count | 每页视频数,可以不赋值,默认为20 | | cursor | 上一页的最后一个视频ID,获取第一页的时候不赋值,获取第二页的时候传递上一页请求的lastCursor |

返回参数 - 说明
lastCursor - 本页最后一个作品ID,查询下一页时使用
videoList - 本页视频列表
- photoId 发布的作品ID
- caption 发布的作品标题
- cover 作品封面地址
- playUrl 作品播放链接(未转码完成时,此字段没有值)
- createTime 创建时间
- likeCount 作品点赞数
- commentCount 作品评论数
- viewCount 作品观看数
- pending 作品状态(是否还在处理中,不能观看)

调用demo

try{
        VideoListRequest request = new VideoListRequest(accessToken, 20);
        VideoListResponse videoListResponse = kwaiOpenVideoApi.queryVideoList(videoListRequest);
        VideoListRequest nextPage = new VideoListRequest(accessToken, videoListResponse.getLastCursor(), 20);
        VideoListResponse nextPageResponse = kwaiOpenVideoApi.queryVideoList(nextPage);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}

# 3.3.3 KwaiOpenVideoApi.queryVideoInfo

查询用户的作品列表

请求参数 说明
accessToken getAccessToken接口获取到的accessToken,

需要确保scope包含 user_video_info,
同时需要确保accessToken在有效期内 | | photoId | 作品ID |

返回参数 - 说明
videoInfo - 作品信息
- photoId 发布的作品ID
- caption 发布的作品标题
- cover 作品封面地址
- playUrl 作品播放链接(未转码完成时,此字段没有值)
- createTime 创建时间
- likeCount 作品点赞数
- commentCount 作品评论数
- viewCount 作品观看数
- pending 作品状态(是否还在处理中,不能观看)

调用demo

try{
        VideoInfoRequest request = new VideoInfoRequest(accessToken, photoId);
        VideoInfoResponse response = kwaiOpenVideoApi.queryVideoInfo(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}

# 3.3.4 KwaiOpenVideoApi.createVideo

一键创建视频,封装了上传和发布的全部过程.
如果上传文件大于10M,会自动进行单线程分片上传.
如果相对上传过程需要进行更多的控制,可以使用下面的分步处理接口(3.3.5 - 3.3.11)

请求参数 说明
accessToken getAccessToken接口获取到的accessToken,

需要确保scope包含 user_video_publish,
同时需要确保accessToken在有效期内 | | videoFileData | 视频的二进制数据 | | caption | 视频标题 | | cover | 视频的封面图片,请使用jpg文件 | | stereoType | 全景参数,NOT_SPHERICAL_VIDEO SPHERICAL_VIDEO_360 SPHERICAL_VIDEO_180,非全景视频不需要传递 |

返回参数 - 说明
videoInfo - 发布的作品信息
- photoId 发布的作品ID
- caption 发布的作品标题
- cover 作品封面地址
- playUrl 作品播放链接(未转码完成时,此字段没有值)
- createTime 创建时间
- likeCount 作品点赞数
- commentCount 作品评论数
- viewCount 作品观看数
- pending 作品状态(是否还在处理中,不能观看)
try{
        byte[] videoFileData = getVideoData();
        byte[] coverFileData = getConverData();
	CreateVideoRequest request = new CreateVideoRequest(accessToken);
	request.setCaption("一键发布测试");
        request.setCover(coverFileData);
        request.setVideoFileData(videoFileData);
        CreateVideoResponse response = kwaiOpenVideoApi.createVideo(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}

# 3.3.5 KwaiOpenVideoApi.startUpload

分步处理接口,第一步,开始上传文件,获得uploadToken

请求参数 说明
accessToken getAccessToken接口获取到的accessToken,

需要确保scope包含 user_video_publish,
同时需要确保accessToken在有效期内 |

返回参数 说明
uploadToken 上传token
endpoint 上传服务器地址
try{
	StartUploadRequest request = new StartUploadRequest(accessToken);
        StartUploadResponse startUploadResponse = kwaiOpenVideoApi.startUpload(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}

# 3.3.6 KwaiOpenVideoApi.uploadFile

分步处理接口,第二步,上传文件,
如果对上传过程不敏感时,可以使用此接口.
如果上传文件大于10M,会自动进行单线程分片上传.
如果需要对上传过程进行处理(自己处理分片,多线程上传分片,断点续传等功能),可以使用下面的处理接口自行上传(3.3.8 - 3.3.10)

请求参数 说明
uploadToken startUpload接口获取到的uploadToken
endPoint startUpload接口获取到的endPoint
fileData 需要上传的文件二进制数据
返回参数 说明
uploadToken 上传token
endpoint 上传服务器地址
fragmentWay 是否是分片方式上传的
try{
	UploadFileRequest uploadFileRequest = new UploadFileRequest(startUploadResponse, videoFileData);
        UploadFileResponse response =  kwaiOpenVideoApi.uploadFile(uploadFileRequest);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}

# 3.3.7 KwaiOpenVideoApi.uploadFileSingle

分步处理接口,第二步,上传文件,
对于小于10M的文件调用此方法,不分片直接上传,
不需要调用uploadFileFragmentComplete

请求参数 说明
uploadToken startUpload接口获取到的uploadToken
endPoint startUpload接口获取到的endPoint
fileData 需要上传的文件二进制数据
try{
	UploadSingleRequest request = new UploadSingleRequest(startUploadResponse, videoFileData);
        UploadSingleResponse response =  kwaiOpenVideoApi.uploadFileSingle(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}

# 3.3.8 KwaiOpenVideoApi.uploadFileFragment

分步处理接口,第二步,上传文件,
对于大于10M的文件调用此方法,自行分片之后多次调用此方法上传每个分片
上传完成后需要调用uploadFileFragmentComplete 完成上传

请求参数 说明
uploadToken startUpload接口获取到的uploadToken
endPoint startUpload接口获取到的endPoint
fileData 需要上传的文件二进制数据
fragmentId 分片ID,从0开始自增

调用示例

try{
	byte[] fileData = getFile();
        List<byte[]> bytes = ArrayUtils.splitBytes(fileData, 8 * 1024 * 1024);
        int fragment = 0;
        for (byte[] aByte : bytes) {
            kwaiOpenVideoApi.uploadFileFragment(new UploadFragmentRequest(startUploadResponse, aByte, fragment));
            fragment++;
        }

        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}

# 3.3.9 KwaiOpenVideoApi.uploadFileFragmentComplete

分步处理接口,第二步,上传文件,分片上传结束
分片上传完成后需要调用此接口结束上传

请求参数 说明
uploadToken startUpload接口获取到的uploadToken
endPoint startUpload接口获取到的endPoint
fragmentCount 总分片数

调用示例

try{
	UploadCompleteRequest request = new UploadCompleteRequest(startUploadResponse, fragmentCount);
        UploadCompleteResponse response =  kwaiOpenVideoApi.uploadFileFragmentComplete(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}


# 3.3.10 KwaiOpenVideoApi.getFragmentResumeInfo

分步处理接口,第二步,上传文件,获取断点信息
分片上传中间有部分步骤失败时,可以调用此接口获取到已经上传成功的分片,然后将没有成功的分片进行续传,续传完成后调用uploadFileFragmentComplete完成上传

请求参数 说明
uploadToken startUpload接口获取到的uploadToken
endPoint startUpload接口获取到的endPoint
返回参数 - 说明
existed - 是否已经上传完毕了
fragmentIndex - 从0开始的已上传的连续分片id (-1 表示没有分片)
fragmentList - 已上传的分片
- id 已上传的分片ID
- size 已上传的分片大小
- checksum
fragmentIndexBytes - 从0开始的已上传的连续分片size
tokenId - 上传id 无需关注

调用示例

try{
	GetFragmentResumeInfoRequest request = new GetFragmentResumeInfoRequest(uploadToken, endPoint);
        GetFragmentResumeInfoResponse fragmentResumeInfo =  kwaiOpenVideoApi.getFragmentResumeInfo(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}


# 3.3.11 KwaiOpenVideoApi.videoPublish

分步处理接口,第三步,发布视频
调用uploadFileSingle成功后 ,
或者分片上传调用uploadFileFragmentComplete成功后
调用此接口进行视频发布

请求参数 说明
accessToken getAccessToken接口获取到的accessToken,

需要确保scope包含 user_video_publish,
同时需要确保accessToken在有效期内 | | caption | 视频标题 | | cover | 视频的封面图片,请使用jpg文件 | | stereoType | 全景参数,NOT_SPHERICAL_VIDEO SPHERICAL_VIDEO_360 SPHERICAL_VIDEO_180,非全景视频不需要传递 | | uploadToken | startUpload接口获取到的uploadToken |

返回参数 - 说明
videoInfo - 发布的作品信息
- photoId 发布的作品ID
- caption 发布的作品标题
- cover 作品封面地址
- playUrl 作品播放链接(未转码完成时,此字段没有值)
- createTime 创建时间
- likeCount 作品点赞数
- commentCount 作品评论数
- viewCount 作品观看数
- pending 作品状态(是否还在处理中,不能观看)

调用示例

try{
        VideoPublishRequest videoPublishRequest = new VideoPublishRequest(access_token);
	videoPublishRequest.setCaption("发布标题");
	videoPublishRequest.setCover(coverData);
	videoPublishRequest.setUploadToken(uploadToken);
        VideoPublishResponse videoPublishResponse = videoPublish(videoPublishRequest);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}


# 3.4 KwaiOpenLiveApi

# 3.4.1初始化

KwaiOpenLiveApi kwaiOpenLiveApi = KwaiOpenLiveApi.init(appId);

建议声明为javabean或者静态变量.

# 3.4.2 KwaiOpenLiveApi.getPushUrl

获取推流地址 开始直播
获取推流地址后,请自行使用RTMP方式进行推流

请求参数 说明
accessToken getAccessToken接口获取到的accessToken,

需要确保scope包含 user_video_live,
同时需要确保accessToken在有效期内 | | file | 直播封面,不超过2M,只能上传jpg格式,推荐尺寸720x1280, | | caption | 直播标题,长度不超过13个汉字,默认 | | panoramic | 非全景直播 0、180 全景直播 1、360 全景直播 2,非必传,默认0 | | shopLive | 是否为电商(小黄车)直播,非必传,默认 false | | deviceName | 设备名称,用于数据聚合分析,非必传 | | liveSceneType | 直播场景分类id,值域参考如下分类接口返回值(例如全景直播 liveSceneType=22141) |

返回参数 - 说明
content - 推流信息
- pushUrl 推流地址
- liveStreamName 推流名称

调用示例

try{
        GetPushUrlResquest resquest = new GetPushUrlResquest(accessToken);
        resquest.setCaption("测试直播");
        resquest.setFile(coverData);
        GetPushUrlResponse response = kwaiOpenLiveApi.getPushUrl(resquest);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}


# 3.4.3 KwaiOpenLiveApi.getAllScene

获取直播分类

请求参数 说明
accessToken getAccessToken接口获取到的accessToken,

需要确保scope包含 user_video_live,
同时需要确保accessToken在有效期内 |

返回参数
文档 (opens new window)

调用示例

try{
         GetAllSceneRequest request = new GetAllSceneRequest(accessToken);
        GetAllSceneResponse response = kwaiOpenLiveApi.getAllScene(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}


# 3.4.4 KwaiOpenLiveApi.stopPush

结束直播

请求参数 说明
accessToken getAccessToken接口获取到的accessToken,

需要确保scope包含 user_video_live,
同时需要确保accessToken在有效期内 | | liveStreamName | 获取推流地址中的推流名称 |

调用示例

try{
        StopPushRequest request = new StopPushRequest(accessToken,liveStreamName);
        StopPushResponse response = kwaiOpenLiveApi.stopPush(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}


# 3.4.5 KwaiOpenLiveApi.pushStatus

获取推流状态

请求参数 说明
accessToken getAccessToken接口获取到的accessToken,

需要确保scope包含 user_video_live,
同时需要确保accessToken在有效期内 | | liveStreamName | 获取推流地址中的推流名称 |

返回参数 - 说明
content - 推流状态
- liveStreamName 推流ID
- status 直播中 LIVING、未开播 LIVE_NOT_START、已关播 LIVE_END
- statusMsg 状态原因说明

调用示例

try{
        PushStatusRequest request = new PushStatusRequest(accessToken,liveStreamName);
        PushStatusResponse response = kwaiOpenLiveApi.pushStatus(request);
        //调用成功
}catch(KwaiOpenException e){
	//调用失败
}


Copyright ©2025, All Rights Reserved