광고 캐싱
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");