오프라인 지원

SDK는 네트워크가 불안정하거나 오프라인일 때도 작동할 수 있도록 설계되었습니다.

이벤트 큐잉

사용자가 이벤트를 발생시켰는데 인터넷이 안 되면, SDK가 로컬에 저장해뒀다가 나중에 자동으로 전송합니다.

작동 방식

  1. trackEvent() 호출

  2. 인터넷 확인

  3. 인터넷 안 됨 → 로컬 DB에 저장

  4. 나중에 인터넷 복구되면 → 자동 전송

저장 위치

  • 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