적응형 인라인 배너

적응형 인라인 배너는 장치에서 광고 크기를 최적화하여 최대 효율을 제공하는 유연한 배너 광고 형식입니다.

이 광고 유형은 개발자가 광고에 허용 가능한 최대 너비 및 높이를 설정할 수 있게 하지만, 최적의 광고 크기는 여전히 자동으로 결정됩니다. 최적의 광고 크기를 선택하기 위해, 내장된 적응형 배너는 고정 높이가 아닌 최대 높이를 사용합니다. 따라서 성과를 높일 여지가 있습니다.

일반적으로 해당 형식은 피드 기반 앱이나 광고에 주로 집중해도 되는 상황에서 사용됩니다.

표시 예

이 가이드는 Unity 앱에 적응형 인라인 배너를 통합하는 방법을 보여줍니다. 코드 예시와 지침 외에도 형식별 권장 사항 및 추가 리소스에 대한 링크가 포함되어 있습니다.

사전 준비

  1. Yandex Mobile Ads Unity Plugin을 통합하려면 빠른 시작의 프로세스를 수행하세요.
  2. 최신 Yandex Mobile Ads Unity Plugin 버전을 실행하고 있는지 확인하세요. 중재를 사용하는 경우, 최신 통합 빌드 버전을 실행하고 있는지도 확인하세요.

실행

적응형 인라인 배너 통합을 위한 주요 단계:

  • 배너 광고 객체를 생성 및 구성합니다.
  • 콜백 메서드 리스너를 등록합니다.
  • 광고를 로드합니다.
  • Adfox를 사용하는 경우 추가 설정을 전달합니다.

적응형 인라인 배너 통합 특징

  1. onAdFailedToLoad 이벤트에서 오류가 발생한 경우, 새로운 광고를 다시 로드하려고 시도하지 마세요. 다른 옵션이 없는 경우, 광고 로드 재시도 횟수를 제한하세요. 이렇게 하면 제한이 발생할 때 지속적인 실패 요청과 연결 문제를 방지할 수 있습니다.

  2. 적응형 인라인 배너가 올바르게 작동하도록 하려면 앱 레이아웃을 적응형으로 만드세요. 그렇지 않으면 광고가 잘못 렌더링될 수 있습니다.

  3. 적응형 인라인 배너는 사용 가능한 모든 너비를 사용할 때 가장 잘 작동합니다. 대부분의 경우에는 장치 화면의 전체 너비에 해당합니다. 앱에 적용 가능한 모든 패딩과 안전한 디스플레이 영역을 포함해야 합니다.

  4. 적응형 인라인 배너는 스크롤 가능한 콘텐츠에 배치하도록 설계되었습니다. 장치 화면과 높이를 동일하게 하거나 API에 따라 최대 높이로 제한할 수 있습니다.

  5. 광고의 크기를 가져오려면 광고 컨테이너의 사용 가능한 너비와 허용 가능한 최대 광고 높이를 인수로 받아들이는 BannerAdSize.InlineSize(screenWidth, maxAdHeight) 메서드를 사용하세요.

  6. BannerAdSize.InlineSize(screenWidth, maxAdHeight) 메서드를 사용하여 계산된 BannerAdSize 객체는 백엔드에서 가장 효과적인 광고 크기를 선택하기 위한 기술 데이터를 포함합니다. 광고의 높이는 로드될 때마다 변경될 수 있습니다. 광고의 실제 너비와 높이는 성공적인 광고 로드 메시지를 받은 후에 사용할 수 있습니다.

프로젝트에 배너 추가

