Native支持
一、iOS Native 支持
首次构建 iOS 项目会生成工程代码到 ./build/ios/ 和 ./native/engine/ios/ 两个目录,然后开始配置 iOS 工程。
1.1 手动配置
-
添加 iOS 工程依赖文件
CocosCreatorProxyApi.hCocosCreatorProxyApi.mmThinkingSDK.frameworkThinkingDataCore.framework
-
Build Phases 设置
Link Binary With Libraries添加ThinkingSDK.framework
-
Build Settings 设置
- Framework Search Paths 添加
ThinkingSDK.framework的引用路径,如"$(SRCROOT)/../Classes" Other Linker Flags添加-ObjC
- Framework Search Paths 添加
1.2 CMakeList 配置
CMakeList 文件路径为 ./native/engine/ios/CMakeLists.txt;
首次构建 iOS 项目之后会生成 CMakeList 文件,配置好之后再次构建时生效;
需要先把 iOS 资源文件拷贝到对应文件夹,如 ./native/engine/common/Classes/ThinkingAnalytics/ios/ ,配置 CMakeList 时填写对应路径即可。
- 添加 iOS 工程依赖文件
# 找到这行代码
set(PROJ_COMMON_SOURCES
${CMAKE_CURRENT_LIST_DIR}/../common/Classes/Game.h
${CMAKE_CURRENT_LIST_DIR}/../common/Classes/Game.cpp
# 添加以下代码
${CMAKE_CURRENT_LIST_DIR}/../common/Classes/ThinkingAnalytics/ios/CocosCreatorProxyApi.h
${CMAKE_CURRENT_LIST_DIR}/../common/Classes/ThinkingAnalytics/ios/CocosCreatorProxyApi.mm
${CMAKE_CURRENT_LIST_DIR}/../common/Classes/ThinkingAnalytics/ios/ThinkingSDK.framework
${CMAKE_CURRENT_LIST_DIR}/../common/Classes/ThinkingAnalytics/ios/ThinkingDataCore.framework
)
- Build Phases 设置
# 找到这行代码
target_link_libraries(${LIB_NAME} cocos2d)
# 添加以下代码
target_link_libraries(${LIB_NAME} ${CMAKE_CURRENT_LIST_DIR}/../common/Classes/ThinkingAnalytics/ios/ThinkingSDK.framework)
target_link_libraries(${LIB_NAME} ${CMAKE_CURRENT_LIST_DIR}/../common/Classes/ThinkingAnalytics/ios/ThinkingDataCore.framework)
- Build Settings 设置
# 找到这行代码
set(PRODUCT_NAME ${APP_NAME})
# 添加以下代码
set(CMAKE_EXE_LINKER_FLAGS -ObjC)
Cocos Creator v2.x 的编辑器暂不支持 CMake 配置方式,需要手动配置。
二、 Android Native 支持
构建 Android 项目工程, 配置 Android 工程。
- 在 Android 显示模式的 app 工程中,把依赖文件
CocosCreatorProxyApi.java加入到com.cocos.game中,如下图
- 在项目的 app 文件夹中的 proguard-rules.pro 文件中,添加混淆
-keep public class com.cocos.game.CocosCreatorProxyApi {*;}
- 在项目的 app 文件夹中新建 libs 目录,将
TDAnalytics.aar、TDCore.aar拷贝到其中 - 在
Module下的build.gradle文件中添加依赖项
dependencies {
...
implementation fileTree(dir: 'libs', include: ['*.aar'])
}
三、 OpenHarmony Native 支持
首先构建OpenHarmony工程
- 将TDAnalytics.har和CocosCreatorProxyApi.ts放到下面的目录中
- 在 entry/oh-package.json5 文件中引入SDK
"@thinkingdata/analytics": "file:./libs/TDAnalytics.har"
- 在 entry/build-profile.json5 中引入桥接文件
arkOptions: {
runtimeOnly: {
sources: [
'./src/main/ets/CocosCreatorProxyApi.ts',
],
},
}
- 引入context
目前CocosCreator支持鸿蒙的第一个版本,交互是在 worker 线程,暂时没有官方的api获取context,后续等官方更新,目前可以通过自己手动添加
在 entry/src/main/ets/pages/index.ets 的 aboutToAppear() 中加入:
aboutToAppear(): void {
console.log('[LIFECYCLE-Index] cocos aboutToAppear');
this.workPort.postMessage('context', getContext(this));
...
}
在 entry/src/main/ets/workers/cocos_worker.ts 的消息 switch 中加入 context 分支:
switch (msg.name) {
...
case "context":
globalThis.appContext = msg.param
break;
default:
console.error("cocos worker: message type unknown");
break;
}
上面的操作是将context传递到 worker 线程中,然后在SDK初始化的时候需要用
在 CocosCreatorProxyApi.ts 的 initWithConfig 中,初始化时传入 globalThis.appContext:
function initWithConfig(param: string): void {
try {
let obj = JSON.parse(param)
if (obj['enableLog'] === true) {
TDAnalytics.enableLog(true)
}
let config = new TDConfig()
config.appId = obj['appId']
config.serverUrl = obj['serverUrl']
TDAnalytics.initWithConfig(globalThis.appContext, config)
} catch (e) {
}
}
如果有其他的方式去获取context,也可以自己修改CocosCreatorProxyApi.ts文件中的initWithConfig方法
四、 开启 Native 支持
初始化 SDK 时,在 config 中加入 enableNative: true,即可开启 Native 支持。
// TA SDK 配置对象
var config = {
appId: "YOUR_APPID", // 项目 APP ID
serverUrl: "YOUR_SERVER_URL", // 上报地址
enableNative: true,// 允许调用 Native 代码
autoTrack: {
appShow: true, // 自动采集 启动事件
appHide: true, // 自动采集 关闭事件
appCrash: true, // 自动采集 崩溃事件(仅 native 生效)
appInstall: true // 自动采集 安装事件(仅 native 生效)
}
};
// 初始化
TDAnalytics.init(config);

