KwaiSDK 3.7.1

KwaiSDK 3.7.1

gaomingbowangalin维护。



KwaiSDK 3.7.1

  • gaomingbo

快手开放平台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域名加入到配置中

image

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(如下图所示)。

image

在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支持了不同能生产页面跳转功能。