辅助 SDK 开发者文档
简介
辅助 SDK 是我们提供的一个基于 websocket 的业务服务 SDK,它是一个轻量级的工具,与画布 SDK 相互独立运行。
我们可以通过该服务基于同一个 websocket
连接发起复数不同的业务形式。
通过辅助 SDK,开发者可以方便地使用我们提供的业务服务,增强应用程序的实时交互能力。
类似于画布 Web SDK,我们同时为辅助 SDK 提供了前端 JS SDK,与服务端 REST 能力。如需查看 API 文档,请移步 SDK API 文档, 或 REST API 文档。
当前我们已经支持基于辅助 SDK 发起签到
类型业务,我们有规划后续拓展出IM (Instant Message)
等业务,敬请期待!
前置动作
如果您希望使用我们的辅助 SDK,您首先需在控制台内,打开您的应用配置页面,并开启辅助 SDK 能力,图示如下:
工作模式
辅助 SDK 基于 websocket
机制进行工作,当您完成辅助 SDK 的初始化工作后,您的 Web App 会自动连接至我们的服务器并加入您指定的业务频道中。
注:英飞辅助 SDK 业务下,业务频道的 ID 会统一使用
channelId
进行标记。
连接至同一业务频道的 Web 客户端会共享 websocket
链路内发送的业务信令,进而支持复杂交互的业务子服务,例如进行签到活动
。
集成方式
请您按照下述步骤完成辅助 SDK 的集成与使用。
准备鉴权 Token
在正式使用辅助 SDK 前,您需要优先了解鉴权 Token 的作用与生成机制。为确保辅助 SDK 业务使用的正当性, 我们需要基于 Token 鉴权机制完成对用户身份的验证。为生成一个合规的鉴权 Token,您提供如下信息:
appId
与appSecret
:该信息可以在我们的管理台应用中获取。channelId
:即业务频道 ID,该 ID 需要您自行指定,可以为任意字符串,不同 appId 下的相同业务频道 ID 相互隔离。 您不需要事先创建业务频道,业务频道也不会被销毁。加入相同业务频道的辅助 SDK 客户端 会自动共享数据。如您计划将辅助 SDK 与画布 SDK 结合使用, 您可以考虑将channelId
与画布的recordId
保持一致。loginName
:即辅助 SDK 用户的 userId,您应当尽量为不同的用户
提供不同的 loginName
接入我们的业务频道,以避免产生业务困扰。userType
:接入业务频道的用户身份,分为host
和guest
两种,当前这二者在辅助 SDK 业务内尚未有明显区别,expire
:Token 过期时间戳,单位为毫秒。例如:希望过期时间为 2025-01-01 00:00:00,则 expire 字段应设置为 1735660800000。
为方便您生成该 Token,我们提供了生成 Token 的代码示例供您参考,现包括 golang、Java 、Node 示例。
请注意,本文描述的鉴权 token 与画布 WebSDK 初始化 Token,及画布 REST 服务 AccessToken 在使用场景及生成方式上均有不同,请注意区分并避免混用。
引入 CDN 脚本资源
辅助 SDK 资源链接为:
您可以直接在 HTML 文件中引用我们的 CDN 资源,示例如下:
<script src="https://cdn-plaso-school.plaso.cn/infi/www/static/accessory-sdk/1.0.0/umd/index.js"></script>
注:我们不承诺 CDN 服务的稳定性,建议您自行下载 JS 文件并关联至应用中。
除了 umd 标准的 JS 脚本外,我们还提供了类型声明文件 来为您的开发提供便利,使用模式如下:
// 下载 d.ts 文件,并放置于您的 typescript 项目中,假定文件被命名且存放于跟目录下 infi.d.ts
// 下载地址为:https://cdn-plaso-school.plaso.cn/infi/www/static/accessory-sdk/1.0.0/umd/index.d.ts
// 在您的全局类型声明文件内,你可以通过这种方式对辅助 SDK 对象添加类型定义
interface Window {
InfiAccessorySdk: import('./infi').InfiAccessorySdkInterface;
}
加入业务频道
引入后,您可以在 JavaScript 代码中通过 window.InfiAccessorySDK
访问 SDK,并加入业务频道。示例如下:
const sdk = window.InfiAccessorySDK;
// 创建服务客户端并加入业务频道
const result = await sdk.createClient({
// 您需要自行生成该 token
token: 'token',
channelId: 'channelId',
loginName: 'loginName',
});
if (result.code === 0) {
sdkClient = result.payload;
console.log('SDK Client created:', sdkClient);
} else if (result.code === 4) {
console.error('SDK Client already initialized');
} else {
console.error('Error creating SDK Client:', result.code);
}
请确保将示例中的 token
、channel
等重要参数替换为实际有效的数值。
创建成功我们就可以使用 SDK Client 来获取业务子服务的实例,这里以签到子服务为例:
if (sdkClient) {
const { code, payload } = sdkClient.getSignInClient();
signInClient = payload;
console.log('Creating SignIn client:', code, payload);
} else {
console.error('SDK Client not initialized');
}
事件监听
我们为辅助 SDK 设计了事件系统,顶层和每个业务子服务都有比较完善的事件回调,你可以使用 SDK client 实例上的 on
方法开监听事件
sdkClient.on('CONNECTING', data => {
console.log('websocket connecting', data);
});
sdkClient.on('RECONNECTED', data => {
console.log('websocket reconnected', data);
});
sdkClient.on('ERROR', data => {
console.log('init error', data);
});
SDK Client 事件列表:
错误码
demo 示例
为方便您理解辅助 SDK 的使用模式,我们提供了 demo 代码 供您参考。
您仅需下载 accessorySDK
目录下的资源,并于浏览器中执行 index.html
即可。