오프라인 지원
SDK는 네트워크가 불안정하거나 오프라인일 때도 작동할 수 있도록 설계되었습니다.
이벤트 큐잉
사용자가 이벤트를 발생시켰는데 인터넷이 안 되면, SDK가 로컬에 저장해뒀다가 나중에 자동으로 전송합니다.
작동 방식
trackEvent()호출인터넷 확인
인터넷 안 됨 → 로컬 DB에 저장
나중에 인터넷 복구되면 → 자동 전송
저장 위치
Android: Room Database (
event_queue테이블)iOS: 로컬 파일 시스템
저장 용량
최대 1000개의 이벤트를 저장합니다. 초과하면 오래된 것부터 삭제됩니다.
오퍼월 캐싱
오퍼월 콘텐츠도 일부 캐싱됩니다:
이미지, 스크립트 등 정적 리소스
최근 본 광고 목록
사용자 설정
완전 오프라인에서는 오퍼월을 열 수 없지만, 약한 네트워크에서도 빠르게 로딩됩니다.
네트워크 상태 확인
SDK는 네트워크 상태를 자동으로 감지하지만, 앱에서 직접 확인할 수도 있습니다:
Android:
val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val network = connectivityManager.activeNetwork
val isConnected = network != null
if (!isConnected) {
// 오프라인 - 사용자에게 알림
Toast.makeText(this, "인터넷 연결을 확인해주세요", Toast.LENGTH_SHORT).show()
}iOS:
import Network
let monitor = NWPathMonitor()
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
print("인터넷 연결됨")
} else {
print("인터넷 안 됨")
}
}
let queue = DispatchQueue(label: "NetworkMonitor")
monitor.start(queue: queue)수동으로 이벤트 전송
오프라인에서 앱을 쓰다가 인터넷이 다시 연결되면, SDK가 자동으로 쌓인 이벤트를 보냅니다. 하지만 수동으로 트리거하고 싶다면:
// Android
AdchainSdk.flushEvents()
// iOS
AdchainSdk.shared.flushEvents()
// React Native
await AdchainSdk.flushEvents();주의사항
오프라인에서 할 수 없는 것
SDK 초기화
사용자 로그인
오퍼월 첫 로딩
퀴즈/미션 목록 조회
오프라인에서 할 수 있는 것
이벤트 큐잉 (나중에 전송)
이미 로딩된 오퍼월 보기
캐싱된 콘텐츠 접근
네트워크 최적화
이벤트 재전송 시 SDK는 다음과 같이 최적화되어 있습니다:
지수 백오프: 실패하면 재시도 간격을 점점 늘림 (1초, 2초, 4초, 8초...)
배치 전송: 이벤트를 모아서 한 번에 전송
네트워크 타입 확인: Wi-Fi일 때만 대량 전송
다음 단계
Last updated