배너 광고 onAdFailedToRender 1011 에러

이 글의 성격은 무엇인가요?

질문 / 문제 해결

내용을 설명해주세요

저희 게임 사용자 로그를 분석해보니 3월 28일부터 배너 광고 관련해서 오류가 급증한 것으로 집계되었습니다.

구체적으로 onAdFailedToRender 콜백에서 발생했고, payload를 분석했을 때
payload.error.code가 1011로 나오고 있고,
payload.error.message는 null로 출력되고 있어서 어떤 내용인지 문의드립니다.

appName (선택)

cozy-tiles

이미지 첨부

@teo 님 안녕하세요

확인해보고 말씀드릴게요.

1개의 좋아요

@teo

우선 1011 오류는 네트워크 에러가 발생할 때 발생하는 오류입니다.

error_count에 비해 affected_users 지표가 상당히 낮은데,
혹시 내부 테스트는 아닌지요? 아니면 광고 error 발생 시 refresh 하는 로직이 있는지 문의드립니다.

@seonjeong 넵, 현재 배너 광고 error 발생시 300ms 간격으로 최대 10회 retry 하는 로직을 사용중입니다.

TossAds SDK는 **배너 광고를 10초 주기로 자동 refresh**해주는 것으로 알고 있는데,

1011 네트워크 에러가 지속적으로 발생하면 저희가 추가해둔 retry 로직과 만나서 affected_users에 비해 error_count가 많이 누적된 것으로 보입니다.

 [초기 렌더링 성공] → onAdRendered → 배너 노출
      ↓ (10초 후)
  [SDK auto-refresh 실패] → onAdFailedToRender → retryRenderBannerAd (10회 retry)
      ↓ (10초 후)
  [SDK auto-refresh 실패] → onAdFailedToRender → retryRenderBannerAd (10회 retry)
      ...반복

또한, onAdFailedToRender 혹은 onNoFill 발생 시 retry 하기 전에 직전에 생성된 실패 슬롯을 destroy하지 않은 채 새 슬롯을 생성하게 되어 누적된 좀비 슬롯들이 각각 SDK의 auto-refresh 트리거를 받아 독립적으로 에러 콜백을 발화, 에러가 추가 증폭한 것으로 보입니다.

attach → 슬롯A 생성 → 실패 → [슬롯A 삭제 없이] attach → 슬롯B 생성 → 실패 → ...
                                                           ↑ 슬롯A 좀비 상태로 잔존

==================

추가로, TossAdsBannerSlotErrorPayload 인터페이스 몇번째 실패인지도 같이 전달해주실 수 있으실까요?

아래와 같이 refreshCount 필드를 추가하면 배너 광고 렌더에 반복적으로 실패하는 경우 배너 숨김 처리나 대체 컨텐츠 노출 등의 방안을 도입하기에 수월할 것 같습니다 :man_bowing:

interface TossAdsBannerSlotErrorPayload {                                                                                                                                                                                                                                                                                                            
    slotId: string;
    adGroupId: string;                                                                                                                                                                                                                                                                                                                                 
    adMetadata: {};                                                                                                                                                                                                                                                                                                                                  
    refreshCount?: number;  // 0 or undefined: 초기 렌더 실패 / 1+: N번째 auto-refresh 실패
    error: {
      code: number;
      message: string;
      domain?: string;
    };
  }

@teo 님 답변이 늦어 죄송합니다

실패 시 숨김 처리나 대체 컨텐츠 노출을 희망하신다면 error가 return될 때 처리부탁드립니다

refreshCount 를 추가하는 건 관리하는데 어려울 것으로 판단되어요 :folded_hands:

1개의 좋아요