Skip to content

SDK 快速接入

这个页面面向想用最短路径从一个新项目走到运行时拿到实验分组的工程师。读完后你会有:

  • 一个项目、一个含一个实验的层、一把 API key;
  • 一段返回了实验分组的 SDK 或 HTTP 调用;
  • 一条记录到该实验上的曝光。

如果还没决定用哪种接入形态,先看 SDK 选型

开始之前

  • 一个你能访问的项目(演示空间默认是 6666)。
  • 在该项目上拥有 Admin 角色,或者由队友帮你拿到 token。
  • 一个在跑的实验,至少一个参数 —— 没有的话先看 创建实验

控制台 Home,App integration 卡片指向 SDK Integration 与 Data Ingestion

1. 拿到项目 ID 与 API key

打开左侧的 Settings → SDK&Key,页面包含:

  • SDK setup —— 一组卡片,展示项目当前可用的 SDK:今天 gohttp 已可用, AndroidiOSJavaScriptC++ 标记为 Coming soon
  • API keys —— 项目创建时会自带一把默认 key,命名规则 {projectId}_default_{suffix}(如 6666_default_193444),从第一天起就是 Active。 快速接入用默认 key 即可,也可以点 + New API Key 单独创建一把。Key 的名称只接受 字母、数字与下划线。

把项目 ID(/app/ 后那段数字)和 token 复制下来。完整 key 管理见 API 密钥

2. 初始化 SDK 或签名 HTTP 请求

挑一个匹配你运行时的代码片段。今天可用的接入只有两条:Go 服务端 SDK 与 HTTP API。 C++ 服务端 SDK 以及三种客户端 SDK 在 Settings → SDK&Key 下都是 Coming soon, 如需提前接入请联系支持。

Go 服务端 SDK

bash
go get github.com/abetterchoice/go-sdk
go
package main

import (
    "context"
    abc "github.com/abetterchoice/go-sdk"
)

func main() {
    defer abc.Release()
    abc.Init(
        context.Background(),
        []string{"6666"},                    // 项目 ID
        abc.WithSecretKey("YOUR_API_TOKEN"), // Settings → SDK&Key 的 token
    )
}

HTTP API

bash
ak="your_secret_key_name"
token="your_api_token"
et=$(date +%s)
sig=$(echo -n "${token}${ak}${et}" | md5)

curl -X POST 'https://openapi.abetterchoice.ai/abc/get_experiments' \
  -H "Content-Type: application/json" \
  -H "X-Ak: $ak" -H "X-Et: $et" -H "X-Es: $sig" \
  -d '{"project_id":"6666","unit_id":"user_id_1"}'

签名规则与完整请求格式见 HTTP API 鉴权HTTP API 端点

3. 拉取分组并上报一条曝光

unit_id 用一个能稳定标识用户的字符串(用户 ID、会话 ID、设备 ID 都可以)。 平台保证同一 unit_id 始终落进同一个分组。

go
// Go
ctx := abc.NewUserContext("user_id_1")
exp, err := ctx.GetExperiment(context.Background(), "6666", "abc_layer_name")
if err == nil {
    show := exp.GetBoolWithDefault("should_show_banner", false)
    abc.LogExperimentExposure(context.Background(), "6666", exp)
    _ = show
}

HTTP 形态下,响应里会带回选中的分组与参数:

json
{
  "ret_code": 100,
  "exp_data": {
    "abc_layer_name": {
      "experiment_key": "experiment_for_button",
      "group_id": 8942824,
      "group_key": "Treatment_A",
      "params": { "color": "blue", "size": "20" }
    }
  }
}

返回的 group_id 不是 -1,就说明分组成功,并且 SDK 或平台已记录一条该实验的曝光。

后续阅读