미션

미션은 사용자가 특정 조건을 달성하면 보상을 받는 기능입니다. 데일리 미션, 위클리 미션 등으로 사용자가 매일 앱을 방문하게 만듭니다.

미션 목록 조회

Android:

AdchainSdk.getMissions(
    callback = object : AdchainMissionCallback {
        override fun onSuccess(missions: List<AdchainMission>) {
            missions.forEach { mission ->
                println("미션: ${mission.title}")
                println("진행도: ${mission.progress}/${mission.total}")
                println("보상: ${mission.point}P")
            }
        }

        override fun onFailure(error: AdchainError) {
            println("미션 조회 실패: ${error.message}")
        }
    }
)

iOS:

AdchainSdk.shared.getMissions { result in
    switch result {
    case .success(let missions):
        for mission in missions {
            print("미션: \(mission.title)")
            print("진행도: \(mission.progress)/\(mission.total)")
            print("보상: \(mission.point)P")
        }
    case .failure(let error):
        print("미션 조회 실패: \(error.localizedDescription)")
    }
}

React Native:

try {
  const missions = await AdchainSdk.getMissions();
  missions.forEach(mission => {
    console.log(`미션: ${mission.title}`);
    console.log(`진행도: ${mission.progress}/${mission.total}`);
    console.log(`보상: ${mission.point}P`);
  });
} catch (error) {
  console.error('미션 조회 실패:', error);
}

미션 데이터 구조

{
  id: string;            // 미션 ID
  title: string;         // 미션 제목
  description: string;   // 설명
  point: string;
  imageUrl: string;
  landingUrl: string;
  status: string;
  progress: number;
  total: number;
}

미션 타입

  • daily: 매일 자정에 리셋

  • weekly: 매주 월요일에 리셋

  • special: 이벤트성 미션 (기간 제한)

UI에 표시하기

미션은 프로그레스 바로 표시하면 직관적입니다:

// Android
val progressPercentage = (mission.progress.toFloat() / mission.total * 100).toInt()
progressBar.progress = progressPercentage
statusText.text = "${mission.progress}/${mission.total}"

완료된 미션은 강조:

if (mission.status == "completed") {
    cardView.setBackgroundColor(Color.parseColor("#4CAF50"))
    buttonText.text = "완료!"
} else {
    cardView.setBackgroundColor(Color.WHITE)
    buttonText.text = "진행 중"
}

미션 진행 자동 업데이트

미션 진행도는 사용자가 광고를 클릭하거나 퀴즈를 풀면 자동으로 업데이트됩니다.

예를 들어 "광고 5개 클릭하기" 미션이 있으면:

  1. 사용자가 광고 클릭

  2. SDK가 자동으로 progress 1 증가

  3. 5개 클릭하면 자동으로 completed 상태로 변경

  4. 포인트 자동 지급

별도로 API를 호출할 필요 없습니다.

미션 완료 알림

미션이 완료되면 사용자에게 알려주는 게 좋습니다:

// Android - 미션 목록 주기적으로 확인
val handler = Handler(Looper.getMainLooper())
handler.postDelayed(object : Runnable {
    override fun run() {
        AdchainSdk.getMissions { missions ->
            val completed = missions.filter { it.status == "completed" && !it.isNotified }
            if (completed.isNotEmpty()) {
                showMissionCompletedDialog(completed)
            }
        }
        handler.postDelayed(this, 30000) // 30초마다 확인
    }
}, 30000)

하지만 너무 자주 확인하면 비효율적입니다. 사용자가 오퍼월을 닫을 때 확인하는 게 효율적입니다:

AdchainSdk.openOfferwall(..., listener = object : AdchainOfferwallListener {
    override fun onClose() {
        // 오퍼월 닫힐 때 미션 상태 확인
        checkMissionStatus()
    }
    ...
})

미션 필터링

특정 타입만 보고 싶다면:

val dailyMissions = missions.filter { it.type == "daily" }
val activeMissions = missions.filter { it.status == "active" }

주의사항

  • 미션은 애드체인 서버에서 관리됩니다

  • 사용자가 로그인되어 있어야 조회 가능

  • 미션 목록은 캐싱되므로 너무 자주 조회할 필요 없음

다음 단계

Last updated