Android에서의 Audience Network SDK 통합 관련 팁

아래에서는 개발자가 Android에서 구현하기 위한 몇 가지 통합 모범 사례를 소개합니다. 이러한 코딩 팁과 시나리오는 개발자 팀이 Audience Network SDK에 대해 더욱 잘 이해하고, 통합 프로세스의 효율을 개선하며, 출시 후 솔루션을 최신으로 유지하는 데 도움이 됩니다.

필수 조건

다음 예시 중 하나를 완료해야 합니다.

이슈: loadAd를 여러 번 호출함으로써 충돌이 발생합니다.

모범 사례

잘못된 사례


모범 사례:

팁 1: 광고가 무시되거나 광고를 읽어들이는 데 오류가 발생한 경우에만 loadAd를 다시 호출합니다. 단, 배너 광고는 예외입니다.

광고가 무시되거나 콜백에서 오류가 발생했을 때 알림을 받더라도 재시도를 무한 반복하지 않도록 최대 재시도 횟수를 설정해야 합니다. 광고를 읽어들이는 데 실패한 원인과 관계없이 onError(Ad, AdError)가 호출됩니다. 예를 들어 '인터넷 연결이 없는' 경우 최대 재시도 횟수에 도달하면 광고를 읽어들이는 것을 중단해야 합니다.

Audience Network SDK에서는 배너 광고를 제외한 모든 광고 유형에서 loadAd를 호출할 때 주의를 기울여야 합니다. 광고가 표시되는 중에는 절대 loadAd를 호출해서는 안 됩니다. AdListener를 구현하여 광고가 무시되거나, 완료되거나, 닫히거나, 오류가 발생할 때마다 알림을 받는 것이 좋습니다. 이렇게 하면 아무런 문제 없이 loadAd를 합법적으로 다시 호출할 수 있습니다.

예 1: onInterstitialDismissed 콜백에서 loadAd를 호출합니다.

private InterstitialAd mInterstitialAd;
private static final MAX_NUMBER_OF_RETRIES = 3;
private boolean shouldLoadAd = true;
private int retryCount = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // call the super class onCreate 
    super.onCreate(savedInstanceState);
    ...
    mInterstitialAd = new InterstitialAd(this, "YOUR_PLACEMENT_ID");
    InterstitialAdListener interstitialAdListener = new InterstitialAdListener() {
        ...
        @Override
        public void onInterstitialDismissed(Ad ad) {
            // Interstitial dismissed callback
            if (shouldLoadAd) {
                /* Change shouldLoadAd value to false, 
                    or a new interstitial ad will show immediately 
                    when previous interstitial ad gets dismissed. */
                shouldLoadAd = false;
                mInterstitialAd.loadAd();
            }
        }
        
        @Override
        public void onError(Ad ad, AdError adError) {
            // Ad error callback
            // Stop retrying when it reaches to MAX_NUMBER_OF_RETRIES
            if(retryCount < MainActivity.MAX_NUMBER_OF_RETRIES) {
                retryCount += 1;
                mInterstitialAd.loadAd();
            }
        }
        ...
    };
    mInterstitialAd.loadAd(
            mInterstitialAd.buildLoadAdConfig()
                    .withAdListener(interstitialAdListener)
                    .build());
    ...
}

예 2: NativeAd의 경우 onError 콜백에서 loadAd를 호출합니다.

private static final MAX_NUMBER_OF_RETRIES = 3;
private NativeAd mNativeAd;
private int retryCount = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // call the super class onResume
    super.onCreate(savedInstanceState);
    ...
    mNativeAd = new NativeAd(this, "YOUR_PLACEMENT_ID");
    NativeAdListener nativeAdListener = new AdListener() {
        ...
        @Override
        public void onError(Ad ad, AdError error) {
            // Ad error callback
            // Stop retrying when it reaches to MAX_NUMBER_OF_RETRIES
            if (retryCount < MainActivity.MAX_NUMBER_OF_RETRIES) {
                retryCount += 1;
                mNativeAd.loadAd();
            }
        }
        ...
    };
    mNativeAd.loadAd(
            mNativeAd.buildLoadAdConfig()
                    .withAdListener(nativeAdListener)
                    .build());
    ...
}

팁 2: 광고 인스턴트는 광고 관리자가 아닙니다. 네이티브 광고와 배너 광고에서 광고를 '다시 읽어들일' 때마다 새 인스턴스를 인스턴트화해야 합니다.

예:

private Button showNativeAdButton;

@Override
public void onCreate(Bundle savedInstanceState) {
    // call the super class onResume
    super.onCreate(savedInstanceState);
    ...
    showNativeAdButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Create a native ad request with a placement ID
            nativeAd = new NativeAd(NativeAdSampleActivity.this, "YOUR_PLACEMENT_ID");

            // Create a listener to get notified when the ad was loaded.
            NativeAdListener nativeAdListener = new AdListener() {
                ...
            }

            // Initiate a request to load an ad.
            nativeAd.loadAd(
                    nativeAd.buildLoadAdConfig()
                            .withAdListener(nativeAdListener)
                            .build());
        }
    });
    ...
}

잘못된 사례:

팁 1: 일부 Android 콜백(예: onResume() 또는 onStart() 콜백)에서는 절대 loadAd를 사용하지 마세요. 메모리에서 마지막 광고를 무시하거나 해제하지 않고 loadAd를 반복해서 호출하게 될 수도 있습니다.


예:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // call the super class onResume
    super.onCreate(savedInstanceState);
    ...
    mNativeAd = new NativeAd(this, "YOUR_PLACEMENT_ID");
    ...
}

@Override
protected void onResume() {
    super.onResume();
    ...
    // DON'T DO THIS!
    mNativeAd.loadAd(
            mNativeAd.buildLoadAdConfig()
                    .withAdListener(NativeAdSampleActivity.this)
                    .build());
}

팁 2: onError 콜백에서 loadAd를 무기한 호출하지 않도록 주의하세요. 아래는 반드시 피해야 할 잘못된 예시입니다. '인터넷 연결이 없는' 경우 loadAd가 반복해서 호출되고, 결국 앱이 충돌하게 됩니다.


예:

private NativeAd mNativeAd;
private boolean shouldRetry = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // call the super class onResume
    super.onCreate(savedInstanceState);
    ...
    mNativeAd = new NativeAd(this, "YOUR_PLACEMENT_ID");
    NativeAdListener nativeAdListener = new AdListener() {
        ...
        @Override
        public void onError(Ad ad, AdError error) {
            // Ad error callback
            // Remember to change shouldRetry to false, or DON'T implement like this! 
            if (shouldRetry) {
                mNativeAd.loadAd();
            }
        }
        ...
    };
    mNativeAd.loadAd(
            mNativeAd.buildLoadAdConfig()
                    .withAdListener(NativeAdSampleActivity.this)
                    .build());
    ...
}

다음 단계

추가 리소스

시작하기 가이드

Audience Network를 시작하기 위한 기술 가이드

API 참고 자료

iOS용 Facebook SDK 참고 자료