客户端接入
介绍
TapSDK 提供了一套可供游戏开发者收集账号数据的 API。 系统会收集账号数据并进行分析,最终形成数据报表,帮助游戏开发者分析账号行为并优化游戏。
环境要求
- Unity
- Android
- iOS
- UE4
- Unity 2019.4 或更高版本
- iOS 11 或更高版本,Xcode 版本 14.1 或更高版本
- Android 5.0(API level 21)或更高版本
Android 5.0(API level 21)或更高版本
iOS 11 或更高版本,Xcode 版本 14.1 或更高版本
- 安装 UE 4.26 及以上版本
- iOS 12 或更高版本
- Android 5.0(API level 21)或更高版本
- macOS 10.14.0 或更高版本
- Windows 7 或更高版本
支持平台:Android / iOS / Windows / macOS
权限说明
- Unity
- Android
- iOS
- UE4
该模块需要如下权限:
| 权限 | 使用目的 | 权限申请时机 |
|---|---|---|
| 获取网络状态 | 用于检测当前网络连接是否有效 | 用户首次使用该功能时会申请权限 |
| 读写存储权限(可选) | 用于存储用户标识 | 用户首次使用该功能时由开发者申请权限 |
| 读取电话状态(可选) | 用于更加精确地描述用户画像 | 用户首次使用该功能时由开发者申请权限 |
对于可选权限,SDK 不会主动发起申请,只在用户已授权的情况下获取对应数据,需要由开发者决定是否申请。
该模块将在应用中添加如下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
集成前准备
- 参考 准备工作 创建应用、开启应用配置开通数据分析服务、绑定 API 域名;
SDK 集成
请先下载 TapSDK,并添加相关依赖。
- Unity
- Android
- iOS
- UE4
如果只需要单独使用 TapDB,可以只导入依赖 common 和 tapdb。
Unity v3.7.1 及更高版本,还需要导入 com.leancloud.storage。
SDK 可以通过 Unity Package Manager 导入或手动导入,二者任选其一。请根据项目需要选择。
方法一:使用 Unity Package Manager
NPMJS 安装
从 3.25.0 版本开始,TapSDK 支持了 NPMJS 安装,优势是只需要配置版本号,并且支持嵌套依赖。
在项目的 Packages/manifest.json 文件中添加以下依赖:
"dependencies":{
"com.taptap.tds.tapdb":"3.30.3",
"com.taptap.tds.common":"3.30.3",
}
但需要注意的是,要在 Packages/manifest.json 中 dependencies 同级下声明 scopedRegistries:
"scopedRegistries": [
{
"name": "NPMJS",
"url": "https://registry.npmjs.org/",
"scopes": ["com.tapsdk", "com.taptap", "com.leancloud"]
}
]
GitHub 安装
在项目的 Packages/manifest.json 文件中添加以下依赖:
"dependencies":{
"com.taptap.tds.common":"https://github.com/taptap/tapsdk-v3-unity.git?path=/Common#3.30.3",
"com.taptap.tds.tapdb":"https://github.com/taptap/tapsdk-v3-unity.git?path=/DB#3.30.3",
"com.leancloud.storage":"https://github.com/leancloud/csharp-sdk-upm.git#storage-2.3.0",
}
在 Unity 顶部菜单中选择 Window > Package Manager 可查看已经安装在项目中的包。
方法二:手动导入
-
在 下载页 找到 TapSDK Unity 下载地址,下载
TapSDK-UnityPackage.zip。 -
在 Unity 项目中依次转到 Assets > Import Packages > Custom Packages,从解压后的
TapSDK-UnityPackage.zip中,选择希望在游戏中使用的 TapSDK 包导入,其中:
TapTap_Common.unitypackageTapSDK 基础库,必选。TapTap_TapDB.unitypackageTapTap 数据分析库,必选。
- 从 LeanCloud-SDK 下载页 中下载并解压 LeanCloud-SDK-Storage-Unity.zip,然后将 Plugins 文件夹拖拽至 Unity 即可。
如果只需要单独使用 TapDB,可以只导入依赖 common 和 tapdb。
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
// ...
implementation (name:'TapCommon_3.30.3', ext:'aar') // 必选:TapSDK 基础库
implementation (name:'TapDB_3.30.3', ext:'aar') // 数据统计
implementation 'com.taptap:lc-storage-android:8.2.24'
}
如果只需要单独使用 TapDB,可以只导入依赖 common 和 tapdb。
// 登录
TapBootstrapSDK.framework
TapCommonSDK.framework
// 3.29.4 版本需要添加 LibProtocolBuffers
LibProtocolBuffers.framework
TapLoginSDK.framework
LeanCloudObjc.framework
TapCommonResource.bundle
TapLoginResource.bundle
//TapDB
TapDB.framework
在 Build Settings 中的 link -> Other Linker Flags 中加入: -ObjC 和 -Wl -ld_classic
需要为 Xcode 工程引入下列依赖的框架或库
| 名词 | 含义 | 备注 |
|---|---|---|
| AdSupport.framework | 用来 获取设备广告标识,跟踪设备 | |
| iAd.framework | 广告框架 | 设置为 optional |
| AdServices.framework | 广告框架 | 设置为 optional |
| AppTrackingTransparency.framework | iOS 14 新增 app 追踪框架(若无需在 iOS 14 以上追踪 IDFA 可不添加该依赖) | 设置为 optional |
| SystemConfiguration.framework | ||
| CoreMotion.framework | ||
| CoreTelephony.framework | ||
| Security.framework | 用来持久化存储设备 ID | |
| libc++.tdb | ||
| libresolv.tbd | ||
| libz.tbd | ||
| libsqlite3.0.tbd |
安装插件
- 下载 TapSDK UE4,TapSDK-UE4-xxx.zip 解压后将
TapDB、TapCommon文件夹 Copy 到项目的Plugins目录中 - 重启 Unreal Editor
- 打开 编辑 > 插件 > 项目 > TapTap,开启
TapDB模块
添加依赖
在 Project.Build.cs 中添加所需模块:
PublicDependencyModuleNames.AddRange(new string[] { "Core",
"CoreUObject",
"Engine",
"Json",
"InputCore",
"JsonUtilities",
"SlateCore",
"TapCommon",
"TapDB"
});
如果你曾使用 <3.6.3 的 TapSDK 的数据分析功能,且初始化时区域选择为国际(IO),那么升级 SDK 至 >=3.6.3 的 TapSDK 前需要先迁移数据。
请提交工 单联系我们迁移数据后再升级。
初始化 SDK
初始化 SDK 并上报一个设备登录( device_login )事件,调用这个接口是使用其他接口的先决条件,需要尽早调用。
以下两种初始化方式结合使用场景任选其一即可。
TapSDK 初始化
如果项目中同时集成内建账户系统的 TapTap 登录并完成了初始化,需要在此基础上添加 TapDBConfig 配置,即可同步初始化 TapDB。代码如下:
- Unity
- Android
- iOS
- UE4
using TapTap.Bootstrap; // 命名空间
var config = new TapConfig.Builder()
.ClientID("your_client_id") // 必须,开发者中心对应 Client ID
.ClientToken("your_client_token") // 必须,开发者中心对应 Client Token
.ServerURL("https://your_server_url") // 必须,开发者中心 > 你的游戏 > 游戏服务 > 基本信息 > 域名配置 > API
.RegionType(RegionType.CN) // 非必须,CN 表示中国大陆,IO 表示其他国家或地区
.TapDBConfig(true, "gameChannel", "gameVersion", true) // TapDB 会根据 TapConfig 的配置进行自动初始化
.ConfigBuilder();
TapBootstrap.Init(config);
TapDBConfig 说明
public Builder TapDBConfig(bool enable, string channel, string gameVersion, bool advertiserIDCollectionEnabled)
| 参数 | 可为空 | 说明 |
|---|---|---|
| enable | 否 | 是否开启 TapDB |
| channel | 是 | 分包渠道,长度不大于 256 |
| version | 是 | 游戏版本,为空时,自动获取游戏安装包的版本,长度不大于 256 |
| advertiserIDCollectionEnabled | 否 | IDFA 开关,请参考 收集设备指纹 |
TapDBConfig tapDBConfig = new TapDBConfig();
tapDBConfig.setEnable(true); //是否开启 TapDB
tapDBConfig.setChannel("gameChannel"); //分包渠道,长度不大于 256
tapDBConfig.setGameVersion("1.0.0"); //游戏版本,为空时,自动获取游戏安装包的版本,长度不大于 256
TapConfig tapConfig = new TapConfig.Builder()
.withAppContext(getApplicationContext())
.withClientId("your_client_id") // 开发者中心对应 Client ID
.withClientToken("your_client_token") // 开发者中 心对应 Client Token
.withServerUrl("https://your_server_url") // 开发者中心 > 你的游戏 > 游戏服务 > 基本信息 > 域名配置 > API
.withRegionType(TapRegionType.CN) // TapRegionType.CN: 中国大陆 TapRegionType.IO: 其他国家或地区
.withTapDBConfig(tapDBConfig)
.build();
TapBootstrap.init(MainActivity.this, tapConfig);
// 初始化 SDK
TapConfig *config = [TapConfig new];
config.clientId = @"your_client_id"; // 开发者中心对应 Client ID
config.clientToken = @"your_client_token"; // 开发者中心对应 Client Token
config.region = TapSDKRegionTypeCN; // TapSDKRegionTypeCN: 中国大陆 TapSDKRegionTypeIO: 其他国家或地区
config.serverURL = @"https://your_server_url"; // 开发者中心 > 你的游戏 > 游戏服务 > 基本信息 > 域名配置 > API
TapDBConfig * dbConfig = [[TapDBConfig alloc]init];
dbConfig.enable = YES; //是否开启 TapDB
dbConfig.channel=@"taptap"; //分包渠道,长度不大于 256
dbConfig.gameVersion=@"1.0.0"; //游戏版本,为空时,自动获取游戏安装包的版本,长度不大于 256
dbConfig.advertiserIDCollectionEnabled=YES; //IDFA 开关,请参考 「收集设备指纹」章节
config.dbConfig = dbConfig;
config.region = TapSDKRegionTypeCN;
[TapBootstrap initWithConfig:config];
使用这种方式初始化需要导入 TapBootstrap 包、开启 TapBootstrap 模块,并将 TapBootstrap 添加到 Project.Build.cs 文件中。
导入头文件:
#include "TapUEBootstrap.h"
#include "TapUECommon.h"
#include "TapUEDB.h"
FTUConfig Config;
Config.ClientID = ClientID; // 开发者中心对应 Client ID
Config.ClientToken = ClientToken; // 开发者中心对应 Client Token
Config.ServerURL = ServerURL; // 开发者中心 > 你的游戏 > 游戏服务 > 基本信息 > 域名配置 > API
Config.RegionType = ERegionType::CN;
Config.DBConfig.Enable = true;
Config.DBConfig.Channel = Channel;
Config.DBConfig.GameVersion = GameVersion;
Config.DBConfig.AdvertiserIDCollectionEnabled = AdvertiserIDCollectionEnabled;
TapUEBootstrap::Init(Config);
DBConfig 说明
| 参数 | 可为空 | 说明 |
|---|---|---|
| Enable | 否 | 是否开启 TapDB |
| Channel | 是 | 分包渠道,长度不大于 256 |
| Version | 是 | 游戏版本,为空时,自动获取游戏安装包的版本,长度不大于 256 |
| AdvertiserIDCollectionEnabled | 否 | IDFA 开关,请参考 收集设备指纹 |
TapDB 单独初始化
在单独使用 TapDB 功能时(即不接登录功能时,不导入 TapBootstrap 包时),可以通过以下方式初始化 TapDB。
- Unity
- Android
- iOS
- UE4
public static void Init(string clientId, string channel, string gameVersion, bool isCN)
TapDB.Init("clientId", "taptap", "gameVersion", true);
| 参数 | 可为空 | 说明 |
|---|---|---|
| clientId | 否 | Client Id 可以在控制台获取 |
| channel | 是 | 分包渠道 |
| version | 是 | 游戏版本,为空时,自动获取游戏安装包的版本 |
| isCN | 是 | 区域,true 表示中国大陆,false 表示中国大陆以外的国家或地区。 |
public synchronized static void init(final Context context,
final String clientId,
final String channel,
final String gameVersion,
final boolean isCN)
public synchronized static void init(final Context context,
final String clientId,
final String channel,
final String gameVersion,
final boolean isCN,
final JSONObject properties)
TapDB.init(getApplicationContext(), "clientId", "taptap", "gameVersion", true);
| 参数 | 可为空 | 说明 |
|---|---|---|
| context | 否 | 当前 Application 或 Activity 的 Context 对象 |
| clientId | 否 | Client Id 可以在控制台获取 |
| channel | 是 | 分包渠道,长度不大于 256 |
| version | 是 | 游戏版本,长度不大于 256,为空时,自动获取游戏安装包的版本, |
| isCN | 是 | 区域,true 表示中国大陆,false 表示中国大陆以外的国家或地区。 |
| properties | 是 | 设备登录( device_login )的事件属性,可以传入预置属性覆盖 SDK 的默认取值,也可以传入在后台配置过的自定义属性 |
+ (void)onStartWithClientId:(NSString *)clientId channel:(nullable NSString *)channel version:(nullable NSString *)gameVersion isCN:(BOOL)isCN;
[TapDB onStartWithClientId:@"clientid" channel:@"taptap" version:@"gameVersion" isCN:YES];
| 参数 | 可为空 | 说明 |
|---|---|---|
| appId | 否 | 创建游戏时获得的APPID |
| channel | 是 | 分包渠道,长度不大于 256 |
| version | 是 | 游戏版本,长度不大于 256,为空时,自动获取游戏安装包的版本( Xcode 配置中的 Version ) |
| isCN | 是 | YES 表示中国大陆,NO 表示中国大陆以外的国家或地区 |
导入头文件:
#include "TapUEDB.h"
初始化 TapDB:
FTUDBConfig Config;
Config.ClientId = TEXT("your client id");
Config.RegionType = ERegionType::CN;
Config.Channel = TEXT("分包渠道名称,可为空");
Config.GameVersion = TEXT("游戏版本");
TapUEDB::Init(Config);
DBConfig 说明
| 参数 | 可为空 | 说明 |
|---|---|---|
| ClientId | 否 | 开发者中心对应 Client ID |
| RegionType | 否 | 对应 开发者中心 > 应用配置 > 适用地区 |
| Channel | 是 | 分包渠道,长度不大于 256 |
| GameVersion | 是 | 游戏版本,为空时,自动获取游戏安装包的版本,长度不大于 256 |
设置账号
设置账号 ID
调用该 API 记录一个账号,当账号登录时调用。
调用后会上报一个账号登录( user_login )事件,并将这个设备的是否有用户注册过( has_user )属性置为 true。
在重启应用或调用清除账号 ID( clearUser )前,上报的事件都会带有该账号 ID。
- Unity
- Android
- iOS
- UE4
public static void SetUser(string userId)
TapDB.SetUser("userId");
| 字段 | 可为空 | 说明 |
|---|---|---|
| userId | 否 | 账号的唯一字符串,字符串长度不大于 256,只能包含数字、大小写字母、下划线(_)、短横(-)开发者需要保证不同账号的 userId 均不相同。 |
public static void setUser(final String userId)
public static void setUser(final String userId, final JSONObject properties)
TapDB.setUser("userId");
// 同时传递事件属性
JSONObject properties = new JSONObject();
properties.put("currentPoints", 10);
TapDB.setUser("userId", properties);
| 字段 | 可为空 | 说明 |
|---|---|---|
| userId | 否 | 账号的唯一字符串,字符串长度不大于 256,只能包含数字、大小写字母、下划线(_)、短横(-)开发者需要保证不同账号的 userId 均不相同。 |
| properties | 是 | 账号登录( user_login )的事件属性 |
+ (void)setUser:(NSString *)userId;
+ (void)setUser:(NSString *)userId properties:(nullable NSDictionary *)properties;
[TapDB setUser:@"userId"];
// 同时传递事件属性
[TapDB setUser:@"userId" properties:@{@"#currentPoints":@10}];
| 字段 | 可为空 | 说明 |
|---|---|---|
| userId | 否 | 账号的唯一字符串,字符串长度不大于 256,只能包含数字、大小写字母、下划线(_)、短横(-)开发者需要保证不同账号的 userId 均不相同 |
| properties | 是 | 账号登录( user_login )的事件属性 |
FString UserId = TEXT("userId");
FString LoginType = TUDBType::LoginType::TapTap;
TapUEDB::SetUserWithLoginType(UserId, LoginType);
| 字段 | 可为空 | 说明 |
|---|---|---|
| userId | 否 | 账号的唯一字符串,字符串长度不大于 256,只能包含数字、大小写字母、下划线(_)、短横(-)开发者需要保证不同账号的 userId 均不相同 |
| LoginType | 是 | 账号登录方式,参考 TUDBType::LoginType |
清除账号 ID
当用户进行登出时,可调用 clearUser 清除当前 SDK 中保存的账号 ID,后续上报的事件将不会带有账号 ID,调用该接口不会上报任何事件。
- Unity
- Android
- iOS
- UE4
public static void ClearUser()
TapDB.ClearUser();
public static void clearUser()
TapDB.clearUser();
+ (void)clearUser;
[TapDB clearUser];
TapUEDB::ClearUser();
设置账号名称
在用户进行账号登录后,可调用该接口设置该账号的名称,调用后将更新账号的账号名称( user_name )属性。
- Unity
- Android
- iOS
- UE4
public static void SetName(string name)
TapDB.SetName("Tarara");
public static void setName(final String name)
TapDB.setName("Tarara");
+ (void)setName:(NSString *)name;
[TapDB setName:@"Tarara"];
FString Name = TEXT("Tarara"); // 用户游戏昵称
TapUEDB::SetName(Name);
| 参数 | 可为空 | 说明 |
|---|---|---|
| name | 否 | 长度大于 0 并小于等于 256,账号名 |
设置账号等级
在用户进行账号登录后,可调用该接口设置该账号的等级,调用将更新账号的账号等级( level )属性。
- Unity
- Android
- iOS
- UE4
public static void SetLevel(int level)
TapDB.SetLevel(5);
public static void setLevel(final int level)
TapDB.setLevel(5);
+ (void)setLevel:(NSInteger)level;
[TapDB setLevel:5];
int32 Level = 5;
TapUEDB::SetLevel(Level);
| 参数 | 可为空 | 说明 |
|---|---|---|
| level | 否 | 账号等级 |
设置账号区服
在用户进行账号登录后,可调用该接口设置该账号的区服信息,调用将初始化账号的首次区服( first_server )属性、更新账号的当前区服( current_server )属性。
- Unity
- Android
- iOS
- UE4
public static void SetServer(string server)
TapDB.SetServer("1 区");
public static void setServer(final String server)
TapDB.setServer("1 区");
+ (void)setServer:(NSString *)server;
[TapDB setServer:@"1 区"];
FString Server = TEXT("1 区");
TapUEDB::SetServer(Server);
| 参数 | 可为空 | 说明 |
|---|---|---|
| server | 否 | 账号服务器 |
上报充值记录
在用户进行充值后,可调用该接口上报充值信息,调用后将上报 charge 事件,并将传入的参数作为事件的属性。
- Unity
- Android
- iOS
- UE4
public static void OnCharge(string orderId, string product, long amount, string currencyType, string payment)
public static void OnCharge(string orderId, string product, long amount, string currencyType, string payment,
string properties)
TapDB.OnCharge("0xueiEns", "轩辕剑", "100", "CNY", "wechat", "{\"on_sell\":true}");
public static void onCharge(final String orderId, final String product, final long amount,
final String currencyType, final String payment)
public static void onCharge(final String orderId, final String product, final long amount,
final String currencyType, final String payment, final JSONObject properties)
JSONObject info = new JSONObject();
info.put("on_sell": true);
TapDB.onCharge("0xueiEns", "轩辕剑", "100", "CNY", "wechat", info);
+ (void)onChargeSuccess:(nullable NSString *)orderId product:(nullable NSString *)product amount:(NSInteger)amount currencyType:(nullable NSString *)currencyType payment:(nullable NSString *)payment;
+ (void)onChargeSuccess:(nullable NSString *)orderId product:(nullable NSString *)product amount:(NSInteger)amount currencyType:(nullable NSString *)currencyType payment:(nullable NSString *)payment properties:(nullable NSDictionary *)properties;
[TapDB onChargeSuccess:@"0xueiEns" product:@"轩辕剑" amount:100 currencyType:@"CNY" payment:@"wechat", properties:@{@"on_sell":YES}];
TapUEDB::OnCharge(OrderId, Product, Amount, CurrencyType, Payment, Properties);
| 参数 | 可为空 | 说明 |
|---|---|---|
| orderId | 否 | 订单 ID |
| product | 是 | 产品名称 |
| amount | 否 | 充值金额(单位分,即无论什么币种,都需要乘以 100) |
| currencyType | 是 | 货币类型,遵循 ISO 4217 标准。参考:人民币 CNY,美元 USD;欧元 EUR |
| payment | 是 | 支付方式,如:支付宝 |
| properties | 是 | 充值( charge )的事件属性 |
注意:在条件允许的情况下推荐使用服务端充值统计接口,请参考 服务端接入文档