跳到主要内容
版本:v7

TapSDK Unity 接口

XDSDK v7 已经内置并初始化 TapSDK v4,游戏侧不需要自行初始化 TapSDK。需要使用 TapSDK 能力时,可以参考 TapSDK 官方文档对接口的说明,但使用的时候请调用 XDGTapSDKXDGTapPlusSDK 封装接口。

依赖与入口

Unity 工程请先参考 Unity 接入配置 集成 XDSDK。XDSDK 会在初始化时完成 TapSDK 相关配置,游戏侧只需要在 XDGCommon.InitSDK 成功后调用下列业务接口。

能力依赖模块入口类
TapSDK 登录com.xd.sdk.account + com.xd.sdk.tapXDGAccount
实名和防沉迷com.xd.sdk.account + com.xd.sdk.tap
TapDB 数据分析com.xd.sdk.tapXDGTapSDK
内嵌动态com.xd.sdk.tapXDGTapSDK
正版验证、DLCcom.xd.sdk.tapXDGTapSDK
TapTap 评价com.xd.sdk.tapXDGTapSDK
更新唤起com.xd.sdk.tapXDGTapSDK
成就系统com.xd.sdk.tap.plusXDGTapPlusSDK
云存档com.xd.sdk.tap.plusXDGTapPlusSDK
using XD.SDK.Tap;
using XD.SDK.Tap.Plus;

TapTap 登录

请使用 XDSDK 的登录接口

实名和防沉迷

XDSDK 在国内登录流程中已包含实名和防沉迷流程,游戏不需要自行处理相关内容。

TapDB 数据分析

对应 TapSDK 文档:TapDB 客户端接入

发送普通事件请使用 XDSDK 的事件上报接口

以下接口请使用 XDGTapSDK

using XD.SDK.Tap;
方法说明
DeviceInitialize(...)初始化设备属性,只在字段为空时写入。
DeviceUpdate(...)更新设备属性,新值会覆盖旧值。
DeviceAdd(...)累加设备数值属性。
UserInitialize(...)初始化账号属性,只在字段为空时写入。
UserUpdate(...)更新账号属性。
UserAdd(...)累加账号数值属性。
AddCommonProperty(string key, string value)添加单个静态通用事件属性。
AddCommon(...)批量添加静态通用事件属性。
ClearCommonProperty(string key)清除单个静态通用事件属性。
ClearCommonProperties(string[] keys)批量清除静态通用事件属性。
ClearAllCommonProperties()清除全部静态通用事件属性。
RegisterDynamicProperties(IDynamicProperties properties)注册动态通用事件属性,每次上报事件时由 TapSDK 拉取最新值。

properties 支持 JSON 字符串或 Dictionary<string, object>。建议优先使用 Dictionary<string, object>,避免 JSON 格式错误。动态属性回调可能不在 Unity 主线程执行,回调里不要访问 GameObjectPlayerPrefsTimeSceneManager 等 Unity API。需要上报的动态值应提前缓存成普通 C# 数据。

using System.Collections.Generic;
using XD.SDK.Tap;
using XD.SDK.Tap.Public;

XDGTapSDK.DeviceInitialize(new Dictionary<string, object>
{
{ "first_server", "server_1" }
});

XDGTapSDK.UserUpdate(new Dictionary<string, object>
{
{ "current_server", "server_2" },
{ "level", 18 }
});

XDGTapSDK.AddCommon(new Dictionary<string, object>
{
{ "build_type", "release" }
});

public class CachedDynamicProperties : IDynamicProperties
{
private readonly Dictionary<string, object> snapshot;

public CachedDynamicProperties(Dictionary<string, object> snapshot)
{
this.snapshot = snapshot;
}

public Dictionary<string, object> GetDynamicProperties()
{
return snapshot;
}
}

XDGTapSDK.RegisterDynamicProperties(
new CachedDynamicProperties(new Dictionary<string, object>
{
{ "battle_mode", "pve" }
}));

内嵌动态

对应 TapSDK 文档:内嵌动态开发指南

方法说明
SetMomentCallback(Action<int, string> callback)设置动态回调。
MomentOpen()打开 TapTap 动态页面。
MomentOpenScene(string sceneId)打开指定场景动态页面。
MomentPublish(PublishMetaData metaData)发布动态,PublishMetaData 包含内容、图片路径和视频路径。
MomentClose(string title, string content)关闭动态页面,并展示标题和内容提示。
MomentClose()直接关闭动态页面。
MomentFetchNotification()拉取动态通知,结果通过动态回调返回。
using System.Collections.Generic;
using TapSDK.Moment;
using XD.SDK.Tap;

XDGTapSDK.SetMomentCallback((code, message) =>
{
// 根据 code 和 message 处理动态状态
});

XDGTapSDK.MomentOpen();
XDGTapSDK.MomentOpenScene("scene_id");
XDGTapSDK.MomentFetchNotification();

var metaData = new PublishMetaData(
content: "动态文字内容",
imagePaths: new List<string> { "file:///path/to/image.png" });
XDGTapSDK.MomentPublish(metaData);

正版验证和 DLC

对应 TapSDK 文档:正版验证开发指南

