개발자 가이드
DIDIM 플랫폼 연동 가이드
DIDIM을 통해 비공개 테스터를 모집하고 자동으로 인증하는 방법을 안내합니다.
1. 테스터 등록
Google Play Console에서 DIDIM 설정하기
1-1. 비공개 테스트 트랙 만들기
Google Play Console에서 비공개 테스트를 위한 트랙을 생성합니다.
📍 메뉴 경로
테스트 및 출시테스트비공개 테스트트랙 만들기

트랙 이름은 어떤 이름을 사용하셔도 상관 없습니다.

1-2. 테스터 이메일 추가
다음 이메일을 Google Play Console의 테스터 목록에 추가하세요.
didimapp@googlegroups.com📍 메뉴 경로
테스터Google 그룹스이메일 입력저장

✅ 저장이 완료되었다면,
개요로 이동검토를 위해 전송전송하기를 누르면 테스터 추가가 완료됩니다.
1-3. DIDIM에 앱 등록
DIDIM 플랫폼에서 앱을 등록하고 API Secret을 발급받습니다.
등록 절차
- 1.앱 등록 페이지로 이동
- 2.Package Name 입력 (예:
com.example.app) - 3.앱 등록 완료 후 자동으로 API Secret 발급
- 4.발급된 API Secret은 테스터 관리 페이지에서 확인 가능
⚠️API Secret 보안
API Secret은 외부에 절대 공개하지 마세요. SDK 구현 시 환경 변수로 관리해야 합니다.
1-4. Google Groups 활용
DIDIM은 Google Groups를 활용하여 테스터 등록 과정을 자동화합니다.
자동화의 장점
- ✓개발자 편의성: 개발자가 일일이 테스터를 등록할 필요가 없습니다
- ✓즉시 접근: 사용자가 "참여하기"를 클릭하면 Google Groups에 자동 가입되어 Play Store 접근 권한이 즉시 부여됩니다
- ✓확장성: 테스터 수 제한 없이 자동으로 관리됩니다
테스터 등록 플로우
1
사용자가 DIDIM에서 "참여하기" 클릭
2
Google Groups 자동 가입 완료
3
Play Store 테스터 권한 즉시 부여
✓
사용자가 앱 다운로드 및 설치 가능
2. SDK 통합 가이드
앱에 맞는 테스터 검증 방식을 선택하세요
Anonymous Device 방식은 테스터가 DIDIM에 가입하지 않아도 앱 설치만으로 자동 등록됩니다. 구현이 간단하고 사용자 경험이 좋아 대부분의 경우 권장됩니다.
2-1. 동작 원리
- 1.테스터가 Google Groups에 가입 (Play Store 접근용)
- 2.Play Store에서 일반 링크로 앱 다운로드 (referrer 불필요)
- 3.앱 실행 시 Android ID + 패키지명으로 deviceHash 생성
- 4.DIDIM API로 deviceHash 전송 → 자동 테스터 등록/검증
- 5.매일 앱 실행 시 API 호출하여 14일 리텐션 추적
2-2. API 엔드포인트
http
1POST https://didimapp.com/api/verify-install2Authorization: Bearer [YOUR_APP_SECRET]3Content-Type: application/json45// Request Body6{7"type": "anonymousDevice",8"appId": "[YOUR_APP_ID]",9"deviceHash": "[SHA256_HASH]",10"deviceInfo": {11"androidId": "abc123...",12"model": "Pixel 7",13"manufacturer": "Google",14"osVersion": "14",15"appVersion": "1.0.0"16}17}1819// Response (200 OK)20{21"verified": true,22"testerId": "tester-id-123",23"appId": "app-id-456",24"message": "Tester verified successfully via Anonymous Device"25}
2-3. 플랫폼별 구현 예제
설정을 위한 LLM 프롬프트
아래 프롬프트를 AI 어시스턴트(ChatGPT, Claude 등)에 복사하면 Android (Kotlin) 구현 코드를 자동으로 생성할 수 있습니다.
markdown
1다음 요구사항에 맞는 Android Kotlin 코드를 작성해주세요:231. DIDIM Anonymous Device 방식 테스터 검증 구현4- 기기 고유 식별자(Android ID)와 패키지명을 조합하여 deviceHash 생성5- deviceHash = SHA256(androidId + packageName)672. 기기 정보 수집:8- Android ID (Settings.Secure.ANDROID_ID)9- 기기 모델 (Build.MODEL)10- 제조사 (Build.MANUFACTURER)11- OS 버전 (Build.VERSION.RELEASE)12- 앱 버전 (PackageInfo.versionName)13143. DIDIM API로 검증 요청:15- URL: https://didimapp.com/api/verify-install16- Method: POST17- Headers:18- Authorization: Bearer {API_SECRET}19- Content-Type: application/json20- Body:21{22"type": "anonymousDevice",23"appId": "{APP_ID}",24"deviceHash": "{SHA256_HASH}",25"deviceInfo": { ... }26}27284. API Secret 및 App ID 관리:29- BuildConfig에서 안전하게 관리30- build.gradle에서 환경 변수로 주입31325. 구현 요구사항:33- Kotlin Coroutine 사용 (비동기 처리)34- HttpURLConnection 또는 OkHttp 사용35- 에러 핸들링 (네트워크, 파싱, API 오류)36- 로그 출력 (성공/실패 상태)37386. 호출 시점:39- Application.onCreate() 또는 MainActivity.onCreate()에서 호출40- 매일 앱 시작 시 호출 (14일 리텐션 추적)
📦 라이브러리 설치
kotlin
1// build.gradle.kts (Module: app)2dependencies {3implementation("com.squareup.okhttp3:okhttp:4.12.0")4implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")5}
Android (Kotlin) 구현 예제입니다.
kotlin
1import android.content.Context2import android.provider.Settings3import kotlinx.coroutines.Dispatchers4import kotlinx.coroutines.withContext5import java.net.HttpURLConnection6import java.net.URL7import java.security.MessageDigest89class DidimVerification(private val context: Context) {10private val apiSecret = BuildConfig.DIDIM_API_SECRET // 환경변수로 관리11private val appId = BuildConfig.DIDIM_APP_ID12private val baseUrl = "https://didimapp.com/api/verify-install"1314suspend fun verifyInstall(): Result<Boolean> = withContext(Dispatchers.IO) {15try {16val androidId = Settings.Secure.getString(17context.contentResolver,18Settings.Secure.ANDROID_ID19)20val packageName = context.packageName21val deviceHash = createDeviceHash(androidId, packageName)2223val deviceInfo = """24"androidId": "$androidId",25"model": "${android.os.Build.MODEL}",26"manufacturer": "${android.os.Build.MANUFACTURER}",27"osVersion": "${android.os.Build.VERSION.RELEASE}",28"appVersion": "${getAppVersion()}"29""".trimIndent()3031val json = """32{33"type": "anonymousDevice",34"appId": "$appId",35"deviceHash": "$deviceHash",36"deviceInfo": { $deviceInfo }37}38""".trimIndent()3940val url = URL(baseUrl)41val connection = url.openConnection() as HttpURLConnection42connection.requestMethod = "POST"43connection.setRequestProperty("Content-Type", "application/json")44connection.setRequestProperty("Authorization", "Bearer $apiSecret")45connection.doOutput = true4647connection.outputStream.use { os ->48os.write(json.toByteArray())49}5051val responseCode = connection.responseCode52Result.success(responseCode == 200)53} catch (e: Exception) {54Result.failure(e)55}56}5758private fun createDeviceHash(androidId: String, packageName: String): String {59val input = "$androidId$packageName"60val bytes = MessageDigest.getInstance("SHA-256").digest(input.toByteArray())61return bytes.joinToString("") { "%02x".format(it) }62}6364private fun getAppVersion(): String {65return try {66context.packageManager.getPackageInfo(context.packageName, 0).versionName ?: "unknown"67} catch (e: Exception) {68"unknown"69}70}71}7273// 사용 예시 (Application.onCreate 또는 MainActivity.onCreate)74lifecycleScope.launch {75val verification = DidimVerification(applicationContext)76verification.verifyInstall()77.onSuccess { Log.d("DIDIM", "Verification successful") }78.onFailure { Log.e("DIDIM", "Verification failed", it) }79}
💡호출 시점
- •앱 최초 실행 시 (Application.onCreate)
- •매일 앱 시작 시 (14일 리텐션 추적을 위해)
추가 정보
- •API Secret은 Install Referrer 검증 등의 API 요청 시 필요합니다. 테스터 관리 페이지에서 확인할 수 있습니다.
- •Install Referrer 파싱 로직은 서버에서 자동으로 처리됩니다.
- •API 엔드포인트는 HTTPS를 사용하며, 모든 요청은 보안 연결됩니다.
- •문의사항이 있으시면 support@didim.com으로 연락주세요.