본문 바로가기

Flutter

Flutter 광고 로딩 실패 시 재시도 로직 - Exponential Backoff, 점진적 대기 시간 증가 적용하기

광고 로딩 실패 시 재시도 로직 유의점

1. 미리 로딩하기

    → 로딩으로 인한 지연 시간을 최소화 하기 위해 미리 로딩한다.

2. 무한 반복 시도는 피해야 한다

    → 네트워크 및 자원을 절약하기 위해서 최대 재시도 횟수를 도입하는 것이 권장됨.

3. 너무 자주 재시도하지 않기

    → 인벤토리에 광고가 없어서 광고가 로드되지 않는 경우, 단 몇 초 차이로 광고가 로드 되는 경우는 매우 드물다.

 

 

점진적 대기 시간 증가(Exponential Backoff)란?

재시도 간격을 1초, 2초, 4초 등으로 점점 늘려가는 방법을 말한다.

 

 

점진적 대기 시간 증가(Exponential Backoff)의 장점과 단점

장점 : 광고가 없는 경우 자원 절약

→ 새벽 3시와 같이 광고가 없는 경우에 너무 자주 재시도 하지 않음으로써 네트워크 및 자원을 절약한다.

 

단점 : 너무 오래 걸릴 수 있음

→ 금방 다시 광고를 받을 수 있는 경우에도 시간이 오래 걸림

 

 

점진적 대기 시간 증가(Exponential Backoff) 적용 방법

void loadRewardedAd() {
    RewardedAd.load(
      adUnitId: 'your_ad_unit_id',
      request: const AdRequest(),
      rewardedAdLoadCallback: RewardedAdLoadCallback(
        onAdLoaded: (ad) {
          _rewardedAd = ad;
          retryAttempt = 0; // 성공했으니 재시도 횟수 초기화
        },
        onAdFailedToLoad: (error) {
          retryAttempt++;

          // 2의 제곱 시간만큼 지연 (최대 32초)
          final delay =
              Duration(seconds: (2 << (retryAttempt - 1)).clamp(1, 32));
          if (kDebugMode) {
            print('Ad load failed. Retrying in ${delay.inSeconds} seconds...');
          }

          Future.delayed(delay, loadRewardedAd);
        },
      ),
    );
  }