下面是全部官方 SDK,点任一项直达对应的接入说明。
移动端
支持矩阵
| 平台 | 包名 / 入口 | 分发方式 | 版本 | 最低要求 | 自动采集 |
|---|---|---|---|---|---|
| 网站 | w.js | <script> 标签 | 1.0.0 | 见 JavaScript(w.js) | 页面浏览等,见 JavaScript(w.js) |
| Vue / Nuxt / React / Next.js | 无独立包,复用 w.js | 手工接入 | — | — | 同 w.js |
| 微信 / 支付宝 / 抖音小程序 | @webcount/miniprogram(入口 /wx、/my、/tt) | npm | 0.1.0 | 开发者工具支持 npm 构建 | 启动、前后台、页面浏览与离开、分享、收藏;点击默认关闭 |
| Android | com.webcount.WebCount | 仓库里的 Kotlin 源码,没有 Maven 坐标 | 0.1.0 | minSdk 21 | 需手动转发生命周期;崩溃需手动上报 |
| iOS | WebCount | SPM | 0.1.0 | iOS 13 | 启动、前后台、未捕获异常与信号崩溃 |
| HarmonyOS | @webcount/harmony | 仓库源码,没有 ohpm 描述文件 | 0.1.0 | API 12(控制台标注) | 取决于你实现的适配层 |
| React Native | @webcount/react-native | npm | 0.1.0 | react-native ≥ 0.72 | 启动、前后台(AppState)、React Navigation 页面 |
| Flutter | webcount_flutter | pub | 0.1.0 | Dart ≥ 3.0、Flutter ≥ 3.10 | Navigator 页面;其余取决于原生 SDK |
| uni-app | @webcount/uni-app | npm | 0.1.0 | — | 小程序目标同小程序 SDK;App 目标取决于适配层 |
| Node.js 服务端 | WebCount 类(@webcount/node) | 源码文件 | 1.0.0 | Node.js 18(需全局 fetch) | 不适用 |
| PHP 服务端 | Webcount\WebCount | 源码文件 | 1.0.0 | PHP 8.0、curl 扩展 | 不适用 |
| Python 服务端 | webcount.WebCount | 源码文件 | 1.0.0 | Python 3.7,仅标准库 | 不适用 |
| Java 服务端 | com.webcount.WebCount | 源码文件 | 1.0.0 | Java 11 | 不适用 |
| Go 服务端 | package webcount | 源码文件 | 1.0.0 | Go 1.18 | 不适用 |
各平台详细文档:
- 网站:JavaScript(w.js)、Vue 接入指南、Nuxt 接入指南、React 接入指南、Next.js 接入指南、客服组件 w-chat.js、CMS / 建站工具接入
- 小程序:微信小程序、支付宝小程序、抖音小程序
- 原生 App:Android、iOS、HarmonyOS
- 跨平台框架:React Native、Flutter、uni-app
- 服务端:Node.js 服务端 SDK、PHP 服务端 SDK、Python 服务端 SDK、Java 服务端 SDK、Go 服务端 SDK
包名里的 webcount
代码层的包名、类名和模块名沿用历史标识 webcount / WebCount(例如 @webcount/miniprogram、com.webcount:android),它们就是 TapCub SDK,不需要另找「TapCub」命名的包。
小程序与 App 端的安装命令以控制台为准
控制台 控制台应用统计配置SDK 代码 与 控制台小程序统计配置SDK 代码 会按平台给出安装命令、已填好站点标识和收数地址的初始化代码。本文的包名与版本与这两页一致。
客户端 SDK 能力对比
小程序 SDK 自带 JavaScript 核心,HarmonyOS、React Native 与 uni-app 的 App 目标复用 @webcount/app-sdk 核心,两套核心的队列、重试与远程配置行为一致(React Native 需传入 AsyncStorage 才持久化);Android 与 iOS 是各自的原生实现,0.1.0 版本的能力比 JavaScript 核心少。Flutter 只做桥接,能力等于它所调用的原生 SDK。
| 能力 | 小程序 / HarmonyOS / React Native / uni-app | Android 0.1.0 | iOS 0.1.0 |
|---|---|---|---|
| 本地持久队列 | 有:分片写入本地存储,默认上限 10000 条、7 天、1 MB | 无:仅内存 | 无:仅内存 |
| 失败重试 | 429 / 5xx / 网络错误按 1 s 起指数退避,上限 300 s;配置多个收数地址时连续失败 10 次切换 | 无退避,失败的批次留在内存等下次发送 | 无退避,失败的批次留在内存等下次发送 |
| 远程配置(SDK 远程配置卡片) | 生效 | 不读取 | 不读取 |
| 启动 / 前后台事件 | 自动(React Native 需传入 AppState;HarmonyOS / uni-app App 目标由适配层提供) | 需手动调用 onLaunch / onShow / onHide | 自动 |
| 页面事件 | 小程序自动;React Native 用 navigationHook;其他取决于适配层 | 手动 trackScreen | 手动 trackScreen |
| 崩溃 | 适配层提供崩溃钩子时上报 | 手动 reportException | 自动捕获未捕获异常与信号 |
用户档案(setProps) | 写入用户档案 | 注册为事件公共属性 | 注册为事件公共属性 |
客户端 SDK 的共同约定
两段式初始化。 所有客户端 SDK 都先 preInit(只保存配置、绑定生命周期,不联网、不读设备信息),再在用户同意隐私政策后调用 init(拉取站点配置、生成设备 ID、开始发送)。站点不要求同意时,可以在启动时连续调用两者。
应用标识必须登记。 非网站端的上报以 appId(小程序 appid、Android applicationId、iOS Bundle ID、HarmonyOS bundleName)作为来源校验:SDK 把它放在上报 URL 的主机名位置,未在控制台登记的应用上报会被静默拒收。在 控制台应用统计配置SDK 代码 或 控制台小程序统计配置SDK 代码 里点「添加应用标识」登记,值须与初始化时的 appId 一致。React Native 与 Flutter 复用 iOS / Android 的应用标识,uni-app 复用小程序与 App 的应用标识。
收数地址。 endpoint 填控制台「SDK 代码」页显示的收数地址(只写域名,不带路径);SDK 自动拼接 /api/v1/pulse 发送事件、/api/v1/pulse/cfg 拉取站点配置。示例代码中统一写作 。
套餐。 小程序与 App 上报需要套餐包含对应平台组:免费版只含网站,专业版及以上包含网站、小程序与 App。套餐不含时,上报会被采集端静默丢弃。见 套餐与额度。
身份与采集档位。 持久设备 ID 与 login 等身份操作只在项目处于识别模式(采集档位 3)时生效;匿名模式下 SDK 仍上报事件,但不写设备 ID,身份调用被忽略。见 接入前的隐私选择 与 身份关联。
国内模式。 初始化时传 region: 'cn'(各端写法见对应页面)后,SDK 必须在你调用授予同意的方法之后才开始采集;请在用户同意之后再调用 init。
验证。 接入后打开 控制台应用统计实时 或 控制台小程序统计实时,看到 $app_start 或 $mp_launch 即表示链路已通。
服务端 SDK 共用协议
五种服务端 SDK 都是对同一个接口的薄封装:POST /api/v1/track,请求头 Authorization: Bearer 加 API 密钥,请求体 { "events": [ … ] }。密钥在 控制台配置设置API 密钥 创建,权限范围须包含 track:write(界面显示为「服务端 Track」),密钥以 wck_ 开头,只在创建时显示一次。
https://app.tapcub.com/api/v1/track track:write每个事件对象支持以下字段(未列出的字段会导致整批参数校验失败):
typestring默认: trackeventstringlogin_idstring | nulllogin_id_typestring默认: logindevice_idstring | nullidentitiesobjecttimeinteger默认: 接收时间insert_idstringsession_idstring | nullpropertiesobjectunsetstring[]incrementobjectappendobjectitem_typestringitem_idstringgroupstringcontextobject限制与语义:
- 单次请求 1–1000 个事件;每个 API 密钥每分钟最多 600 次请求,超过返回 429。
- 查询参数
debug=1:只校验、不落库,返回每条事件的校验结果;validation_behavior=enforce:带任何警告的事件整条拒绝。 - 带
insert_id的事件按「先到的生效」去重:同批内重复、以及与已入库事件(时间相差 1 天以内)重复的都会丢弃。track_update/track_overwrite按insert_id定位已入库事件并合并 / 覆盖属性。 - 成功响应形如
{ "received": 2, "accepted": 2, "rejected": 0, "events": 2, "results": [] },results只列出失败或带警告的条目(index、ok、warnings)。 - 缺少密钥返回 401
NO_API_KEY;密钥无效或缺少track:write返回 401BAD_API_KEY;请求体不符合上面的结构返回 400VALIDATION。
服务端事件的接入思路与它和前端数据的融合方式见 服务端采集与融合 与 服务端事件与日志导入;访问日志式的 /api/v1/server/events 接口见 服务端事件。
怎么选
- 只有网站:用
w.js,见 JavaScript(w.js)。单页应用框架按对应接入指南处理路由。 - 小程序:原生开发用
@webcount/miniprogram;uni-app 项目用@webcount/uni-app选择核心,H5 目标改用w.js。 - 原生 App:iOS 与 Android 各接各的原生 SDK;HarmonyOS 需要你实现适配层。
- React Native:用纯 JavaScript 的
@webcount/react-native,不依赖原生模块。 - 订单、支付、退款这类以服务端为准的事实:用服务端 SDK 或直接调用
/api/v1/track,并用insert_id防止重复。
版本与升级
当前小程序、App 与跨平台 SDK 均为 0.1.0,服务端 SDK 的库版本标识为 1.0.0。项目可在 SDK 远程配置里设置「最低 SDK 版本」:使用 JavaScript 核心的 SDK(小程序、HarmonyOS、React Native、uni-app)低于该版本时停止上报并触发 sdk_outdated 错误;Android 与 iOS 0.1.0 不读取远程配置,不受此项影响。远程配置的完整说明见 采集控制与远程配置,版本变更记录见 更新日志。