快手开放平台SDK
介绍
快手开放平台SDK提供了第三方app跳转到快手终端进行交互的能力,其中包括快手登录授权、分享私信、视频、图片到快手,跳转指定用户个人主页等功能。
接入指南
假定当前待接入应用信息为
网站域名: https://your.app.com/
应用 TeamId: 8P7343TG54
应用 Bundle Identifier: com.company.app
应用 快手appId: ks685673047210945076
1.配置您应用的Universal Links
由于苹果iOS 13系统版本安全升级,因此openSDK在3.0.0版本进行了适配。3.0.0版本支持Universal Links方式跳转,对openSDK分享进行合法性校验。
(1)根据苹果文档配置您应用的Universal Links:
快手对Universal Links的要求:必须支持HTTPS,配置的paths不能带有query参数,App配置的paths必须加上通配符/*,
并且配置到快手的Universal Links需要以"/"结尾,便于快手SDK拼接参数能够正常完成跳转。
apple-app-site-association内容示例
{
"applinks": {
"apps": [],
"details": [
{
"appID": "8P7343TG54.com.company.app",
"paths": ["/specialPath/*"]
},
{
"appID": "8P7343TG54.com.company.app2",
"paths": [ "*","/app2/*" ]
},
]
}
}
2)打开Associated Domains开关,将Universal Links域名加入到配置中
3)验证您的Universal Links是否生效
Safari输入Universal Links(包括完整路径)+随机字符串(例如:abc)
举例:
根据您网站apple-app-site-association文件所示,快手网站注册及代码中使用的Universal Links应为
https://your.app.com/specialPath/
Safari输入以下url进行测试
https://your.app.com/specialPath/abc
检查是否存在跳转提示或可直接跳转至您的App
2.向快手注册您的应用id和Universal Links
请访问快手开放平台 https://open.kuaishou.com 进行自助注册
如何进行应用注册
成功申请后,您将得到 AppId 和 AppSecret,客户端接入只需提供 AppId,服务器则需要提供 AppId 和 AppSecret。
3.搭建开发环境
3.1静态库集成
(1)通过cocoapods集成
pod 'KwaiSDK'
(2)手动集成
1.在 XCode 中创建你的项目。
2.将 SDK 文件中的 KwaiSDK.framework 文件添加到你所创建的项目中。
3.开发者需要在项目中链接:WebKit.framework。
4.在你的项目文件中选择构建设置,在"其他链接器标志"中加入"-ObjC -all_load"。
3.2设置scheme
在 Xcode 中,选择你的项目设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type”添加“URL scheme”为你所注册的应用程序 id(如下图所示)。
在Xcode中,选择你的项目设置项,选中“TARGETS”一栏,在 “info”标签栏的“LSApplicationQueriesSchemes”添加 kwai kwaiAuth2 kwaiopenapi KwaiBundleToken kwai.clip.multi KwaiSDKMediaV2 ksnebula
在实际开发中,需要把示例例中的 ks685673047210945076 替换成自己的 appId
3.3 在代码中使用开发工具包
1.要使你的程序启动后快手终端能响应你的程序,必须在代码中向快手终端注册你的 id。(如图所示,在 AppDelegate 的 didFinishLaunchingWithOptions 函数中向快手注册 id)。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//向快手注册
[KSApi registerApp:APP_ID universalLink:UNIVERSAL_LINK delegate:YOUR_DELEGATE];
return YES;
}
2.重写 AppDelegate 的 handleOpenURL 和 openURL 方法:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [KSApi handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [KSApi handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
return [KSApi handleOpenURL:url];
}
3.重写 AppDelegate 或 SceneDelegate 的 continueUserActivity 方法。
注意:适配了 SceneDelegate 的 App,系统将会回调 SceneDelegate 的 continueUserActivity 方法,因此需要重写 SceneDelegate 的该方法。
AppDelegate
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
return [KSApi handleOpenUniversalLink:userActivity];
}
SceneDelegate
- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity {
return [KSApi handleOpenUniversalLink:userActivity];
}
4.功能使用
4.1 快手授权登录
KSAuthRequest *req = [[KSAuthRequest alloc] init];
req.scope = @"user_info";
req.h5AuthViewController = YOUR_VC;
[KSApi sendRequest:req completion:nil];
参数 | 是否可为空 | 解释 |
---|---|---|
authType | 不可为空 | 目前仅支持code方式 |
scope | 不可为空 | 取决于你的app需要的快手用户权限,应当与注册到快手开放平台的权限匹配。 |
h5AuthViewController | 可为空 | 是指当用户设备未安装快手终端的时候,会在这个传入的viewController上present出一个H5页面,可以让用户输入手机号和验证码方式登录快手账号。如果为空并且用户设备未安装快手终端会回调error给delegate。 |
4.2 分享H5卡片消息到快手
分为指定用户和非指定用户发送
指定用户发送:跳转主app后弹出一个卡片窗口,可增加H5卡片消息附言,确认后发送并跳转至单聊界面,仅双方用户可发送成功。
非指定用户发送:跳转主app后present出一个用户选择列表,有群组,可多选,可增加H5卡片消息附言,确认后发送并跳转至聊天session列表页面。
KSShareWebPageObject *object = [[KSShareWebPageObject alloc] init];
object.title = @"title";
object.desc = @"desc";
object.linkURL = @"url";
object.thumbImage = UIImageJPEGRepresentation(YOURE_IMAGE, 1);
KSShareMessageRequest *req = [[KSShareMessageRequest alloc] init];
req.openID = [self selfOpenID];
req.shareScene = KSShareScopeSession;
req.shareObject = object;
req.receiverOpenID = TARGET_OPEN_ID;
[KSApi sendRequest:req completion:nil];
KSShareWebPageObject
参数 | 是否可为空 | 解释 |
---|---|---|
title | 不可为空 | H5卡片消息的标题 |
desc | 不可为空 | H5卡片消息的描述 |
linkURL | 不可为空 | H5卡片消息点击跳转url |
thumbImage | 可为空 | H5卡片消息的icon |
KSShareMessageRequest
参数 | 是否可为空 | 解释 |
---|---|---|
openID | 可为空 | 发送方的openId,如果指定receiverOpenID了,那么openID为空会报错,因为在指定接收用户的场景下,需要发送方的id去验证用户关系 |
receiverOpenID | 可为空 | 接收方的openId,如果不指定,则跳转到快手终端后会展示用户列表,在快手终端中自行选择接收方。 |
shareObject | 不可为空 | 目前仅支持KSShareWebPageObject |
shareScene | 不可为空 | 目前仅支持KSShareScopeSession |
4.3 跳转profile
跳转至主站用户profile
KSShowProfileRequest *req = [[KSShowProfileRequest alloc] init];
req.targetOpenID = [self targetOpenID];
[KSApi sendRequest:req];
KSShowProfileRequest
参数 | 是否可为空 | 解释 |
---|---|---|
targetOpenID | 不可为空 | 目标用户openID |
4.4 视频编辑相关功能
KSShareMediaObject *object = [[KSShareMediaObject alloc] init];
//object 参数配置
KSShareMediaRequest *request = [[KSShareMediaRequest alloc] init];
request.mediaFeature = KSShareMediaFeature_Preprocess;
request.mediaObject = object;
目前mediaFeature支持了不同能生产页面跳转功能。