본문으로 건너뛰기

광고 캐싱

GFP SDK 8.12.0 버전부터 광고에 대한 디스크 캐싱 기능을 지원합니다. 이를 통해 광고 로딩 시간을 크게 줄일 수 있으며, 특히 콜드 스타트 환경에서 실행되는 스플래시 광고 등에 적용 시 사용자 경험을 향상시킬 수 있습니다. 디스크 캐싱 대상은 로딩 지연 최소화를 위해 단순 광고 응답 뿐만 아니라 광고에 사용되는 이미지와 동영상 같은 리소스를 포함합니다.

정보
  • 내부적으로 테스트 시 광고 로딩 시간의 평균 단축률은 약 71.4% 입니다.
  • 디스크 캐싱 기능은 8.12.0 버전 기준 S2S Native 광고에만 적용할 수 있습니다.

적용하기

아래와 같이 크게 2가지 방법으로 디스크 캐싱 적용이 가능하며, 한 가지 방법을 선택하여 적용할 수 있습니다.

  1. GfpAdLoader 에 옵션 추가
  2. GfpAdCacheManager 를 통해 커스텀하게 적용

스플래시 광고를 포함한 대부분의 경우 1번 방법으로 충분하며, 2번 방법에 비해 간단하게 적용이 가능합니다.


1. GfpAdLoader 에 옵션 추가하기

광고 로드에 사용하는 GfpAdLoader 객체 빌드 시에 withDiskCache(true) 옵션을 추가합니다.

val adLoader = GfpAdLoader.Builder(context, adParam)
// . . .
.withDiskCache(true)
.build()

adLoader.loadAd()

상세 동작

  • loadAd() 수행 시 디스크 캐싱된 광고를 로드함과 동시에 동일 광고 유닛 ID 에 대한 다음 광고를 자동으로 요청하여 디스크 캐싱합니다
  • 디스크 캐싱된 광고가 없을 경우 일반적인 GfpAdLoader 와 동일한 방식으로 광고를 로드합니다(자동으로 다음 광고를 디스크 캐싱하는 것은 동일)
  • 다음 광고를 자동으로 로드하는 프로세스는 Worker Thread 에서 수행됩니다
정보

해당 옵션 적용 이후 첫 시도 시에는 캐싱된 광고가 없으므로 일반적인 광고 요청 및 로드가 수행되고, 이때 자동으로 다음 광고를 캐싱하므로 두 번째 시도부터 디스크 캐싱된 광고를 로드할 수 있습니다.


2. GfpAdCacheManager 사용하기

GfpAdCacheManager 를 사용해 광고를 수동으로 캐싱하거나 로드하고, 이에 대한 콜백을 받을 수 있습니다.


GfpAdCacheManager.prefetch

광고 디스크 캐싱 함수로, 다음 광고가 자동으로 캐싱되는 것 외에 여러 개의 광고 응답을 추가적으로 캐싱해야 될 때 사용합니다.

파라미터설명
contextcontext
adUnitId캐싱 대상 광고 유닛 ID
type캐싱 대상 광고 타입
callback디스크 캐싱 콜백으로 성공 및 실패 시 발화
// 광고 디스크 캐싱
GfpAdCacheManager.prefetch(context, "AOS_NATIVE_EXAMPLE", GfpAdCacheType.Native, object : GfpAdCacheManager.PrefetchCallback {
override fun onSuccess() {
// 광고 캐싱 성공
}
override fun onFailure(error: GfpAdCacheError) {
// 광고 캐싱 실패
}
)
정보

해당 함수는 내부적으로 File I/O 작업을 포함하므로 Worker Thread 에서의 수행을 권장합니다.


GfpAdCacheManager.load

디스크 캐싱된 광고 로드 함수로, 파라미터를 통해서 로드와 동시에 다음 광고를 자동으로 캐싱할 수 있습니다.

파라미터설명
contextcontext
adUnitId로드 대상 광고 유닛 ID
type로드 대상 광고 타입
callback캐싱된 광고에 대한 로드 콜백으로 성공 시 광고 응답 객체(AdCallResponse) 발화
autoPrefetchNext광고 유닛 ID 에 해당하는 새로운 광고 1개 자동 캐싱에 대한 여부
prefetchCallbackautoPrefetchNext = true 시에, 새로운 광고 캐싱에 대한 콜백
// 디스크 캐싱된 광고 로드
GfpAdCacheManager.load(context, "AOS_NATIVE_EXAMPLE", GfpAdCacheType.Native, object : GfpAdCacheManager.LoadCallback {
override fun onSuccess(adCallResponse: AdCallResponse) {
// 캐싱된 광고 로드 성공
// adLoader 를 통해 바로 로드 가능
adLoader.loadAd(adCallResponse)
}
override fun onFailure(error: GfpAdCacheError) {
// 캐싱된 광고 로드 실패
// adLoader 를 통해 일반적인 방법으로 로드 시도
adLoader.loadAd()
}
)
정보

autoPrefetchNext 를 통해 수행되는 광고 캐싱 작업은 Worker Thread 에서 수행됩니다. 따라서 prefetchCallback 또한 Worker Thread 에서 발화되므로 해당 콜백 함수에서 UI 작업 시 정상적으로 동작하지 않을 수 있습니다


GfpAdCacheManager.clear

특정 광고 유닛 ID 에 해당하는 광고 응답 캐시 파일 삭제

파라미터설명
contextcontext
adUnitId삭제 대상 광고 유닛 ID
GfpAdCacheManager.clear(context, "AOS_NATIVE_EXAMPLE")

GfpAdCacheManager.clearAll

모든 광고 응답 캐시 파일 삭제

파라미터설명
contextcontext
GfpAdCacheManager.clearAll(context)

GfpAdCacheError

캐싱 관련 오류 클래스

타입설명
NotFound캐싱된 광고가 없음
Invalid캐싱할 수 없는 광고 (S2S 광고가 아니거나, no-fill 광고 응답 발생)
FileIO디스크 작업 중 File I/O 관련 오류 발생
LimitExceededadUnitId 당 캐싱할 수 있는 최대 광고 갯수 초과 (5개)

FAQ

  • 캐싱 파일은 어디에 저장되나요?
    • 캐싱되는 광고 응답 및 리소스는 캐시 디렉토리(cacheDir) 에 저장됩니다.
  • 캐싱되어 있는 광고가 여러 개일 경우 로드 시 어떻게 되나요?
    • 캐싱된 광고 로드 시 캐싱 시점이 오래된 광고부터 사용됩니다.
  • 캐싱 가능한 광고에 대한 기준은 무엇인가요?
    • S2S 광고만 연동된 광고 유닛 ID 에 대해서만 캐싱 가능하며, empty(no-fill) 광고 응답은 캐싱하지 않습니다.
  • 캐싱할 수 있는 광고 갯수의 제한이 있나요?
    • 하나의 광고 유닛 ID 당 최대 5개까지 기기에 캐싱할 수 있으며, 이를 초과하여 캐싱 시도 시 실패합니다.
  • 캐싱된 파일은 얼마나 보관되나요?
    • 로드된 광고는 즉시 삭제되며, 7일이 지난 광고 응답 및 리소스 캐시 파일은 사용되지 않고 삭제됩니다.
  • 서비스 앱 버전이 변경되면 어떻게 되나요?
    • 서비스 앱 버전이 변경되면 이전 버전에서 캐싱했던 파일들은 모두 사용되지 않고 삭제됩니다.