客户端接入
介绍
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
从 3.29.1 版本开始, SDK 修改 JSON 解析库为 Newtonsoft-json,如果当前工程已接入该依赖库,则不需额外处理,否则需在 Packages/manifest.json 添加如下依赖:
"com.unity.nuget.newtonsoft-json":"3.2.1"
NPMJS 安装
从 3.25.0 版本开始,TapSDK 支持了 NPMJS 安装,优势是只需要配置版本号,并且支持嵌套依赖。
在项目的 Packages/manifest.json 文件中添加以下依赖:
"dependencies":{
"com.taptap.tds.tapdb":"3.29.4",
"com.taptap.tds.common":"3.29.4",
}
但需要注意的是,要在 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/TapCommon-Unity.git#3.29.4",
"com.taptap.tds.tapdb":"https://github.com/TapTap/TapDB-Unity.git#3.29.4",
"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 数据分析库,必选。
- 如果当前项目已集成
Newtonsoft.Json依赖,则忽略该步骤,否则在NuGet.orgNewtonsoft.Json 页面中通过点击右侧 「Download package」 下载库文件,并将下载的文件后缀从.nupkg修改为.zip,同时解压该文件并复制内部的Newtonsoft.Json.dll文件拷贝到工程Assets的Plugins目录下,另外为了避免导出 IL2CPP 平台时删除必要数据,需在Assets目录下创建link.xml文件(如果已有该文件,则添加如下内容),其内容如下:
<linker>
<assembly fullname="System.Core">
<type fullname="System.Linq.Expressions.Interpreter.LightLambda" preserve="all" />
</assembly>
</linker>
如果只需要单独使用 TapDB,可以只导入依赖 common 和 tapdb。
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
// ...
implementation (name:'TapCommon_3.29.4', ext:'aar') // 必选:TapSDK 基础库
implementation (name:'TapDB_3.29.4', 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.IO) // 非必须,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.IO) // 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 = TapSDKRegionTypeIO; // 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;
[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::IO;
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", false);
| 参数 | 可为空 | 说明 |
|---|---|---|
| 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", false);
| 参数 | 可为空 | 说明 |
|---|---|---|
| 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:NO];
| 参数 | 可为空 | 说明 |
|---|---|---|
| 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::IO;
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();