앱에 배너를 표시하려면, 스크립트(C#)에서 Banner 객체를 생성하여 GameObject에 연결합니다.

using UnityEngine;
using YandexMobileAds;
using YandexMobileAds.Base;

public class YandexMobileAdsInlineBannerDemoScript : MonoBehaviour
{
    private Banner banner;

    private int GetScreenWidthDp()
    {
        int screenWidth = (int)Screen.safeArea.width;
        return ScreenUtils.ConvertPixelsToDp(screenWidth);
    }

    private void RequestInlineBanner()
    {   
        string adUnitId = "demo-banner-yandex"; // "R-M-XXXXXX-Y"로 교체
        BannerAdSize bannerMaxSize = BannerAdSize.InlineSize(GetScreenWidthDp(), 100);
        banner = new Banner(adUnitId, bannerMaxSize, AdPosition.BottomCenter);
    }
}

Banner 생성자는 다음과 같은 매개변수를 포함합니다.

  • AdUnitId: 파트너 인터페이스에서 발급된 고유 식별자로, 다음과 같이 표시됩니다. R-M-XXXXXX-Y.

    Совет

    테스트 목적으로 데모 단위 ID "demo-banner-yandex"를 사용할 수 있습니다. 광고를 게시하기 전에 데모 단위 ID를 실제 광고 단위 ID로 교체해야 합니다.

  • BannerAdSize: 표시하려는 배너의 크기.

  • AdPosition: 화면에서의 위치.

  • InlineSize(int width, int maxHeight): 배너 치수.

너비와 최대 허용 높이를 설정하세요. 광고는 이러한 치수에 맞게 조정됩니다. 선택한 광고의 높이는 장치 화면의 높이를 초과하지 않습니다.

광고 로드 및 렌더링

Banner 클래스의 객체를 생성 및 구성한 후 광고를 로드해야 합니다. 광고를 로드하려면 AdRequest 객체를 인수로 받는 LoadAd 메서드를 사용합니다.

적응형 인라인 배너를 로드하기 전에 각 장치에 대한 광고 크기도 계산해야 합니다. 작업은 SDK API( BannerAdSize.InlineSize(screenWidth, maxAdHeight))를 통해 자동으로 수행됩니다.

요청에 사용자 관심사, 컨텍스트 앱 데이터, 위치 세부 정보 또는 기타 데이터를 전달함으로써 AdRequest.Builder()를 통해 광고 요청 매개변수를 확장할 수 있습니다. 요청에 추가적인 컨텍스트 데이터를 제공하면 광고 품질을 크게 향상할 수 있습니다.

광고가 로드되거나 로드에 실패할 때 알림을 전송하고, 적응형 인라인 배너의 수명 주기를 추적하려면 BannerAd 클래스 객체에 대한 콜백 함수를 설정하세요.

private void RequestInlineBanner()
{
    // ...

    AdRequest request = new AdRequest.Builder().Build();
    banner.LoadAd(request);
}

배너 광고 이벤트

배너에서 발생하는 이벤트를 추적하려면 아래와 같이 적절한 EventHandler에 대한 대리자를 등록하세요.

using System;
// ...

private void RequestInlineBanner()
{
    // ...
    // 보상형 광고가 로드되었을 때 호출됩니다
    banner.OnAdLoaded += HandleAdLoaded;

    // 광고 로딩 중 오류가 발생했을 때 호출됩니다
    banner.OnAdFailedToLoad += HandleAdFailedToLoad;

    // 사용자가 광고를 탭해 다른 앱(예: 브라우저)으로 전환하려고 하여 앱이 비활성화될 때 호출됩니다.
    banner.OnLeftApplication += HandleLeftApplication;

    // 사용자가 탭한 후 앱으로 돌아왔을 때 호출됩니다
    banner.OnReturnedToApplication += HandleReturnedToApplication;

    // 사용자가 광고를 탭했을 때 호출됩니다
    banner.OnAdClicked += HandleAdClicked;

    // 노출이 등록될 때 호출됩니다
    banner.OnImpression += HandleImpression;
    // ...
}

private void HandleAdLoaded(object sender, EventArgs args)
{
    Debug.Log("AdLoaded event received");
    banner.Show();
}

private void HandleAdFailedToLoad(object sender, AdFailureEventArgs args)
{
    Debug.Log($"AdFailedToLoad event received with message: {args.Message}");
    // 이 메서드를 사용하여 새 광고를 로드하지 않는 것을 적극 권장합니다
}

private void HandleLeftApplication(object sender, EventArgs args)
{
    Debug.Log("LeftApplication event received");
}

private void HandleReturnedToApplication(object sender, EventArgs args)
{
    Debug.Log("ReturnedToApplication event received");
}

private void HandleAdClicked(object sender, EventArgs args)
{
    Debug.Log("AdClicked event received");
}

private void HandleImpression(object sender, ImpressionData impressionData)
{
    var data = impressionData == null ? "null" : impressionData.rawData;
    Debug.Log($"HandleImpression event received with data: {data}");
}

적응형 인라인 배너 통합 테스트

광고 테스트를 위한 데모 광고 단위 사용

적응형 인라인 배너 통합 및 앱 자체를 테스트하기 위해 테스트 광고를 사용하는 것이 좋습니다.

모든 광고 요청에 대해 테스트 광고가 반환되도록 보장하기 위해 특별한 데모 광고 배치 ID를 생성했습니다. 광고 통합을 확인하는 데 사용하세요.

데모 adUnitId: demo-banner-yandex.

Важно

앱을 스토어에 게시하기 전에 데모 광고 배치 ID를 Partner Interface에서 가져온 실제 ID로 교체해야 합니다.

사용 가능한 데모 광고 배치 ID 목록은 테스트용 데모 광고 단위 섹션에서 찾을 수 있습니다.

광고 통합 테스트

SDK의 내장 분석기를 사용하여 적응형 인라인 배너 통합을 확인할 수 있습니다.

이 도구는 광고가 제대로 통합되었는지 확인하고 로그에 상세한 보고서를 출력합니다. 보고서를 보려면 Android 앱 디버깅을 위한 Logcat 도구에서 "YandexAds" 키워드를 검색하세요.

adb logcat -v brief '*:S YandexAds'

통합에 성공하면 다음 메시지가 표시됩니다.

adb logcat -v brief '*:S YandexAds'
mobileads$ adb logcat -v brief '*:S YandexAds'
I/YandexAds(13719): [Integration] Ad type banner was integrated successfully

배너 광고 통합에 문제가 있는 경우, 문제에 대한 상세한 보고서와 해결 방법에 대한 권장 사항을 받게 됩니다.

광고 테스트를 위한 데모 광고 단위 사용

광고 통합 및 앱 자체를 테스트하기 위해 테스트 광고를 사용하는 것이 좋습니다.

모든 광고 요청에 대해 테스트 광고가 반환되도록 보장하기 위해 특별한 데모 광고 배치 ID를 생성했습니다. 광고 통합을 확인하는 데 사용하세요.

데모 adUnitId: demo-banner-yandex.

Важно

앱을 스토어에 게시하기 전에 데모 광고 단위 ID를 Partner Interface에서 가져온 실제 ID로 교체해야 합니다.

사용 가능한 데모 광고 배치 ID 목록은 테스트용 데모 광고 단위 섹션에서 찾을 수 있습니다.

광고 통합 테스트

네이티브 콘솔 도구를 사용하여 광고 통합을 테스트할 수 있습니다.

자세한 로그를 보려면 YMAMobileAds 클래스의 enableLogging 메서드를 호출하세요.

YMAMobileAds.enableLogging()

SDK 로그를 보려면 콘솔 도구로 이동하여 Subsystem = com.mobile.ads.ads.sdk를 설정하세요. 카테고리와 오류 수준별로 로그를 필터링할 수도 있습니다.

광고 통합에 문제가 있는 경우, 문제에 대한 상세한 보고서와 해결 방법에 대한 권장 사항을 받게 됩니다.

광고 사전 로드

광고 로딩은 모바일 중재에 연결된 광고 네트워크 수와 사용자의 인터넷 속도에 따라 몇 초가 걸릴 수 있습니다. 광고를 표시하기 전에 미리 로드하는 것을 권장합니다.

앱 시작 시, 또는 표시 직전에 광고를 로드할 수 있습니다. DontDestroyOnLoad(gameObject) 호출을 사용하여 장면 간 객체를 보존해야 합니다. 이는 로드된 광고가 장면 변경 시 gameObject와 함께 삭제되지 않도록 보장합니다.

그런 다음 배너를 렌더링해야 할 때 banner.Show()를 호출하세요.

표시될 가능성이 낮은 너무 많은 화면에 광고를 캐시하면 광고 효과가 떨어질 수 있습니다. 예를 들어 사용자가 세션당 2~3개의 게임 레벨을 완료하는 경우, 6~7개의 화면에 광고를 캐시하면 안 됩니다. 광고 가시성이 감소할 수 있으며, 광고 시스템이 앱의 우선순위를 낮출 수 있습니다.

앱에 적절한 균형을 찾을 수 있도록 파트너 인터페이스에서 "노출 비율" 또는 "가시적 노출 비율" 지표를 추적하세요. 20% 미만인 경우, 캐싱 알고리즘을 수정해야 할 가능성이 있습니다. 노출 비율이 높을수록 효과가 큽니다.

사용하지 않는 메모리 정리

각 광고 요청 전에 banner?.Destroy()를 호출하고 Banner 객체를 다시 생성하는 것을 권장합니다. 이렇게 하면 사용된 모든 메모리가 정리되고 앱이 장치를 과부하시키지 않으면서 여러 번 광고를 요청하고 표시할 수 있습니다. 반복적인 광고 로드 및 수명 주기 중단과 관련된 코드 오류를 방지할 수도 있습니다.

추가 리소스