Corona
최신 버전: v2.0.1
업데이트 시간: 2023-11-24
이 문서는 v2.0.0 이상 버전에 적용됩니다. 과거 버전은 Corona 연동 가이드(V1), SDK 다운로드(v1.0.1)를 참고하십시오
1. SDK 통합
-
Corona 설정 추가
- Corona SDK 리소스 파일을 다운로드하고 압축을 해제한 후, TDAnalytics.lua를 Corona 디렉터리에 복사합니다
-
Android 설정 추가
- android/ThinkingPluginProxy.java를 android/plugin/src/main/java/plugin/library 디렉터리에 복사합니다
- Android Studio로 Android 프로젝트를 열고 표시 모드를 Android로 전환한 후, build.gradle (Module :plugin)에 의존성을 추가하고 Sync Now를 클릭하여 업데이트합니다
dependencies {
implementation 'cn.thinkingdata.android:ThinkingAnalyticsSDK:3.0.0'
}
- plugin.library.LuaLoader에 코드를 추가합니다
plugin.library.LuaLoader에서 기능을 확장하지 않았다면 android/LuaLoader.java를 android/plugin/src/main/java/plugin/library 디렉터리에 직접 복사하여 기존 LuaLoader.java 파일을 덮어쓸 수 있습니다.
public int invoke(LuaState L) {
NamedJavaFunction[] luaFunctions = new NamedJavaFunction[] {
...
// ThinkingAnalyticsSDK 코드 추가
new ThinkingBridgingWrapper(),
...
};
String libName = L.toString( 1 );
L.register(libName, luaFunctions);
return 1;
}
public void dispatchEvent(final String message) {
CoronaEnvironment.getCoronaActivity().getRuntimeTaskDispatcher().send( new CoronaRuntimeTask() {
@Override
public void executeUsing(CoronaRuntime runtime) {
LuaState L = runtime.getLuaState();
CoronaLua.newEvent( L, EVENT_NAME );
...
// ThinkingAnalyticsSDK 코드 추가
JSONObject jsonObject = null;
String newMessage = null;
String type = null;
try {
jsonObject = new JSONObject(message);
newMessage = jsonObject.optString("message");
type = jsonObject.optString("type");
} catch (Exception ignored) {
}
if (!TextUtils.isEmpty(newMessage) && !TextUtils.isEmpty(type)) {
L.pushString(newMessage);
L.setField(-2, "message");
L.pushString(type);
L.setField(-2, "type");
} else {
L.pushString(message);
L.setField(-2, "message");
}
...
try {
CoronaLua.dispatchEvent( L, fListener, 0 );
} catch (Exception ignored) {
}
}
} );
}
...
// ThinkingAnalyticsSDK 코드 추가
@SuppressWarnings({"WeakerAccess", "SameReturnValue"})
public int thinkingBridging(LuaState L) {
CoronaActivity activity = CoronaEnvironment.getCoronaActivity();
if (activity == null) {
return 0;
}
String word = L.checkString( 1 );
JSONObject params = null;
try {
params = new JSONObject(word);
} catch (JSONException e) {
params = new JSONObject();
}
String method = params.optString("method");
if (method.length() > 0) {
try {
Class aClass = Class.forName("plugin.library.ThinkingPluginProxy");
Method aMethod = aClass.getDeclaredMethod(method, JSONObject.class);
JSONObject jsonObject = (JSONObject) aMethod.invoke(aClass, params);
if (jsonObject != null && jsonObject.getClass() == JSONObject.class && jsonObject.has("message")) {
(new Thread() {
@Override
public void run() {
dispatchEvent(jsonObject.toString());
}
}).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return 0;
}
...
...
// ThinkingAnalyticsSDK 코드 추가
@SuppressWarnings("unused")
private class ThinkingBridgingWrapper implements NamedJavaFunction {
@Override
public String getName() {
return "thinkingBridging";
}
@Override
public int invoke(LuaState L) {
return thinkingBridging(L);
}
}
...
- iOS 설정 추가
- Xcode로 ios 프로젝트를 열고, ios 디렉터리 아래의 ThinkingAnalyticsSDK 폴더를 App 디렉터리로 드래그합니다
- 프로젝트의 ARC 지원을 활성화합니다. TARGETS -> App -> Build Settings -> Objective-C Automatic Reference Counting을 차례로 선택하고 YES로 설정합니다
- 일부 파일은 ARC를 비활성화해야 합니다. TARGETS -> App -> Build Phases -> Compile Sources -> ThinkingPluginLibrary.mm을 차례로 선택하고 -fno-objc-arc 설정을 추가합니다
2. 초기화
-- TDAnalytics 불러오기
local TDAnalytics = require("TDAnalytics")
-- TDAnalytics 초기화
local params = {
appId = "YOUR_APP_ID",
serverUrl = "YOUR_SERVER_URL"
}
TDAnalytics.init(params)
참고: 일부 디바이스는 기본적으로 평문 전송을 금지하므로 HTTPS 형식의 수신 주소를 사용할 것을 강력히 권장합니다.
3. 자주 사용하는 기능
3.1 계정 ID 설정
유저가 로그인할 때 login을 호출하여 유저의 계정 ID를 설정할 수 있습니다. 계정 ID를 설정하면 계정 ID를 유저 식별 ID로 사용하며, 설정한 계정 ID는 logout을 호출하기 전까지 계속 유지됩니다:
-- 계정 ID 설정
TDAnalytics.login("TA")
참고: 이 메서드는 유저 로그인 이벤트를 업로드하지 않습니다.
3.2 공통 이벤트 속성 설정
플레이어의 서버, 채널처럼 중요한 속성은 모든 이벤트에 설정해야 합니다. 이때 이러한 속성을 공통 이벤트 속성으로 설정할 수 있습니다. 공통 이벤트 속성은 모든 이벤트에 포함되는 속성으로, setSuperProperties()를 호출하여 설정할 수 있습니다. 이벤트를 전송하기 전에 먼저 공통 이벤트 속성을 설정할 것을 권장합니다.
-- 공통 속성 설정
TDAnalytics.setSuperProperties({
channel = "App Store",
trip = {"Car", "Train"}
})
공통 이벤트 속성은 캐시에 저장되므로 APP을 시작할 때마다 호출할 필요가 없습니다. setSuperProperties()를 호출하여 이전에 설정한 공통 이벤트 속성을 다시 업로드하면 이전 속성을 덮어씁니다. 공통 이벤트 속성과 track()으로 업로드한 속성의 Key가 중복되면 해당 이벤트의 속성이 공통 이벤트 속성을 덮어씁니다.
3.3 자동 수집 활성화
초기화 파라미터를 설정하여 자동 수집을 활성화할 수 있습니다:
-- 자동 수집 활성화
-- appInstall=설치 이벤트 자동 수집 활성화
-- appStart=시작 이벤트 자동 수집 활성화
-- appEnd=종료 이벤트 자동 수집 활성화
local params = {
appId = "YOUR_APP_ID",
serverUrl = "YOUR_SERVER_URL",
autoTrack = {
"appStart", "appEnd", "appInstall"
}
}
TDAnalytics.init( params )
참고: 게스트 ID를 직접 정의해야 하는 경우 반드시 자동 수집 기능을 활성화하기 전에
identify()인터페이스를 호출하여 게스트 ID를 설정하십시오.
3.4 이벤트 전송
앞서 정리한 문서를 바탕으로 이벤트 속성과 정보 전송 조건을 설정할 것을 권장합니다. 이벤트 이름은 string 타입으로, 영문자로만 시작할 수 있고 숫자, 영문자, 밑줄 "_"을 포함할 수 있으며, 최대 길이는 50자이고 대소문자를 구분하지 않습니다.
TDAnalytics.track( "product_buy", {
product_name="상품명"
});
- 이벤트 속성은
table타입이며, 각 요소가 하나의 속성을 나타냅니다. - 이벤트 속성
Key는 속성 이름으로string타입입니다. 영문자로만 시작할 수 있고 숫자, 영문자, 밑줄 "_"을 포함할 수 있으며, 최대 길이는 50자이고 대소문자를 구분하지 않습니다. - 속성 값은 문자열, 숫자,
bool,Array, 객체, 객체 그룹의 6가지 타입을 지원합니다.
복잡한 데이터 타입의 경우 속성에 객체와 객체 그룹을 전달할 수 있습니다.
3.5 유저 속성 설정
일반적인 유저 속성은 userSet()을 호출하여 설정할 수 있습니다. 이 인터페이스로 업로드한 속성은 원래 속성 값을 덮어쓰며, 이전에 해당 유저 속성이 없었다면 새로 생성합니다.
-- 유저 속성 설정
TDAnalytics.userSet({
user_name = "TE"
})
속성 형식 요구 사항은 이벤트 속성과 같습니다.
4. 모범 사례
다음 예시 코드에는 위의 모든 작업이 포함되어 있으며, 다음 단계에 따라 사용하는 것을 권장합니다.
-- TDAnalytics 불러오기
local TDAnalytics = require("TDAnalytics")
if isPrivacyPolicyAccepted then -- 유저가 개인정보 처리방침에 동의함
-- SDK 초기화
local params = {
appId = "YOUR_APP_ID",
serverUrl = "YOUR_SERVER_URL"
}
TDAnalytics.init(params)
--유저가 로그인한 경우 유저의 계정 ID를 고유 식별자로 설정할 수 있습니다
TDAnalytics.login("TA")
--공통 이벤트 속성을 설정하면 모든 이벤트에 공통 이벤트 속성이 포함됩니다
local superProperties = {}
superProperties["channel"] = "ta" -- 문자열
superProperties["age"] = 1 -- 숫자
superProperties["isSuccess"] = true -- 불리언
superProperties["birthday"] = os.date("%Y-%m-%d %H:%M:%S") -- 시간
superProperties["object"] = { key="value" } -- 객체
superProperties["object_arr"] = { { key="value" } } -- 객체 그룹
superProperties["arr"] = { "value" } -- 배열
TDAnalytics.setSuperProperties(superProperties) -- 공통 이벤트 속성 설정
--이벤트 전송
TDAnalytics.track("product_buy", {
product_name="상품명"
});
--유저 속성 설정
TDAnalytics.userSet({
user_name = "TE"
})
end

