Callbacks (SDK → Host)
Test Solution SDK는 특정 이벤트가 발생했을 때 Host 앱으로 데이터를 전송하기 위해 콜백 인터페이스를 사용합니다. Host 앱에서는 아래의 콜백 함수들을 구현하여 SDK의 상태 변화나 로그 데이터를 수신할 수 있습니다.
모든 데이터는 **JSON 형식의 문자열(String)**로 전달됩니다.
onResult
테스트가 정상적으로 완료되거나 사용자에 의해 중단되었을 때 호출됩니다. Host 앱은 이 콜백을 통해 테스트의 최종 상태를 파악하고 후속 조치를 취할 수 있습니다.
데이터 구조 (JSON)
onResult 콜백은 아래와 같은 구조의 JSON 문자열을 전달합니다.
{
"status": "COMPLETED | USERCANCELLED | ERROR",
"data": {
"goodsId": "[GOODS_ID]",
"suid": "[SUID]",
"language": "[LANGUAGE]",
"completedAt": "2025-01-01T00:00:00.000000",
"errorCode" : null,
"errorMessage": null
},
"sdkVersion": "1.0.0+10000",
"customData": {
"source": "main_banner",
"campaignId": "summer_promo"
}
}
필드 설명
| 필드명 | 타입 | 설명 |
|---|---|---|
status | String | 테스트의 최종 상태를 나타냅니다. 'COMPLETED', 'USERCANCELLED', 'ERROR' 중 하나의 값을 가집니다. |
data | Object | 테스트 결과 데이터를 포함합니다. |
sdkVersion | String | SDK의 버전 정보입니다. |
customData | Object | startTest 호출 시 전달했던 Passthrough 데이터입니다. 전달하지 않았다면 null일 수 있습니다. |
data 필드 구조
| 필드명 | 타입 | 설명 |
|---|---|---|
completedAt | String|null | 테스트가 완료된 시각입니다. (ISO 8601 형식) |
goodsId | String|null | 상품 ID입니다. |
suid | String|null | 사용자 ID입니다. |
language | String|null | 언어 코드입니다. |
errorCode | String|null | 테스트가 실패한 경우 발생한 에러 코드입니다. |
errorMessage | String|null | 테스트가 실패한 경우 발생한 에러 메시지입니다. |
플랫폼별 예제 코드
Android (Kotlin)
channel.setMethodCallHandler { call, result ->
when (call.method) {
"onResult" -> {
val resultMap = call.arguments as? Map<String, Any>
val status = resultMap?.get("status") as? String
Log.d("TestSolutionSDK", "onResult received: $resultMap")
when (status) {
"COMPLETED" -> {
// 테스트 완료 후 처리 로직
showCompletionDialog()
}
"USERCANCELLED" -> {
// 사용자 이탈 처리 로직
}
"ERROR" -> {
// 오류 처리 로직
val data = resultMap?.get("data") as? Map<*, *>?
val errorMsg = data?.get("errorMessage") as? String
showErrorToast(errorMsg)
}
}
}
// ...
}
}
iOS (Swift)
channel.setMethodCallHandler({
[weak self] (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
switch call.method {
case "onResult":
guard let resultMap = call.arguments as? [String: Any],
let status = resultMap["status"] as? String else {
return
}
print("onResult received: \(resultMap)")
if status == "COMPLETED" {
// 테스트 완료 후 처리 로직
self?.showCompletionAlert()
} else if status == "ERROR" {
// 오류 처리 로직
let message = resultMap["message"] as? String
self?.showErrorAlert(message: message)
}
break
// ...
})
onLog
startTest 호출 시 enableHostLogging 파라미터를 true로 설정했을 때만 활성화됩니다. SDK 내부의 주요 동작에 대한 로그를 Host 앱으로 전달하여 디버깅을 용이하게 합니다.
데이터 구조 (JSON)
onLog 콜백은 아래와 같은 구조의 JSON 문자열을 전달합니다.
{
"level": "INFO",
"message": "개발 모드로 설정 되었습니다.",
"error": null,
"timestamp": "2025-01-01T00:00:00.000000"
}
필드 설명
| 필드명 | 타입 | 설명 |
|---|---|---|
level | String | 로그의 레벨을 나타냅니다. 'INFO', 'WARNING', 'ERROR' 중 하나의 값을 가집니다. |
message | String | 실제 로그 메시지 내용입니다. |
timestamp | String | 로그가 발생한 시각입니다. (ISO 8601 형식) |
error | String | 오류 정보입니다. |
플랫폼별 예제 코드
Android (Kotlin)
channel.setMethodCallHandler { call, result ->
when (call.method) {
// ...
"onLog" -> {
val logMap = call.arguments as? Map<String, Any>
Log.d("TestSolutionSDK_LOG", "$logMap") // 디버그 로그 출력
}
// ...
}
}
iOS (Swift)
channel.setMethodCallHandler({
[weak self] (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
switch call.method {
// ...
case "onLog":
guard let logMap = call.arguments as? [String: Any] else { return }
print("TestSolutionSDK_LOG: \(logMap)") // 디버그 로그 출력
break
// ...
})
onInfo 콜백
onInfo는 SDK의 버전 정보를 Host 앱으로 전달하기 위한 콜백입니다.
데이터 구조
| 필드명 | 타입 | 설명 |
|---|---|---|
version | String | SDK 버전 정보입니다. |
플랫폼별 예제 코드
Android (Kotlin)
channel.setMethodCallHandler { call, result ->
when (call.method) {
// ...
"onInfo" -> {
val versionMap = call.arguments as? Map<String, Any>
Log.d("TestSolutionSDK_VERSION", "$versionMap") // 버전 정보 출력
result.success(null)
}
// ...
}
}
iOS (Swift)
channel.setMethodCallHandler({
[weak self] (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
switch call.method {
// ...
case "onInfo":
guard let versionMap = call.arguments as? [String: Any] else { return }
print("TestSolutionSDK_VERSION: \(versionMap)") // 버전 정보 출력
break
// ...
})