미션
미션은 사용자가 특정 조건을 달성하면 보상을 받는 기능입니다. 데일리 미션, 위클리 미션 등으로 사용자가 매일 앱을 방문하게 만듭니다.
미션 목록 조회
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개 클릭하기" 미션이 있으면:
사용자가 광고 클릭
SDK가 자동으로 progress 1 증가
5개 클릭하면 자동으로
completed상태로 변경포인트 자동 지급
별도로 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