커스텀 adapter 빌드하기

AppLovin Max mediation matrix에 나열되지 않은 광고 네트워크를 지원하려는 경우 커스텀 adapter를 작성할 수 있습니다. 다음 안내는 이를 수행하는 방법을 보여줍니다.

    Android

    com.applovin.mediation.adapters.MediationAdapterBase 클래스의 서브클래스를 구현합니다. 이 서브클래스는 커스텀 mediation adapter와 AppLovin MAX SDK 간의 인터페이스를 활성화합니다. 해당 인터페이스는 초기화, 버전 관리, 리소스 정리 등 귀사 SDK의 기능을 처리합니다.

    1. 애플리케이션의 com.applovin.mediation.adapters 패키지에 MediationAdapterBase 서브클래스를 생성합니다. 이 클래스의 이름에는 네트워크 이름이 포함되어야 합니다 (예: com.mycompanyname.MyNetworkMediationAdapter).
    2. initialize(final MaxAdapterInitializationParameters parameters, final Activity activity, final OnCompletionListener onCompletionListener) 메서드를 오버라이드합니다. 광고 네트워크 SDK를 초기화하는 코드를 구현합니다. UI에서 설정된 앱 ID에 액세스해야 하는 경우, parameters.getServerParameters().getString( "app_id", null );을 통해 액세스할 수 있습니다. 이 로직은 AppLovin SDK 초기화와 병렬로 실행됩니다. 광고 네트워크를 초기화한 후 onCompletionListener.onCompletion()을 호출하고, 해당 완료 핸들러에 다음 값 중 하나를 전달합니다.
      • 광고 네트워크 SDK가 초기화되는 동안: InitializationStatus.INITIALIZING
      • 광고 네트워크 SDK가 성공적으로 초기화된 경우: InitializationStatus.INITIALIZED_SUCCESS
      • 광고 네트워크 SDK 초기화에 실패한 경우: InitializationStatus.INITIALIZED_FAILURE (관련 에러 메시지 포함)
      • 광고 네트워크 SDK에 초기화 콜백 상태가 없는 경우: InitializationStatus.DOES_NOT_APPLY
      • 광고 네트워크가 명시적으로 초기화되었으나 상태가 없는 경우: InitializationStatus.INITIALIZED_UNKNOWN
    3. getSdkVersion() 메서드를 오버라이드합니다. 해당 메서드에서 네트워크 SDK 버전 문자열을 반환하는 코드를 구현합니다.
    4. getAdapterVersion() 메서드를 오버라이드합니다. 해당 메서드에서 mediation adapter의 버전 번호를 반환하는 코드를 구현합니다. 모든 AppLovin adapter는 5자리 버전 관리 체계를 사용합니다. 가장 왼쪽의 4개 숫자는 네트워크 SDK 버전에 대응합니다. 마지막 숫자는 마이너 버전 번호로, adapter 릴리스를 나타냅니다.
    5. onDestroy() 메서드를 오버라이드합니다. 해당 메서드에서 네트워크 SDK 객체에 대한 정리 로직을 구현합니다.

    Banner ads

    1. com.mycompanyname.MyNetworkMediationAdapter 클래스에 MaxAdViewAdapter 인터페이스를 구현합니다.
    2. 광고를 요청하는 loadAdViewAd() 메서드를 오버라이드합니다. 광고 로직에 필요한 placement ID를 가져오려면 parameters.getThirdPartyAdPlacementId() 메서드를 호출합니다.
    3. 적절한 MaxAdViewAdapterListener 메서드를 호출합니다. 이 메서드들은 AppLovin MAX SDK에 banner 수명 주기 이벤트를 알립니다.
      • 광고가 로드되면 MaxAdViewAdapterListener.onAdViewAdLoaded()를 호출합니다.
      • 광고 로드에 실패하면 적절한 MaxAdapterError와 함께 MaxAdViewAdapterListener.onAdViewAdLoadFailed()를 호출합니다.
      • 필요에 따라 다음 banner 수명 주기 이벤트 알림을 적절히 호출할 수 있습니다: onAdViewAdClicked(), onAdViewAdCollapsed(), onAdViewAdDisplayed(), onAdViewAdDisplayFailed(), onAdViewAdExpanded(), onAdViewAdHidden().

    Interstitials

    1. com.mycompanyname.MyNetworkMediationAdapter 클래스에 MaxInterstitialAdapter 인터페이스를 구현합니다.
    2. 광고를 요청하는 loadInterstitialAd() 메서드를 오버라이드합니다. 광고 로직에 필요한 placement ID를 가져오려면 parameters.getThirdPartyAdPlacementId() 메서드를 호출합니다.
    3. 로드된 광고를 보여주는 showInterstitialAd() 메서드를 오버라이드합니다. 광고 로직에 필요한 placement ID를 가져오려면 parameters.getThirdPartyAdPlacementId() 메서드를 호출합니다. 광고가 준비되지 않은 경우 MaxInterstitialAdapterListener.onInterstitialAdDisplayFailed( MaxAdapterError.AD_NOT_READY )를 호출합니다.
    4. 적절한 MaxInterstitialAdapterListener 메서드를 호출합니다. 이 메서드들은 AppLovin MAX SDK에 interstitial 수명 주기 이벤트를 알립니다.
      • 광고가 로드되면 MaxInterstitialAdapterListener.onInterstitialAdLoaded()를 호출합니다.
      • 광고 로드에 실패하면 적절한 MaxAdapterError와 함께 MaxInterstitialAdapterListener.onInterstitialAdLoadFailed()를 호출합니다.
      • 광고가 닫히면 MaxInterstitialAdapterListener.onInterstitialAdHidden()을 호출합니다.
      • 필요에 따라 다음 interstitial 수명 주기 이벤트 알림을 적절히 호출할 수 있습니다: onInterstitialAdClicked(), onInterstitialAdDisplayFailed().

    Rewarded ads

    1. com.mycompanyname.MyNetworkMediationAdapter 클래스에 MaxRewardedAdapter 인터페이스를 구현합니다.
    2. 광고를 요청하는 loadRewardedAd() 메서드를 오버라이드합니다. 광고 로직에 필요한 placement ID를 가져오려면 parameters.getThirdPartyAdPlacementId() 메서드를 호출합니다.
    3. 로드된 광고를 보여주는 showRewardedAd() 메서드를 오버라이드합니다. 광고 로직에 필요한 placement ID를 가져오려면 parameters.getThirdPartyAdPlacementId() 메서드를 호출합니다. 광고가 준비되지 않은 경우 MaxRewardedAdapterListener.onRewardedAdDisplayFailed( MaxAdapterError.AD_NOT_READY )를 호출합니다.
    4. 적절한 MaxRewardedAdapterListener 메서드를 호출합니다. 이 메서드들은 AppLovin MAX SDK에 rewarded 비디오 수명 주기 이벤트를 알립니다.
      • 광고가 로드되면 MaxRewardedAdapterListener.onRewardedAdLoaded()를 호출합니다.
      • 광고 로드에 실패하면 적절한 MaxAdapterError와 함께 MaxRewardedAdapterListener.onRewardedAdLoadFailed()를 호출합니다.
      • 광고 재생이 시작되면 MaxRewardedAdapterListener.onRewardedAdDisplayed()를 호출합니다.
      • 사용자에게 보상을 제공해야 하는 경우, 적절한 MaxReward 수량 및 통화와 함께 MaxRewardedAdapterListener.onUserRewarded()를 호출합니다. 수량을 사용할 수 없는 경우 기본값인 MaxReward.DEFAULT_AMOUNT를 사용합니다. AppLovin은 MaxRewardedAdapterListener.onRewardedAdHidden()을 호출하기 직전에 이 메서드를 호출할 것을 권장합니다.
      • 광고가 닫히면 MaxRewardedAdapterListener.onRewardedAdHidden()을 호출합니다.
      • 필요에 따라 다음 rewarded 비디오 수명 주기 이벤트 알림을 적절히 호출할 수 있습니다: onRewardedAdClicked().

    Native ads

    1. com.mycompanyname.MyNetworkMediationAdapter 클래스에 MaxNativeAdAdapter 인터페이스를 구현합니다.
    2. 광고를 요청하는 loadNativeAd() 메서드를 오버라이드합니다.
    3. 적절한 MaxNativeAdAdapterListener 메서드를 호출합니다. 이 메서드들은 AppLovin MAX SDK에 native 광고 수명 주기 이벤트를 알립니다.
      • 광고가 로드되면 MaxNativeAdAdapterListener.onNativeAdLoaded()를 호출합니다.
      • 광고 로드에 실패하면 적절한 MaxAdapterError와 함께 MaxNativeAdAdapterListener.onNativeAdLoadFailed()를 호출합니다.
      • 광고가 표시되면 MaxNativeAdAdapterListener.onNativeAdDisplayed()를 호출합니다.
      • 사용자가 광고를 클릭하면 MaxNativeAdAdapterListener.onNativeAdClicked()를 호출합니다.

    Privacy

    MAX는 사용자가 개인정보 보호 동의를 제공하는지 여부를 나타내는 두 개의 boolean 플래그를 제공합니다. 이들은 Boolean 객체입니다. 사용자가 동의 또는 비동의 중 어느 것도 표시하지 않은 경우 이들의 값은 null입니다. MAX는 각 메서드에 parameters 객체를 전달합니다. 개인정보 보호 플래그의 값을 가져오려면 parameters 객체의 다음 메서드를 사용합니다.

    MaxAdapterParameters.hasUserConsent()
    GDPR 동의 플래그용. 사용자에게 GDPR이 적용되는지 여부를 확인하려면 이 문서의 SDK 연동 가이드 > Platform > 개요 > 개인정보 보호 페이지를 참조하십시오.
    MaxAdapterParameters.isDoNotSell()
    다중 주(multi-state) 타겟팅 광고 동의 플래그용. AppLovin은 사용자가 이 플래그가 적용되는 지역에 속해 있는지 여부를 나타내는 API를 제공하지 않습니다.

    iOS

    ALMediationAdapter 클래스의 서브클래스를 구현합니다. 이 서브클래스는 커스텀 mediation adapter와 AppLovin MAX SDK 간의 인터페이스를 활성화합니다. 해당 인터페이스는 초기화, 버전 관리, 리소스 정리 등 귀사 SDK의 기능을 처리합니다.

    1. 프로젝트에 ALMediationAdapter를 상속받는 .m.h 파일을 생성합니다. 이 클래스의 이름에는 네트워크 이름이 포함되어야 합니다 (예: MyNetworkMediationAdapter).
    2. - (void)initializeWithParameters:(id<MAAdapterInitializationParameters>)parameters completionHandler:(void (^)(MAAdapterInitializationStatus, NSString *_Nullable))completionHandler 메서드를 구현합니다. 광고 네트워크 SDK를 초기화하는 코드를 구현합니다. UI에서 설정된 앱 ID는 parameters.serverParameters[@"app_id"]에서 가져올 수 있습니다. 이 로직은 AppLovin SDK 초기화와 병렬로 실행됩니다. 광고 네트워크를 초기화한 후 completionHandler를 호출하고, 해당 핸들러에 다음 값 중 하나를 전달합니다.
      • 광고 네트워크 SDK가 초기화되는 동안: MAAdapterInitializationStatusInitializing
      • 광고 네트워크 SDK가 성공적으로 초기화된 경우: MAAdapterInitializationStatusInitializedSuccess
      • 광고 네트워크 SDK 초기화에 실패한 경우: MAAdapterInitializationStatusInitializedFailure (관련 에러 메시지 포함)
      • 광고 네트워크 SDK에 초기화 콜백 상태가 없는 경우: MAAdapterInitializationStatusDoesNotApply (에러 메시지로 null 전달)
      • 광고 네트워크가 명시적으로 초기화되었으나 상태가 없는 경우: MAAdapterInitializationStatusInitializedUnknown
    3. - (NSString *)SDKVersion 메서드를 구현합니다. 해당 메서드에서 네트워크 SDK 버전 문자열을 반환하는 코드를 구현합니다.
    4. - (NSString *)adapterVersion 메서드를 구현합니다. 해당 메서드에서 mediation adapter의 버전 번호를 반환하는 코드를 구현합니다. 모든 AppLovin adapter는 5자리 버전 관리 체계를 사용합니다. 가장 왼쪽의 4개 숫자는 네트워크 SDK 버전에 대응합니다. 마지막 숫자는 마이너 버전 번호로, adapter 릴리스를 나타냅니다.
    5. - (void)destroy 메서드를 구현합니다. 해당 메서드에서 네트워크 SDK 객체에 대한 정리 로직을 구현합니다.

    Banner ads

    1. MyNetworkMediationAdapter 클래스에 MAAdViewAdapter 프로토콜을 구현합니다.
    2. 광고를 요청하는 - (void)loadAdViewAdForParameters:(id<MAAdapterResponseParameters>)parameters adFormat:(MAAdFormat *)adFormat andNotify:(id<MAAdViewAdapterDelegate>)delegate 메서드를 구현합니다. 광고 로직에 필요한 Placement ID를 가져오려면 parameters.thirdPartyAdPlacementIdentifier 메서드를 호출합니다.
    3. 적절한 MAAdViewAdapterDelegate 메서드를 호출합니다. 이 메서드들은 AppLovin MAX SDK에 banner 수명 주기 이벤트를 알립니다.
      • 광고가 로드되면 -[MAAdViewAdapterDelegate didLoadAdForAdView]를 호출합니다.
      • 광고 로드에 실패하면 적절한 MAAdapterError와 함께 -[MAAdViewAdapterDelegate didFailToLoadAdViewAdWithError:]를 호출합니다.
      • 필요에 따라 다음 banner 수명 주기 이벤트 알림을 적절히 호출할 수 있습니다: didClickAdViewAd, didCollapseAdViewAd, didDisplayAdViewAd, didExpandAdViewAd, didFailToDisplayAdViewAdWithError, didHideAdViewAd.

    Interstitials

    1. MyNetworkMediationAdapter 클래스에 MAInterstitialAdapter 프로토콜을 구현합니다.
    2. 광고를 요청하는 - (void)loadInterstitialAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MAInterstitialAdapterDelegate>)delegate 메서드를 선언합니다. 광고 로직에 필요한 placement ID를 가져오려면 parameters.thirdPartyAdPlacementIdentifier 메서드를 호출합니다.
    3. 로드된 광고을 보여주는 - (void)showInterstitialAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MAInterstitialAdapterDelegate>)delegate 메서드를 선언합니다. 광고 로직에 필요한 placement ID를 가져오려면 parameters.thirdPartyAdPlacementIdentifier 메서드를 호출합니다. 광고가 준비되지 않은 경우 -[MAInterstitialAdapterDelegate didFailToDisplayInterstitialAdWithError: MAAdapterError.adNotReady]를 호출합니다.
    4. 적절한 MAInterstitialAdapterDelegate 메서드를 호출합니다. 이 메서드들은 AppLovin MAX SDK에 interstitial 수명 주기 이벤트를 알립니다.
      • 광고가 로드되면 -[MAInterstitialAdapterDelegate didLoadInterstitialAd:]를 호출합니다.
      • 광고 로드에 실패하면 적절한 MAAdapterError와 함께 -[MAInterstitialAdapterDelegate didFailToLoadInterstitialAdWithError:]를 호출합니다.
      • 광고가 표시되면 -[MAInterstitialAdapterDelegate didDisplayInterstitialAd]를 호출합니다.
      • 광고가 닫히면 -[MAInterstitialAdapterDelegate didHideInterstitialAd:]를 호출합니다.
      • 필요에 따라 다음 interstitial 수명 주기 이벤트 알림을 적절히 호출할 수 있습니다: didClickInterstitialAd, didFailToDisplayInterstitialAdWithError.

    Rewarded ads

    1. MyNetworkMediationAdapter 클래스에 MARewardedAdapter 프로토콜을 구현합니다.
    2. 광고를 요청하는 - (void)loadRewardedAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MARewardedAdapterDelegate>)delegate; 메서드를 선언합니다. 광고 로직에 필요한 placement ID를 가져오려면 parameters.thirdPartyAdPlacementIdentifier 메서드를 호출합니다.
    3. 로드된 광고를 보여주는 - (void)showRewardedAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MARewardedAdapterDelegate>)delegate; 메서드를 선언합니다. 광고 로직에 필요한 placement ID를 가져오려면 parameters.thirdPartyAdPlacementIdentifier 메서드를 호출합니다. 광고가 준비되지 않은 경우 -[MARewardedAdapterDelegate didFailToDisplayRewardedAdWithError: MAAdapterError.adNotReady]를 호출합니다.
    4. 적절한 MARewardedAdapterDelegate 메서드를 호출합니다. 이 메서드들은 AppLovin MAX SDK에 rewarded 비디오 수명 주기 이벤트를 알립니다.
      • 광고가 로드되면 -[MARewardedAdapterDelegate didLoadRewardedAd:]를 호출합니다.
      • 광고 로드에 실패하면 적절한 MAAdapterError와 함께 -[MARewardedAdapterDelegate didFailToLoadRewardedAdWithError:]를 호출합니다.
      • 광고 재생이 시작되면 -[MARewardedAdapterDelegate didDisplayRewardedAd:]를 호출합니다.
      • 사용자에게 보상을 제공해야 하는 경우, 적절한 MAReward 수량 및 통화와 함께 -[MARewardedAdapterDelegate didRewardUserWithReward:]를 호출합니다. 수량을 사용할 수 없는 경우 기본값인 MAReward.defaultAmount를 사용합니다. AppLovin은 -[MARewardedAdapterDelegate didHideRewardedAd:]를 호출하기 직전에 이 메서드를 호출할 것을 권장합니다.
      • 광고가 닫히면 -[MARewardedAdapterDelegate didHideRewardedAd:]를 호출합니다.
      • 필요에 따라 다음 rewarded 비디오 수명 주기 이벤트 알림을 적절히 호출할 수 있습니다: didClickRewardedAd.

    Native ads

    1. MyNetworkMediationAdapter 클래스에 MANativeAdAdapter 프로토콜을 구현합니다.
    2. 광고를 요청하는 - (void)loadNativeAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MANativeAdAdapterDelegate>)delegate; 메서드를 구현합니다.
    3. 적절한 MANativeAdAdapterDelegate 메서드를 호출합니다. 이 메서드들은 AppLovin MAX SDK에 native 광고 수명 주기 이벤트를 알립니다.
      • 광고가 로드되면 -[MANativeAdAdapterDelegate didLoadAdForNativeAd:]를 호출합니다.
      • 광고 로드에 실패하면 적절한 MAAdapterError와 함께 -[MANativeAdAdapterDelegate didFailToLoadNativeAdWithError:]를 호출합니다.
      • 광고가 표시되면 -[MANativeAdAdapterDelegate didDisplayNativeAdWithExtraInfo:]를 호출합니다.
      • 사용자가 광고를 클릭하면 -[MANativeAdAdapterDelegate didClickNativeAd:]를 호출합니다.

    Privacy

    MAX는 사용자가 개인정보 보호 동의를 제공하는지 여부를 나타내는 두 개의 boolean 플래그를 제공합니다. 이들은 NSNumber 객체입니다. 사용자가 동의 또는 비동의 중 어느 것도 표시하지 않은 경우 이들의 값은 nil입니다. MAX는 각 메서드에 parameters 객체를 전달합니다. 개인정보 보호 플래그의 값을 가져오려면 parameters 객체의 다음 API를 사용합니다.

    -[MAAdapterParameters hasUserConsent]
    GDPR 동의 플래그용. 사용자에게 GDPR이 적용되는지 여부를 확인하려면 이 문서의 SDK 연동 가이드 > Platform > 개요 > 개인정보 보호 페이지를 참조하십시오.
    -[MAAdapterParameters isDoNotSell]
    다중 주(multi-state) 타겟팅 광고 동의 플래그용. AppLovin은 사용자가 이 플래그가 적용되는 지역에 속해 있는지 여부를 나타내는 API를 제공하지 않습니다.

테스트

Max 데모 앱을 사용하여 커스텀 adapter를 테스트할 수 있습니다 (SDK 연동 가이드 > Platform > 네트워크 테스트 참조). 광고 요청을 받으려면 워터폴에서 해당 placement의 CPM을 높이십시오.

문제 해결

커스텀 adapter가 예상대로 워터폴에 나타나지 않는 경우, 다음 문제 해결 체크리스트를 사용하십시오.

  1. 테스트 모드를 비활성화합니다 (SDK 연동 가이드 > Platform > 네트워크 테스트 > 테스트 모드 참조).
  2. 앱 패키지 이름, 광고 단위(ad unit) 및 SDK 키가 모두 일치하는지 확인합니다.
  3. 실제 기기로 테스트합니다.
  4. 커스텀 네트워크의 CPM을 워터폴에서 낙찰받을 수 있을 만큼 충분히 높게 설정합니다.

search