광고 캐싱
GFP SDK 8.12.0 버전부터 광고에 대한 디스크 캐싱 기능을 지원합니다.
이를 통해 광고 로딩 시간을 크게 줄일 수 있으며,
특히 콜드 스타트 환경에서 실행되는 스플래시 광고 등에 적용 시 사용자 경험을 향상시킬 수 있습니다.
디스크 캐싱 대상은 로딩 지연 최소화를 위해 단순 광고 응답 뿐만 아니라 광고에 사용되는 이미지와 동영상 같은 리소스를 포함합니다.
- 내부적으로 테스트 시 광고 로딩 시간의 평균 단축률은 약 71.4% 입니다.
- 디스크 캐싱 기능은
8.12.0버전 기준 S2S Native 광고에만 적용할 수 있습니다.
적용하기
아래와 같이 크게 2가지 방법으로 디스크 캐싱 적용이 가능하며, 한 가지 방법을 선택하여 적용할 수 있습니다.
- GfpAdLoader 에 옵션 추가
- GfpAdCacheManager 를 통해 커스텀하게 적용
스플래시 광고를 포함한 대부분의 경우 1번 방법으로 충분하며, 2번 방법에 비해 간단하게 적용이 가능합니다.
1. GfpAdLoader 에 옵션 추가하기
광고 로드에 사용하는 GfpAdLoader 객체 빌드 시에 withDiskCache(true) 옵션을 추가합니다.
- Kotlin
- Java
val adLoader = GfpAdLoader.Builder(context, adParam)
// . . .
.withDiskCache(true)
.build()
adLoader.loadAd()
GfpAdLoader adLoader = new GfpAdLoader.Builder(context, adParam)
// . . .
.withDiskCache(true)
.build();
adLoader.loadAd();
상세 동작
loadAd()수행 시 디스크 캐싱된 광고를 로드함과 동시에 동일 광고 유닛 ID 에 대한 다음 광고를 자동으로 요청하여 디스크 캐싱합니다- 디스크 캐싱된 광고가 없을 경우 일반적인 GfpAdLoader 와 동일한 방식으로 광고를 로드합니다(자동으로 다음 광고를 디스크 캐싱하는 것은 동일)
- 다음 광고를 자동으로 로드하는 프로세스는 Worker Thread 에서 수행됩니다
해당 옵션 적용 이후 첫 시도 시에는 캐싱된 광고가 없으므로 일반적인 광고 요청 및 로드가 수행되고, 이때 자동으로 다음 광고를 캐싱하므로 두 번째 시도부터 디스크 캐싱된 광고를 로드할 수 있습니다.
2. GfpAdCacheManager 사용하기
GfpAdCacheManager 를 사용해 광고를 수동으로 캐싱하거나 로드하고, 이에 대한 콜백을 받을 수 있습니다.
GfpAdCacheManager.prefetch
광고 디스크 캐싱 함수로, 다음 광고가 자동으로 캐싱되는 것 외에 여러 개의 광고 응답을 추가적으로 캐싱해야 될 때 사용합니다.
| 파라미터 | 설명 |
|---|---|
| context | context |
| adUnitId | 캐싱 대상 광고 유닛 ID |
| type | 캐싱 대상 광고 타입 |
| callback | 디스크 캐싱 콜백으로 성공 및 실패 시 발화 |
- Kotlin
- Java
// 광고 디스크 캐싱
GfpAdCacheManager.prefetch(context, "AOS_NATIVE_EXAMPLE", GfpAdCacheType.Native, object : GfpAdCacheManager.PrefetchCallback {
override fun onSuccess() {
// 광고 캐싱 성공
}
override fun onFailure(error: GfpAdCacheError) {
// 광고 캐싱 실패
}
)
GfpAdCacheManager.prefetch(context, "AOS_NATIVE_EXAMPLE", GfpAdCacheType.Native, new GfpAdCacheManager.PrefetchCallback() {
@Override
void onSuccess() {
// 광고 캐싱 성공
}
@Overrideq
void onFailure(GfpAdCacheError error) {
// 광고 캐싱 실패
}
)
해당 함수는 내부적으로 File I/O 작업을 포함하므로 Worker Thread 에서의 수행을 권장합니다.
GfpAdCacheManager.load
디스크 캐싱된 광고 로드 함수로, 파라미터를 통해서 로드와 동시에 다음 광고를 자동으로 캐싱할 수 있습니다.
| 파라미터 | 설명 |
|---|---|
| context | context |
| adUnitId | 로드 대상 광고 유닛 ID |
| type | 로드 대상 광고 타입 |
| callback | 캐싱된 광고에 대한 로드 콜백으로 성공 시 광고 응답 객체(AdCallResponse) 발화 |
| autoPrefetchNext | 광고 유닛 ID 에 해당하는 새로운 광고 1개 자동 캐싱에 대한 여부 |
| prefetchCallback | autoPrefetchNext = true 시에, 새로운 광고 캐싱에 대한 콜백 |
- Kotlin
- Java
// 디스크 캐싱된 광고 로드
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()
}
)
// 디스크 캐싱된 광고 로드
GfpAdCacheManager.load(context, "AOS_NATIVE_EXAMPLE", GfpAdCacheType.Native, new GfpAdCacheManager.LoadCallback() {
@Override
void onSuccess(AdCallResponse adCallResponse) {
// 캐싱된 광고 로드 성공
// adLoader 를 통해 바로 로드 가능
adLoader.loadAd(adCallResponse);
}
@Override
void onFailure(GfpAdCacheError error) {
// 캐싱된 광고 로드 실패
// adLoader 를 통해 일반적인 방법으로 로드 시도
adLoader.loadAd();
}
)
autoPrefetchNext 를 통해 수행되는 광고 캐싱 작업은 Worker Thread 에서 수행됩니다. 따라서 prefetchCallback 또한 Worker Thread 에서 발화되므로 해당 콜백 함수에서 UI 작업 시 정상적으로 동작하지 않을 수 있습니다
GfpAdCacheManager.clear
특정 광고 유닛 ID 에 해당하는 광고 응답 캐시 파일 삭제
| 파라미터 | 설명 |
|---|---|
| context | context |
| adUnitId | 삭제 대상 광고 유닛 ID |
- Kotlin
- Java
GfpAdCacheManager.clear(context, "AOS_NATIVE_EXAMPLE")
GfpAdCacheManager.clear(context, "AOS_NATIVE_EXAMPLE");
GfpAdCacheManager.clearAll
모든 광고 응답 캐시 파일 삭제
| 파라미터 | 설명 |
|---|---|
| context | context |
- Kotlin
- Java
GfpAdCacheManager.clearAll(context)
GfpAdCacheManager.clearAll(context);
GfpAdCacheError
캐싱 관련 오류 클래스
| 타입 | 설명 |
|---|---|
| NotFound | 캐싱된 광고가 없음 |
| Invalid | 캐싱할 수 없는 광고 (S2S 광고가 아니거나, no-fill 광고 응답 발생) |
| FileIO | 디스크 작업 중 File I/O 관련 오류 발생 |
| LimitExceeded | adUnitId 당 캐싱할 수 있는 최대 광고 갯수 초과 (5개) |
FAQ
- 캐싱 파일은 어디에 저장되나요?
- 캐싱되는 광고 응답 및 리소스는 캐시 디렉토리(cacheDir) 에 저장됩니다.
- 캐싱되어 있는 광고가 여러 개일 경우 로드 시 어떻게 되나요?
- 캐싱된 광고 로드 시 캐싱 시점이 오래된 광고부터 사용됩니다.
- 캐싱 가능한 광고에 대한 기준은 무엇인가요?
- S2S 광고만 연동된 광고 유닛 ID 에 대해서만 캐싱 가능하며, empty(no-fill) 광고 응답은 캐싱하지 않습니다.
- 캐싱할 수 있는 광고 갯수의 제한이 있나요?
- 하나의 광고 유닛 ID 당 최대 5개까지 기기에 캐싱할 수 있으며, 이를 초과하여 캐싱 시도 시 실패합니다.
- 캐싱된 파일은 얼마나 보관되나요?
- 로드된 광고는 즉시 삭제되며, 7일이 지난 광고 응답 및 리소스 캐시 파일은 사용되지 않고 삭제됩니다.
- 서비스 앱 버전이 변경되면 어떻게 되나요?
- 서비스 앱 버전이 변경되면 이전 버전에서 캐싱했던 파일들은 모두 사용되지 않고 삭제됩니다.