方法说明
RegisterLicenseCallback(ITapLicenseCallback callback)注册正版验证回调。
CheckLicense(bool force = false)检查当前用户是否拥有游戏授权,forcetrue 时强制重新校验。
RegisterDLCCallback(ITapDlcCallback callback)注册 DLC 查询和购买回调。
QueryDLC(string[] dlcList)查询 DLC 购买状态。
PurchaseDLC(string dlc)发起 DLC 购买。
using System.Collections.Generic;
using TapSDK.License;
using XD.SDK.Tap;

public class LicenseCallback : ITapLicenseCallback
{
public void OnLicenseSuccess()
{
// 正版验证成功
}

public void OnLicenseFailed()
{
// 正版验证失败
}
}

public class DlcCallback : ITapDlcCallback
{
public void OnQueryCallBack(TapLicenseQueryCode code, Dictionary<string, object> queryList)
{
// DLC 查询结果
}

public void OnOrderCallBack(string sku, TapLicensePurchasedCode status)
{
// DLC 购买结果
}
}

XDGTapSDK.RegisterLicenseCallback(new LicenseCallback());
XDGTapSDK.CheckLicense();

XDGTapSDK.RegisterDLCCallback(new DlcCallback());
XDGTapSDK.QueryDLC(new[] { "dlc_sku_id" });
XDGTapSDK.PurchaseDLC("dlc_sku_id");

TapTap 评价

对应 TapSDK 文档:评价开发指南

方法说明
OpenReview(string appId)跳转到当前游戏的 TapTap 评价页面。移动端会把 appId 传给原生桥接;PC 端使用 TapSDK 的评价入口。
using XD.SDK.Tap;

XDGTapSDK.OpenReview("tap_app_id");

更新唤起

对应 TapSDK 文档:更新唤起开发指南

方法说明
CheckForceUpdate()使用 TapTap 开发者中心配置的更新规则检查强更。
UpdateGame(string appId, Action onCancel)游戏自行判断需要更新时调用,onCancel 在玩家取消更新时触发。
using XD.SDK.Tap;

// 使用 TapTap 开发者中心的强更配置
XDGTapSDK.CheckForceUpdate();

// 游戏自己判断有新版本后触发
XDGTapSDK.UpdateGame("tap_app_id", () =>
{
// 玩家取消更新
});

成就系统

对应 TapSDK 文档:成就系统开发指南

以下接口请使用 XDGTapPlusSDK

using XD.SDK.Tap.Plus;
方法说明
RegisterAchievementCallback(ITapAchievementCallback callback)注册成就回调。
Unlock(string achievementId)解锁指定成就。
Increment(string achievementId, int count)增加分步成就步数。
AchievementSetToastEnable(bool bEnable)设置是否展示成就达成提示。
ShowAchievements()打开成就展示页。

ITapAchievementCallback 需要实现:

方法说明
OnAchievementSuccess(int code, TapAchievementResult result)成就操作成功。result 包含成就 ID、成就名称、成就类型和当前步数。
OnAchievementFailure(string achievementId, int errorCode, string errorMsg)成就操作失败。
using TapSDK.Achievement;
using XD.SDK.Tap.Plus;

public class AchievementCallback : ITapAchievementCallback
{
public void OnAchievementSuccess(int code, TapAchievementResult result)
{
// 成就操作成功
}

public void OnAchievementFailure(string achievementId, int errorCode, string errorMsg)
{
// 成就操作失败
}
}

XDGTapPlusSDK.RegisterAchievementCallback(new AchievementCallback());
XDGTapPlusSDK.Unlock("achievement_id");
XDGTapPlusSDK.Increment("step_achievement_id", 1);
XDGTapPlusSDK.AchievementSetToastEnable(true);
XDGTapPlusSDK.ShowAchievements();

云存档

对应 TapSDK 文档:云存档开发指南

方法说明
RegisterCloudSaveCallback(ITapCloudSaveCallback callback)注册 CloudSave 统一状态回调,返回 TapSDK 的 resultCode。
CreateArchive(ArchiveMetadata metadata, string archiveFilePath, string archiveCoverPath)创建存档并上传云端,返回 Task<ArchiveData>
UpdateArchive(string archiveUuid, ArchiveMetadata metadata, string archiveFilePath, string archiveCoverPath)更新指定存档。
DeleteArchive(string archiveUuid)删除指定存档。
GetArchiveList()获取当前用户的存档列表。
GetArchiveData(string archiveUuid, string archiveFileId)下载指定存档文件,返回 byte[]
GetArchiveCover(string archiveUuid, string archiveFileId)获取指定存档封面,返回 byte[]

ArchiveMetadata 用于创建和更新存档,包含存档名称、存档描述、额外信息和游戏时长。ArchiveData 为服务端返回的存档数据。

云存档接口返回 Task,请在 async 方法中调用,并处理异常。官方限制仍然适用:单个存档文件不超过 10 MB,封面文件不超过 512 KB。

using System.Collections.Generic;
using TapSDK.CloudSave;
using XD.SDK.Tap.Plus;

var metadata = new ArchiveMetadata(
archiveName: "存档名称",
archiveSummary: "存档描述",
archiveExtra: "额外信息",
archivePlaytime: 3600);

string archiveFilePath = "path/to/archive/file";
string archiveCoverPath = "path/to/cover/image";

ArchiveData archive = await XDGTapPlusSDK.CreateArchive(
metadata,
archiveFilePath,
archiveCoverPath);

List<ArchiveData> archives = await XDGTapPlusSDK.GetArchiveList();
byte[] archiveBytes = await XDGTapPlusSDK.GetArchiveData(
archive.Uuid,
archive.FileId);