본문으로 건너뛰기

고급 사용법

'Test Solution' SDK의 기본 기능에 익숙해지셨다면, 몇 가지 고급 기능을 활용하여 Host 앱과의 연동을 더욱 깊이 있게 제어할 수 있습니다. 이 가이드에서는 customData를 이용한 데이터 전달 및 quit 함수를 이용한 테스트 강제 종료 방법, getSDKVersion 함수를 이용한 SDK 버전 조회 방법을 다룹니다.

Passthrough 데이터 활용하기 (customData)

customData는 Host 앱의 특정 데이터를 SDK에 전달한 후, 테스트가 종료될 때 onResult 콜백을 통해 그대로 다시 돌려받을 수 있는 매우 유용한 파라미터입니다. SDK는 이 데이터의 내용을 해석하거나 사용하지 않고 그대로 반환(Passthrough)합니다.

사용 사례

  • 세션 ID 관리: Host 앱의 내부 사용자 세션 ID나 트랜잭션 ID를 customData에 담아 보낼 수 있습니다. 테스트 완료 후 결과를 수신했을 때, 어떤 세션에서 발생한 결과인지 즉시 매칭할 수 있습니다.
  • A/B 테스트: 특정 UI나 기능에 대한 A/B 테스트를 진행 중일 때, 사용자가 속한 그룹('group_a', 'group_b')을 customData에 담아 보낼 수 있습니다. 결과 분석 시 이 값을 활용하여 그룹별 통계를 낼 수 있습니다.
  • 콜백 컨텍스트 유지: 비동기적으로 처리되는 onResult 콜백에서 테스트 시작 시점의 특정 상태나 컨텍스트를 유지해야 할 때 유용합니다.

구현 방법

  1. startTest 호출 시 customData 전달 startTest 함수의 customData 파라미터에 원하는 데이터를 Map (또는 Dictionary) 형태로 전달합니다.

    Android (Kotlin)

    val customData = mapOf(
    "userSessionId" to "sid_12345abc",
    "abTestGroup" to "B",
    "sourceView" to "main_banner"
    )

    val arguments = mapOf(
    "goodsId" to "[GOODS_ID]",
    "suid" to "[SUID]",
    "language" to "[LANGUAGE]",
    "customData" to customData // 커스텀 데이터 전달
    )
    channel.invokeMethod("startTest", arguments)

    iOS (Swift)

    let customData: [String: Any] = [
    "userSessionId": "sid_12345abc",
    "abTestGroup": "B",
    "sourceView": "main_banner"
    ]

    let arguments = [
    "goodsId": "[GOODS_ID]",
    "suid": "[SUID]",
    "language": "[LANGUAGE]",
    "customData": customData // 커스텀 데이터 전달
    ]
    channel.invokeMethod("startTest", arguments: arguments)
  2. onResult 콜백에서 customData 수신 테스트가 완료되면 onResult 콜백이 호출되며, 전달받은 결과 데이터 객체 안에 customData가 그대로 포함되어 있습니다.

    Android (Kotlin)

    // onResult 콜백 핸들러
    fun onResult(result: Map<String, Any?>) {
    // ... 다른 결과 데이터 처리 ...

    // customData 추출 및 활용
    val receivedCustomData = result["customData"] as? Map<String, Any>
    if (receivedCustomData != null) {
    val sessionId = receivedCustomData["userSessionId"] as? String
    Log.d("TestSolution", "Result received for session: $sessionId")
    }
    }

    iOS (Swift)

    // onResult 콜백 핸들러
    func onResult(result: [String: Any?]) {
    // ... 다른 결과 데이터 처리 ...

    // customData 추출 및 활용
    if let receivedCustomData = result["customData"] as? [String: Any],
    let sessionId = receivedCustomData["userSessionId"] as? String {
    print("Result received for session: \(sessionId)")
    }
    }

테스트 강제 종료하기 (quit)

특정 시나리오에서는 사용자가 테스트를 완료하기 전에 SDK 화면을 닫아야 할 수 있습니다. quit 함수는 Host 앱에서 명시적으로 SDK를 종료시키고 싶을 때 사용합니다.

사용 사례

  • 앱 내 다른 화면으로의 이동: 사용자가 테스트 진행 중 푸시 알림을 탭하여 앱의 다른 섹션으로 이동해야 할 때, 현재 진행 중인 테스트를 깔끔하게 종료할 수 있습니다.
  • Host 앱의 타임아웃 로직: Host 앱 자체적으로 세션 타임아웃 기능이 있는 경우, 시간이 만료되면 quit를 호출하여 테스트를 중단시킬 수 있습니다.
주의

quit 함수를 호출하면 강제 종료로 인해 콜백 수신이 불가능할 수 있습니다. onResult 콜백이 호출될 수는 있으나, 결과 데이터가 비어있거나 '중단됨'을 의미하는 특정 상태 값을 포함할 수 있습니다. 자세한 onResult 데이터 명세는 API 명세 > Callbacks 문서를 참고하세요.

구현 방법

Host 앱에서 MethodChannel을 통해 quit 메소드를 호출합니다.

Android (Kotlin)

fun closeTestForcefully() {
channel.invokeMethod("quit")
}

iOS (Swift)

@objc func closeButtonTapped() {
channel.invokeMethod("quit", arguments: nil)
}

SDK 버전 확인하기

getSDKVersion 은 Host 앱에서 현재 통합된 'Test Solution' SDK의 버전 정보를 확인할 수 있는 MethodChannel 호출입니다.

이 기능은 주로 다음과 같은 상황에서 유용하게 사용됩니다.

  • 문제 해결 및 디버깅: 특정 버전의 SDK에서 문제가 발생하는지 확인할 때, SDK 버전을 함께 기록하여 원인 파악을 용이하게 할 수 있습니다.
  • 버전별 기능 분기: SDK 업데이트에 따라 Host 앱의 동작을 다르게 처리해야 할 경우, 버전을 확인하여 코드를 분기할 수 있습니다.

getSDKVersion은 별도의 파라미터 없이 호출하며, 문자열(String) 형태의 버전 정보를 반환합니다. (예: "1.2.3+10203")

호출 예시

Android (Kotlin)

// MethodChannel을 통해 getSDKVersion 호출
methodChannel.invokeMethod("getSDKVersion", null, object : MethodChannel.Result {
override fun success(result: Any?) {
val sdkVersion = result as? Map<*, *>
Log.d("MyHostApp", "Test Solution SDK Version: ${sdkVersion.toString()}")
// sdkVersion 변수를 사용하여 필요한 로직 처리
}

override fun error(errorCode: String, errorMessage: String?, errorDetails: Any?) {
Log.e("MyHostApp", "Failed to get SDK version: $errorMessage")
}

override fun notImplemented() {
Log.e("MyHostApp", "getSDKVersion not implemented")
}
})

iOS (Swift)

// FlutterMethodChannel을 통해 getSDKVersion 호출
self.flutterChannel.invokeMethod("getSDKVersion", arguments: nil) { (result) in
if let sdkVersion = result as? [String: Any] {
print("Test Solution SDK Version: \(sdkVersion)")
// sdkVersion 변수를 사용하여 필요한 로직 처리
} else if let error = result as? FlutterError {
print("Failed to get SDK version: \(error.message ?? "Unknown error")")
}
}