미션
미션은 사용자가 특정 조건을 달성하면 보상을 받는 기능입니다. 데일리 미션, 위클리 미션 등으로 사용자가 매일 앱을 방문하게 만듭니다.
시작하기
AdchainMission 인스턴스 생성
미션 기능을 사용하려면 먼저 AdchainMission 인스턴스를 생성합니다.
Android:
val adchainMission = AdchainMission()iOS:
let adchainMission = AdchainMission()React Native:
React Native에서는 SDK의 전역 인스턴스를 사용합니다.
import AdchainSdk from '@1selfworld/adchain-sdk-react-native';이벤트 리스너 설정 (권장)
미션 완료, 진행, 갱신 이벤트를 받으려면 리스너를 설정합니다.
Android:
adchainMission.setEventsListener(object : AdchainMissionEventsListener {
override fun onCompleted(mission: Mission) {
Log.d(TAG, "Mission completed: ${mission.id}")
// 미션 목록 새로고침
refreshMissionList()
}
override fun onProgressed(mission: Mission) {
Log.d(TAG, "Mission progressed: ${mission.id}")
// 진행률 UI 업데이트
updateMissionProgress(mission)
}
override fun onRefreshed(unitId: String?) {
Log.d(TAG, "Mission refreshed: ${unitId}")
// 미션 목록 전체 새로고침
refreshMissionList()
}
})iOS:
React Native:
미션 목록 조회
현재 진행 중인 미션 목록을 가져옵니다.
Android:
iOS:
React Native:
응답 데이터 구조
MissionResponse (Android/iOS)
서버에서 반환되는 전체 응답 구조입니다.
success
boolean
요청 성공 여부
events
Mission[]
미션 목록
current
number
완료된 미션 개수
total
number
전체 미션 개수
rewardUrl
string?
보상 수령 URL
titleText
string?
미션 섹션 제목 (예: "무료 포인트 모으기!")
descriptionText
string?
설명 텍스트
bottomText
string?
하단 텍스트 (예: "800만 포인트 받으러 가기")
rewardIconUrl
string?
보상 아이콘 URL
bottomIconUrl
string?
하단 아이콘 URL
MissionListResponse (React Native)
React Native에서 반환되는 응답 구조입니다.
missions
Mission[]
미션 목록
completedCount
number
완료된 미션 개수
totalCount
number
전체 미션 개수
canClaimReward
boolean
보상 수령 가능 여부
titleText
string?
미션 섹션 제목
descriptionText
string?
설명 텍스트
bottomText
string?
하단 텍스트
rewardIconUrl
string?
보상 아이콘 URL
bottomIconUrl
string?
하단 아이콘 URL
Mission
개별 미션 객체의 구조입니다.
id
string
✅
✅
✅
미션 고유 ID
title
string
✅
✅
✅
미션 제목
description
string
✅
✅
✅
미션 설명
imageUrl
string
✅
✅
✅
썸네일 이미지 URL
landingUrl
string
✅
✅
✅ (actionUrl)
미션 URL
point
string
✅
✅
-
보상 포인트 (문자열)
reward
number
-
-
✅
보상 포인트 (숫자)
status
string?
✅
✅
-
미션 상태
progress
number?
✅
✅
-
미션 진행도
total
number?
✅
✅
-
미션 목표
type
MissionType
✅
✅
✅ (string)
미션 타입
isCompleted
boolean?
-
-
✅
완료 여부 (RN)
impressionOrder
number?
✅
✅
-
노출 순서 (내부 추적용)
placementId
string?
✅
✅
-
배치 ID (내부 추적용)
중요:
point필드는 string 타입입니다 (Android/iOS). React Native는reward(number) 사용.progress와total은 개별 미션의 진행도입니다 (예: "광고 3개 클릭" 중 2개 완료).MissionResponse의current/total은 전체 미션 중 완료된 개수입니다.
MissionType:
normal- 일반 미션offerwall_promotion- 오퍼월 프로모션 (클릭 시 오퍼월 열림)
MissionProgress (iOS)
iOS의 load() 메서드가 두 번째 파라미터로 반환하는 구조입니다.
current
number
완료된 미션 개수
total
number
전체 미션 개수
percentage
number
완료 비율 (자동 계산)
MissionStatus (Android)
Android의 getMissionStatus() 메서드가 반환하는 구조입니다.
current
number
완료된 미션 개수
total
number
전체 미션 개수
isCompleted
boolean
모든 미션 완료 여부
canClaimReward
boolean
보상 수령 가능 여부
미션 클릭 처리
사용자가 미션을 클릭하면 clickMission() 메서드를 호출합니다.
Android:
iOS:
React Native:
clickMission 동작 흐름
clickMission() 호출 시 SDK는 자동으로:
mission_clicked이벤트 추적리스너의
onClicked()콜백 호출 (설정된 경우)미션 WebView를 전체화면으로 열기
사용자가 미션 완료 시:
mission_completed이벤트 추적리스너의
onCompleted()콜백 호출포인트 자동 지급 (서버)
미션 진행 업데이트 시:
mission_progressed이벤트 추적리스너의
onProgressed()콜백 호출
WebView에서 갱신 트리거 시:
리스너의
onRefreshed()콜백 호출
보상 수령
모든 미션을 완료하면 보상을 수령할 수 있습니다.
Android:
iOS:
React Native:
미션 상태 조회
Android
getMissionStatus() 메서드로 전체 미션 완료 상태를 조회합니다.
iOS
load() 메서드가 반환하는 MissionProgress를 사용합니다.
React Native
loadMissionList() 응답의 canClaimReward 필드를 사용합니다.
이벤트 리스너
리스너 인터페이스
Android:
iOS:
이벤트 설명
onCompleted
사용자가 미션을 완료했을 때 호출됩니다. 이 시점에서 UI를 새로고침해야 합니다.
호출 시점: 미션 WebView에서 완료 이벤트 수신 시
사용 예시:
Android:
iOS:
React Native:
onProgressed
미션 진행도가 업데이트되었을 때 호출됩니다.
호출 시점: 미션 WebView에서 진행 업데이트 이벤트 수신 시
사용 예시:
Android:
iOS:
React Native:
onRefreshed
미션 WebView에서 전체 미션 목록 갱신을 요청할 때 호출됩니다.
호출 시점: 미션 WebView에서 갱신 이벤트 트리거 시 (예: 보상 수령 후)
파라미터:
unitId: 갱신을 요청한 미션 Unit ID (Android/iOS는 nullable, React Native는 이벤트 페이로드에 포함)
사용 예시:
Android:
iOS:
React Native:
자동 추적 이벤트
SDK는 다음 이벤트를 자동으로 추적하여 AdChain 대시보드에 전송합니다.
mission_impressed
미션 목록 로드 시 (각 미션마다)
missionId, missionTitle, impressionOrder, placementId, userId
mission_clicked
미션 클릭 시
missionId, missionTitle, landingUrl, impressionOrder, placementId, userId
mission_completed
미션 완료 시
missionId, missionTitle, impressionOrder, placementId, userId
mission_progressed
미션 진행 업데이트 시
missionId, missionTitle, progress, total, userId
mission_refreshed
미션 목록 갱신 시
unitId, userId
이 이벤트들은 별도로 구현할 필요가 없으며, AdChain 대시보드의 통계에 자동으로 반영됩니다.
UI 구현 가이드
미션 목록 표시
Android (RecyclerView)
iOS (UITableView)
React Native (FlatList)
진행률 UI 구현
Android 예제 (체크박스 + 라인):
완료된 미션 필터링
완료된 미션을 제외하고 싶다면:
Android/iOS:
React Native:
빈 상태 처리
미션이 모두 완료되었을 때:
보상 수령 UI
보상 수령 가능 시 UI 변경:
React Native 특수사항
unitId 파라미터
React Native SDK에서는 모든 Mission API에 unitId가 필수입니다.
unitId란?
AdChain 대시보드에서 생성하는 Mission Unit의 고유 식별자
같은 앱에서 여러 Mission Unit을 운영할 수 있음 (예: 메인 화면, 프로필 화면)
각 Unit별로 다른 미션 세트 관리 가능
사용 예시:
이벤트 리스너
React Native는 Native Event Emitter를 사용합니다.
주의사항 및 베스트 프랙티스
주의사항
로그인 필수: 사용자가 로그인되어 있어야 미션 조회 가능
네트워크 필요: 오프라인 상태에서는 조회 불가
point는 문자열:
point필드는string타입 (Android/iOS)progress와 current 혼동 주의:
mission.progress/mission.total: 개별 미션의 진행도response.current/response.total: 완료된 미션 개수
플랫폼별 필드명 차이: iOS는
point, React Native는reward
베스트 프랙티스
이벤트 리스너 우선 설정 (필수!)
onCompleted/onRefreshed에서 반드시 새로고침
onProgressed에서 부분 새로고침
미션 타입별 처리
보상 수령 가능 시 UI 변경
완료된 미션 시각적 구분
투명도 낮추기 (
alpha = 0.5)"완료" 배지 표시
클릭 비활성화
React Native 캐싱 전략
에러 처리
진행률 UI 실시간 업데이트
Android/iOS 인스턴스 관리
다음 단계
Last updated