Appearance
指色SDK接入文档(Unity小游戏)
如果您是已有老项目接入
或没有出海需求
,可以继续阅读该文档,否则建议您阅读SeegSdk
SDK版本
SDK兼容性
如果该gid是第一次使用,请跳过该章节
TIPS: 从老版本升级到1.1.0
,请务必注意兼容性问题
1.1.0
版本SDK的用户存档数据
不兼容,请1.1.0
版本前升级上来的,请在调用初始化前将Seeg.fixSdkVer
设置为1
1.1.3
版本增加了配置的请求域名https://gmcfg.aslk2018.com
,请注意添加到白名单- 如果是
抖音跳微信小游戏(巨量上报)
,本SDK暂不支持,请联系运营提供兼容SDK(仅替换dll文件以及增加上报和微信官方插件即可)
版本记录
版本号 | 修改时间 | 修改内容 | 下载地址 |
---|---|---|---|
1.1.3 | 2025-04-18 | SDK优化 | 下载 |
1.1.2 | 2025-03-17 | 1. 修复数数接口 2. 增加SDK测试功能 | 下载 |
1.1.1 | 2025-03-07 | 1. 优化初始化接口 2. 修复抖音推荐流直出 | |
1.1.0 | 2025-03-01 | 1.增加抖音推荐流直出支持 2. 集成数数SDK接入 3. 优化排行榜实现逻辑 4. 优化用户数据上报(注意兼容性) | |
1.0.8 | 2024-12-27 | 1. 修复个人排行榜不刷新bug 2. 优化排行榜的刷新机制 | 下载(不推荐) |
1.0.7 | 2024-09-24 | 1. 添加排行榜 | |
1.0.6 | 2024-08-22 | 1. 支持快手WASMSDK 2. 优化网络请求 | |
1.0.5 | 2024-08-06 | 1. 增加用户数据存储 | |
1.0.4 | 2024-08-05 | 1. 优化多平台接入 | |
1.0.3 | 2024-07-30 | 1. 增加读取配置 | 下载(不推荐) |
1.0.2 | 2024-06-24 | 1. 适配2022及以上版本 | |
1.0.1 | 2024-01-15 | 1. 初始版本 |
快速集成
- 导入平台SDK:
- 导入本SDK
SeegSdk.unitypackage
; - 本SDK依赖
Newtonsoft.Json
,如工程中未使用,请集成; - 在对应平台添加请求域名白名单(request):
https://gamesapi2.aslk2018.com
https://gmcfg.aslk2018.com
- 如果需要上报数数
https://moderate.aslk2018.com
- 由我运营提供gid参数:
- 一般gid参数我方运营命名为游戏标识
- 如果自行申请的appId,则需将appId和appSecret提供给我方运营,生成gid参数
- SeegExample提供示例,可按需参考;
选择平台宏(重要)
- 1.1.3及以上版本
在SeegSDK菜单栏切换平台宏
- 1.1.3以下版本
在Seeg.cs
文件中将对应的平台的宏打开即可
// 测试或web渠道
// #define PF_WEB
// 微信小游戏渠道
// #define PF_WX
// 头条小游戏渠道
// #define PF_TT
// 快手小游戏Native模式
// #define PF_KS
// 快手小游戏WASM(WebGL)版本
// #define PF_KS_WASM
- 请选择平台对应的宏,且保证其它平台的宏关闭
- 另外一种方式是完全注释掉这个,在Unity编辑器中设置,可以根据自己喜好设置,但务必保证同时只有一个宏开启
SDK接口
命名空间为ZhiSe
SDK初始化(必接)
Seeg.Init
/// <summary>
/// 初始化
/// </summary>
/// <param name="option">
/// gid: 游戏ID 运营提供的游戏标识,一般格式为[平台标识字符_游戏简拼],请勿与AppId弄混[必填]
/// loggerLevel: 日志等级,从0到5,日志等级越高能打印的信息越多,建议线上关闭[可选,默认0]
/// version: 版本号 如果运营没有特别说明,请勿修改[可选,默认1.0.0]
/// shushu: 是否开启数数,如果没有运营明确说明,请确认关闭[可选,默认false]
/// autoInitPF: 自动初始化平台,是否由SDK内部初始化平台的SDK,如果不需要,请确保初始化完平台SDK,再调用该初始化接口[可选,默认false]
/// fixSdkVer: SDK修复版本,请查看SDK兼容性章节[可选,默认为0]
/// code: 测试code,请勿自行填写,一般为测试时需要[可选,默认为null]
/// </param>
public static void Init(SdkOption option)
/// 已废弃,请使用Init(SeegSdkOption option)替代
public static void Init(string gid, int loggerLevel = 0, string version = "1.0.0", string code = null, int fixSdkVer = 0, bool shushu = false);
- 请尽早调用该接口,让sdk初始化;
- 除gid外,其它参数都有默认值,如果没有特殊需要,可以不用修改;
- 如果客户端有需要获取用户的登录态信息,可以调用登录监听接口
Seeg.OnLoginResult
,该接口一次监听只返回一次结果,1.0.7以下版本仅提供openId和userId信息
/// <summary>
/// 登录结果回调
/// </summary>
/// <param name="option">
/// success: 登录成功回调[可选]
/// userId: 用户ID
/// openId: 用户openID
/// abTest: AB测试组
/// nickname: 昵称
/// avatar: 头像
/// regTime: 注册时间
/// isTest: 是否是测试用户
/// fail: 登录失败回调[可选]
/// complete: 登录完成回调[可选]
/// </param>
public static void OnLoginResult(LoginOption option);
广告上报(必接)
Seeg.ReportAd
/// <summary>
/// 上报广告事件
/// </summary>
/// <param name="complete">是否观看完成</param>
public static void ReportAd(bool complete);
- 目前仅需上报激励视频
- 广告关闭后(无论是否观看完成),都要调用该接口(广告加载失败或展示失败,无需调用该接口)。可以理解为onClose回调里就调用该方法,只是区分是否看完的传参不同。
获取游戏配置
Seeg.GetGameConfig
SDK要求:>=1.0.3
/// <summary>
/// 获取游戏配置
/// </summary>
/// <param name="option">
/// success: 获取游戏配置成功回调[可选]
/// fail: 获取游戏配置失败回调[可选]
/// complete: 获取游戏配置完成回调[可选]
/// </param>
public static void GetGameConfig(GetGameConfigOption option);
用户数据上报
使用该接口前,务必先与我方运营确认
用户数据存档
SDK要求:>=1.0.5
/// <summary>
/// 获取用户数据
/// </summary>
/// <param name="option">
/// success: 获取用户数据成功回调[可选]
/// data: 用户数据
/// key: 用户数据key
/// value: 用户数据value
/// fail: 获取用户数据失败回调[可选]
/// complete: 获取用户数据完成回调[可选]
/// </param>
public static void GetUserData(GetGameDataOption option);
/// <summary>
/// 存储用户数据
/// </summary>
/// <param name="data">
/// key: 用户数据key,不要包含"."
/// value: 用户数据value
/// </param>
public static void SetUserData(Dictionary<string, object> data)
- 调用该接口,请务必提前与运营沟通,确定方案后使用
- 存储接口,一分钟不能超过6次,请注意频率
- 推荐的一种方案
// 启动游戏时,判断本地是否有数据
// 有则取本地数据
// 没有则取远程数据
// 游戏中,每分钟(建议1-3分钟)存档一次数据
// 如可以区分变动数据,每次也可以只上传有改动的数据,而不需要全量存档
个人信息上报
Seeg.ReportUserInfo
SDK要求:>=1.0.7
该方法一般与排行榜功能同时使用
/// <summary>
/// 上报用户信息
/// </summary>
/// <param name="userInfo">
/// avatar: 头像
/// nickname: 昵称
/// gender: 性别
/// </param>
public static void ReportUserInfo(UserInfo userInfo);
排行榜功能
SDK要求:>=1.0.7
排行榜分为两种类型:省份排行榜和个人排行榜。
省份排行榜
/// <summary>
/// 获取用户所在省份
/// </summary>
/// <param name="option">
/// success: 获取用户所在省份成功回调[可选]
/// province: 省份
/// provinceCode: 省份编码
/// fail: 获取用户所在省份失败回调[可选]
/// complete: 获取用户所在省份完成回调[可选]
/// </param>
public static void GetUserProvince(GetProvinceDataOption option);
/// <summary>
/// 获取省份排行榜
/// </summary>
/// <param name="option">
/// type: 排行榜唯一标识[必填]
/// timeType: 刷新周期:TimeType.DAY(天)、TimeType.WEEK(周)、TimeType.MONTH(月)、TimeType.ALL(终身)[可选,默认为ALL]
/// round: 轮次 仅支持当前轮次0、上一轮次1[可选,默认为0]
/// success: 获取省份排行榜成功回调[可选]
/// list: 省份排行榜列表
/// province: 省份
/// provinceCode: 省份编码
/// num: 上报总数
/// fail: 获取省份排行榜失败回调[可选]
/// complete: 获取省份排行榜完成回调[可选]
/// </param>
public static void GetProvinceList(GetProvinceRankOption option);
/// <summary>
/// 修改省份排行榜
/// </summary>
/// <param name="option">
/// type: 排行榜唯一标识[必填,该参数须与上报参数一致]
/// timeType: 刷新周期[可选,默认为ALL,该参数须与上报参数一致]
/// num: 增加数量[可选,默认为1]
/// </param>
public static void ChangeProvinceData(ProvinceRankOption option);
- 同一个省份排行榜类型,上报次数可配置,默认不限制上传次数。
个人排行榜
新版接口(推荐使用)
/// <summary>
/// 获取周期排行榜
/// </summary>
/// <param name="option">
/// type: 排行榜唯一标识[必填]
/// timeType: 刷新周期[可选,默认为WEEK]
/// round: 轮次 仅支持当前轮次0、上一轮次1[可选,默认为0]
/// success: 获取周期排行榜成功回调[可选]
/// list: 周期排行榜列表
/// uid: 用户ID
/// nickname: 昵称
/// avatar: 头像
/// num: 数量
/// rankData: 排名数据
/// fail: 获取周期排行榜失败回调[可选]
/// complete: 获取周期排行榜完成回调[可选]
/// </param>
public static void GetPersonRankList(GetRankOption option);
/// <summary>
/// 修改周期排行榜数据
/// </summary>
/// <param name="option">
/// type: 排行榜唯一标识[必填,该参数须与上报参数一致]
/// timeType: 刷新周期[可选,默认为WEEK,该参数须与上报参数一致]
/// num: 增加数量[可选,默认为1]
/// valueType: 值类型 1:累加 2:覆盖[可选,默认为2]
/// rankData: 排名数据[可选,默认为""]
/// </param>
public static void ChangePersonRankData(RankOption option);
旧版接口
/// 已废弃
public static void GetRankList(GetRankOption option);
/// 已废弃
public static void ChangeDayRankData(RankOption option);
/// 已废弃
public static void ChangeWeekRankData(RankOption option);
/// 已废弃
public static void ChangeMonthRankData(RankOption option);
//// 已废弃
public static void ChangeLifeRankData(RankOption option);
- 如果必须兼容老版本数据才使用该接口
直玩数据上报
SDK要求:>=1.1.0
/// <summary>
/// 上报直玩数据到服务端(用于游戏内展示直玩入口)
/// </summary>
/// <param name="scene">
/// 场景
/// 1: 离线收益
/// 2: 体力恢复
/// 3: 重要事件
/// </param >
/// <param name="contentIds">
/// 自定义文案contentID数组(需在后台申请开通直玩能力后获取)
/// </param>
/// <param name="timestamp">
/// 可领取奖励的时间戳(毫秒单位),例如:体力满的时间/离线收益可领取时间
/// </param>
/// <param name="extra">
/// 自定义扩展字段(对象格式),将在直玩启动参数中回传给游戏
/// </param>
public static void SetZWData(int scene, string[] contentIds, long timestamp, string extra);
- 本接口仅提供了服务端支持,完整调用请参考文档:推荐流直出小游戏能力接入指引
下面,我们给出一种实现方式以供参考,请注意,以下代码仅为演示逻辑流程,代码为伪代码
// 在首页判断是否来自抖音推荐流直出
if(TT.GetLaunchOptionsSync().Scene.ToString().endsWith('3041')){ // 注意如果是重复可以进入的判断,则仅需判断第一次
// 进入对应的界面
// 如果有多种场景,也可以拿到query下的feed_game_scene 或 feed_game_extra 进行对应的跳转
}
// 在跳转成功后,一定要上报该接口
// 注意上报该接口后,抖音会停止网络相关的访问,所以要确保远程资源已经下载完毕
// 同时也只有在这个方法上报后,抖音才会显示直玩入口,所以也不建议太晚上报
var param = new JsonData();
int id = 7001;
long time = 100;
param["sceneId"] = id;
param["costTime"] = time;
TT.ReportScene(param);
// 在对应的界面,比如领取界面,进行授权判断
// 订阅单场景,我们一般建议在领取的时候弹出,然后顺便上报给服务器下一次领取的时间
var contentIDs = JsonData.NewJsonArray();
contentIDs.Add("CONTENT123");
contentIDs.Add("CONTENT234");
var param = new JsonData
{
["type"]: "play", // play=直玩
["scene"]: 1, // 一次只能订阅一个
["contentIDs"]: contentIDs,
};
// 如果选择的是all,则必须是用户主动操作的
var param = new JsonData
{
["type"]: "play", // play=直玩
["allScene"]: true, // 全场景订阅
};
TT.CheckFeedSubscribeStatus({
param,
success: (res) => {
if (res.status) {
// 已订阅回调
return;
}
// 继续请求
var param2 = new JsonData
{
["type"]: "play", // play=直玩
["allScene"]: true, // 全场景订阅
};
TT.RequestFeedSubscribe(param2, (res) => {
if (res.success) {
// 订阅成功回调
} else {
// 用户未订阅
}
},
fail: (errNo, errMsg) => {
// 订阅失败
}
});
},
fail: (err: { errNo: number, errMsg: string }) => {
// 查询失败
}
// 订阅成功后,向服务器请求下次成功的领取时间
// 离线收益场景是1 体力恢复场景是2 重大时间提醒场景是3
Seeg.SetZWData(scene, new string[]{"CONTENT_ID"}, time);
// 如果需要统计从推荐流直出来的用户,可以使用tt.onFeedStatusChange接口监听
数数SDK (ThinkingData)
SDK要求:>=1.1.0
/// <summary>
/// 上报用户信息
/// </summary>
/// <param name="type">
/// 类型
/// user_set:对用户表进行操作,覆盖一个或多个用户属性,如果该属性已有值存在,覆盖先前值
/// user_setOnce:对用户表进行操作,初始化一个或多个用户属性,如果该属性已有值存在,则忽略本次操作
/// user_add:对用户表进行操作,为一个或多个数值型用户属性做累加计算
/// user_unset:对用户表进行操作,清空该名用户的一个或多个用户属性的属性值
/// user_del:对用户表进行操作,删除该名用户
/// user_append:对用户表进行操作,为用户的列表类型属性值添加元素
/// user_uniq_append: 对用户表进行操作,为用户的列表类型属性值添加元素,并会进行一次全列表去重(去重保证前后原有的元素顺序不变)
/// </param>
/// <param name="param">
/// key: 参数名
/// value: 参数值
/// </param>
public static void ReportUserInfo(string type, Dictionary<string, object> param);
// <summary>
/// 上报事件
/// </summary>
/// <param name="name">
/// 事件名
/// </param>
/// <param name="param">
/// key: 参数名
/// value: 参数值
/// </param>
public static void ReportEvent(string name, Dictionary<string, object> param);
/// <summary>
/// 上报加载完成
/// </summary>
/// <param name="time">
/// 加载时间
/// </param>
public static void LoadComplete(int time);
- 如果要使用数数,则必须在SDK的初始化传入shushu参数为true
- SDK已集成打点:注册、登录和在线,其它打点请参考数数打点模板
自定义网络请求
/// <summary>
/// 请求接口
/// </summary>
/// <param name="router">
/// 路由
/// </param>
/// <param name="param">
/// key: 参数名
/// value: 参数值
/// </param>
/// <param name="success">
/// 成功回调
/// </param>
/// <param name="fail">
/// 失败回调
/// </param>
public static void Req(string router, Dictionary<string, object> param, ZhiSe.Bridge.OnSuccess<string> success, ZhiSe.Bridge.OnFail fail);
- 仅限用于访问服务器内部接口,不支持第三方服务器或其它网址、API访问
常见问题(FAQ)
抖音平台没有登录数据
- 请先检查是否调用了TT.InitSDK(), 如果没调用 大于1.1.0版本(不含),请初始化传入autoInitPF参数为true 其它版本或autoInitPF参数为false,请先调用平台初始化,并回调后再调用sdk的初始化
提示非投放场景
- 正常打印,无需关注
运营提示没有数据
- 检查gid是否正确,例如是否填写成AppId
- 检查是否调用了初始化接口
- 是否调用了Seeg.reportAd方法
推荐流直出报错
- 请联系运营,抖小开平后台设置是否正确
- 请确保setZWData方法传入的content_id和scene与运营配置的一致
数数打点没有数据
- 请确保开通了数数权限,必须找运营开通,每一个gid都需要单独处理
- 初始化确认ssReport设置为true
- 确认数数的域名已经添加到白名单:https://moderate.aslk2018.com