Native対応
1. iOS Native対応
iOSプロジェクトを初めてビルドすると、./build/ios/と./native/engine/ios/の2つのディレクトリにプロジェクトのコードが生成されます。その後、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による設定方法に対応していないため、手動で設定する必要があります。
2. 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'])
}
3. 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はHarmonyOSに対応した最初のバージョンで、インタラクションはworkerスレッドで行われます。現時点ではcontextを取得する公式のAPIがないため、今後の公式アップデートを待つ必要があります。現時点では、自分で手動で追加することで対応できます
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メソッドを自分で変更することもできます
4. Native対応の有効化
SDKの初期化時に、configにenableNative: trueを追加すると、Native対応が有効になります。
// TA SDKの設定オブジェクト
var config = {
appId: "YOUR_APPID", // プロジェクトのAPP ID
serverUrl: "YOUR_SERVER_URL", // 送信先URL
enableNative: true,// Nativeコードの呼び出しを許可
autoTrack: {
appShow: true, // 起動イベントを自動収集
appHide: true, // 終了イベントを自動収集
appCrash: true, // クラッシュイベントを自動収集(nativeでのみ有効)
appInstall: true // インストールイベントを自動収集(nativeでのみ有効)
}
};
// 初期化
TDAnalytics.init(config);

