AppLovin Max mediation matrix에 나열되지 않은 광고 네트워크를 지원하려는 경우 커스텀 adapter를 작성할 수 있습니다. 다음 안내는 이를 수행하는 방법을 보여줍니다.
com.applovin.mediation.adapters.MediationAdapterBase 클래스의 서브클래스를 구현합니다.
이 서브클래스는 커스텀 mediation adapter와 AppLovin MAX SDK 간의 인터페이스를 활성화합니다.
해당 인터페이스는 초기화, 버전 관리, 리소스 정리 등 귀사 SDK의 기능을 처리합니다.
com.applovin.mediation.adapters 패키지에 MediationAdapterBase 서브클래스를 생성합니다.
이 클래스의 이름에는 네트워크 이름이 포함되어야 합니다 (예: com.mycompanyname.MyNetworkMediationAdapter).initialize(final MaxAdapterInitializationParameters parameters, final Activity activity, final OnCompletionListener onCompletionListener) 메서드를 오버라이드합니다.
광고 네트워크 SDK를 초기화하는 코드를 구현합니다.
UI에서 설정된 앱 ID에 액세스해야 하는 경우, parameters.getServerParameters().getString( "app_id", null );을 통해 액세스할 수 있습니다.
이 로직은 AppLovin SDK 초기화와 병렬로 실행됩니다.
광고 네트워크를 초기화한 후 onCompletionListener.onCompletion()을 호출하고, 해당 완료 핸들러에 다음 값 중 하나를 전달합니다.
InitializationStatus.INITIALIZINGInitializationStatus.INITIALIZED_SUCCESSInitializationStatus.INITIALIZED_FAILURE (관련 에러 메시지 포함)InitializationStatus.DOES_NOT_APPLYInitializationStatus.INITIALIZED_UNKNOWNgetSdkVersion() 메서드를 오버라이드합니다.
해당 메서드에서 네트워크 SDK 버전 문자열을 반환하는 코드를 구현합니다.getAdapterVersion() 메서드를 오버라이드합니다.
해당 메서드에서 mediation adapter의 버전 번호를 반환하는 코드를 구현합니다.
모든 AppLovin adapter는 5자리 버전 관리 체계를 사용합니다.
가장 왼쪽의 4개 숫자는 네트워크 SDK 버전에 대응합니다.
마지막 숫자는 마이너 버전 번호로, adapter 릴리스를 나타냅니다.onDestroy() 메서드를 오버라이드합니다.
해당 메서드에서 네트워크 SDK 객체에 대한 정리 로직을 구현합니다.com.mycompanyname.MyNetworkMediationAdapter 클래스에 MaxAdViewAdapter 인터페이스를 구현합니다.loadAdViewAd() 메서드를 오버라이드합니다.
광고 로직에 필요한 placement ID를 가져오려면 parameters.getThirdPartyAdPlacementId() 메서드를 호출합니다.MaxAdViewAdapterListener 메서드를 호출합니다.
이 메서드들은 AppLovin MAX SDK에 banner 수명 주기 이벤트를 알립니다.
MaxAdViewAdapterListener.onAdViewAdLoaded()를 호출합니다.MaxAdapterError와 함께 MaxAdViewAdapterListener.onAdViewAdLoadFailed()를 호출합니다.onAdViewAdClicked(), onAdViewAdCollapsed(), onAdViewAdDisplayed(), onAdViewAdDisplayFailed(), onAdViewAdExpanded(), onAdViewAdHidden().com.mycompanyname.MyNetworkMediationAdapter 클래스에 MaxInterstitialAdapter 인터페이스를 구현합니다.loadInterstitialAd() 메서드를 오버라이드합니다.
광고 로직에 필요한 placement ID를 가져오려면 parameters.getThirdPartyAdPlacementId() 메서드를 호출합니다.showInterstitialAd() 메서드를 오버라이드합니다.
광고 로직에 필요한 placement ID를 가져오려면 parameters.getThirdPartyAdPlacementId() 메서드를 호출합니다.
광고가 준비되지 않은 경우 MaxInterstitialAdapterListener.onInterstitialAdDisplayFailed( MaxAdapterError.AD_NOT_READY )를 호출합니다.MaxInterstitialAdapterListener 메서드를 호출합니다.
이 메서드들은 AppLovin MAX SDK에 interstitial 수명 주기 이벤트를 알립니다.
MaxInterstitialAdapterListener.onInterstitialAdLoaded()를 호출합니다.MaxAdapterError와 함께 MaxInterstitialAdapterListener.onInterstitialAdLoadFailed()를 호출합니다.MaxInterstitialAdapterListener.onInterstitialAdHidden()을 호출합니다.onInterstitialAdClicked(), onInterstitialAdDisplayFailed().com.mycompanyname.MyNetworkMediationAdapter 클래스에 MaxRewardedAdapter 인터페이스를 구현합니다.loadRewardedAd() 메서드를 오버라이드합니다.
광고 로직에 필요한 placement ID를 가져오려면 parameters.getThirdPartyAdPlacementId() 메서드를 호출합니다.showRewardedAd() 메서드를 오버라이드합니다.
광고 로직에 필요한 placement ID를 가져오려면 parameters.getThirdPartyAdPlacementId() 메서드를 호출합니다.
광고가 준비되지 않은 경우 MaxRewardedAdapterListener.onRewardedAdDisplayFailed( MaxAdapterError.AD_NOT_READY )를 호출합니다.MaxRewardedAdapterListener 메서드를 호출합니다.
이 메서드들은 AppLovin MAX SDK에 rewarded 비디오 수명 주기 이벤트를 알립니다.
MaxRewardedAdapterListener.onRewardedAdLoaded()를 호출합니다.MaxAdapterError와 함께 MaxRewardedAdapterListener.onRewardedAdLoadFailed()를 호출합니다.MaxRewardedAdapterListener.onRewardedAdDisplayed()를 호출합니다.MaxReward 수량 및 통화와 함께 MaxRewardedAdapterListener.onUserRewarded()를 호출합니다.
수량을 사용할 수 없는 경우 기본값인 MaxReward.DEFAULT_AMOUNT를 사용합니다.
AppLovin은 MaxRewardedAdapterListener.onRewardedAdHidden()을 호출하기 직전에 이 메서드를 호출할 것을 권장합니다.MaxRewardedAdapterListener.onRewardedAdHidden()을 호출합니다.onRewardedAdClicked().com.mycompanyname.MyNetworkMediationAdapter 클래스에 MaxNativeAdAdapter 인터페이스를 구현합니다.loadNativeAd() 메서드를 오버라이드합니다.MaxNativeAdAdapterListener 메서드를 호출합니다.
이 메서드들은 AppLovin MAX SDK에 native 광고 수명 주기 이벤트를 알립니다.
MaxNativeAdAdapterListener.onNativeAdLoaded()를 호출합니다.MaxAdapterError와 함께 MaxNativeAdAdapterListener.onNativeAdLoadFailed()를 호출합니다.MaxNativeAdAdapterListener.onNativeAdDisplayed()를 호출합니다.MaxNativeAdAdapterListener.onNativeAdClicked()를 호출합니다.MAX는 사용자가 개인정보 보호 동의를 제공하는지 여부를 나타내는 두 개의 boolean 플래그를 제공합니다.
이들은 Boolean 객체입니다.
사용자가 동의 또는 비동의 중 어느 것도 표시하지 않은 경우 이들의 값은 null입니다.
MAX는 각 메서드에 parameters 객체를 전달합니다.
개인정보 보호 플래그의 값을 가져오려면 parameters 객체의 다음 메서드를 사용합니다.
MaxAdapterParameters.hasUserConsent()MaxAdapterParameters.isDoNotSell()ALMediationAdapter 클래스의 서브클래스를 구현합니다.
이 서브클래스는 커스텀 mediation adapter와 AppLovin MAX SDK 간의 인터페이스를 활성화합니다.
해당 인터페이스는 초기화, 버전 관리, 리소스 정리 등 귀사 SDK의 기능을 처리합니다.
ALMediationAdapter를 상속받는 .m 및 .h 파일을 생성합니다.
이 클래스의 이름에는 네트워크 이름이 포함되어야 합니다 (예: MyNetworkMediationAdapter).- (void)initializeWithParameters:(id<MAAdapterInitializationParameters>)parameters completionHandler:(void (^)(MAAdapterInitializationStatus, NSString *_Nullable))completionHandler 메서드를 구현합니다.
광고 네트워크 SDK를 초기화하는 코드를 구현합니다.
UI에서 설정된 앱 ID는 parameters.serverParameters[@"app_id"]에서 가져올 수 있습니다.
이 로직은 AppLovin SDK 초기화와 병렬로 실행됩니다.
광고 네트워크를 초기화한 후 completionHandler를 호출하고, 해당 핸들러에 다음 값 중 하나를 전달합니다.
MAAdapterInitializationStatusInitializingMAAdapterInitializationStatusInitializedSuccessMAAdapterInitializationStatusInitializedFailure (관련 에러 메시지 포함)MAAdapterInitializationStatusDoesNotApply (에러 메시지로 null 전달)MAAdapterInitializationStatusInitializedUnknown- (NSString *)SDKVersion 메서드를 구현합니다.
해당 메서드에서 네트워크 SDK 버전 문자열을 반환하는 코드를 구현합니다.- (NSString *)adapterVersion 메서드를 구현합니다.
해당 메서드에서 mediation adapter의 버전 번호를 반환하는 코드를 구현합니다.
모든 AppLovin adapter는 5자리 버전 관리 체계를 사용합니다.
가장 왼쪽의 4개 숫자는 네트워크 SDK 버전에 대응합니다.
마지막 숫자는 마이너 버전 번호로, adapter 릴리스를 나타냅니다.- (void)destroy 메서드를 구현합니다.
해당 메서드에서 네트워크 SDK 객체에 대한 정리 로직을 구현합니다.MyNetworkMediationAdapter 클래스에 MAAdViewAdapter 프로토콜을 구현합니다.- (void)loadAdViewAdForParameters:(id<MAAdapterResponseParameters>)parameters adFormat:(MAAdFormat *)adFormat andNotify:(id<MAAdViewAdapterDelegate>)delegate 메서드를 구현합니다.
광고 로직에 필요한 Placement ID를 가져오려면 parameters.thirdPartyAdPlacementIdentifier 메서드를 호출합니다.MAAdViewAdapterDelegate 메서드를 호출합니다.
이 메서드들은 AppLovin MAX SDK에 banner 수명 주기 이벤트를 알립니다.
-[MAAdViewAdapterDelegate didLoadAdForAdView]를 호출합니다.MAAdapterError와 함께 -[MAAdViewAdapterDelegate didFailToLoadAdViewAdWithError:]를 호출합니다.didClickAdViewAd, didCollapseAdViewAd, didDisplayAdViewAd, didExpandAdViewAd, didFailToDisplayAdViewAdWithError, didHideAdViewAd.MyNetworkMediationAdapter 클래스에 MAInterstitialAdapter 프로토콜을 구현합니다.- (void)loadInterstitialAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MAInterstitialAdapterDelegate>)delegate 메서드를 선언합니다.
광고 로직에 필요한 placement ID를 가져오려면 parameters.thirdPartyAdPlacementIdentifier 메서드를 호출합니다.- (void)showInterstitialAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MAInterstitialAdapterDelegate>)delegate 메서드를 선언합니다.
광고 로직에 필요한 placement ID를 가져오려면 parameters.thirdPartyAdPlacementIdentifier 메서드를 호출합니다.
광고가 준비되지 않은 경우 -[MAInterstitialAdapterDelegate didFailToDisplayInterstitialAdWithError: MAAdapterError.adNotReady]를 호출합니다.MAInterstitialAdapterDelegate 메서드를 호출합니다.
이 메서드들은 AppLovin MAX SDK에 interstitial 수명 주기 이벤트를 알립니다.
-[MAInterstitialAdapterDelegate didLoadInterstitialAd:]를 호출합니다.MAAdapterError와 함께 -[MAInterstitialAdapterDelegate didFailToLoadInterstitialAdWithError:]를 호출합니다.-[MAInterstitialAdapterDelegate didDisplayInterstitialAd]를 호출합니다.-[MAInterstitialAdapterDelegate didHideInterstitialAd:]를 호출합니다.didClickInterstitialAd, didFailToDisplayInterstitialAdWithError.MyNetworkMediationAdapter 클래스에 MARewardedAdapter 프로토콜을 구현합니다.- (void)loadRewardedAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MARewardedAdapterDelegate>)delegate; 메서드를 선언합니다.
광고 로직에 필요한 placement ID를 가져오려면 parameters.thirdPartyAdPlacementIdentifier 메서드를 호출합니다.- (void)showRewardedAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MARewardedAdapterDelegate>)delegate; 메서드를 선언합니다.
광고 로직에 필요한 placement ID를 가져오려면 parameters.thirdPartyAdPlacementIdentifier 메서드를 호출합니다.
광고가 준비되지 않은 경우 -[MARewardedAdapterDelegate didFailToDisplayRewardedAdWithError: MAAdapterError.adNotReady]를 호출합니다.MARewardedAdapterDelegate 메서드를 호출합니다.
이 메서드들은 AppLovin MAX SDK에 rewarded 비디오 수명 주기 이벤트를 알립니다.
-[MARewardedAdapterDelegate didLoadRewardedAd:]를 호출합니다.MAAdapterError와 함께 -[MARewardedAdapterDelegate didFailToLoadRewardedAdWithError:]를 호출합니다.-[MARewardedAdapterDelegate didDisplayRewardedAd:]를 호출합니다.MAReward 수량 및 통화와 함께 -[MARewardedAdapterDelegate didRewardUserWithReward:]를 호출합니다.
수량을 사용할 수 없는 경우 기본값인 MAReward.defaultAmount를 사용합니다.
AppLovin은 -[MARewardedAdapterDelegate didHideRewardedAd:]를 호출하기 직전에 이 메서드를 호출할 것을 권장합니다.-[MARewardedAdapterDelegate didHideRewardedAd:]를 호출합니다.didClickRewardedAd.MyNetworkMediationAdapter 클래스에 MANativeAdAdapter 프로토콜을 구현합니다.- (void)loadNativeAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MANativeAdAdapterDelegate>)delegate; 메서드를 구현합니다.MANativeAdAdapterDelegate 메서드를 호출합니다.
이 메서드들은 AppLovin MAX SDK에 native 광고 수명 주기 이벤트를 알립니다.
-[MANativeAdAdapterDelegate didLoadAdForNativeAd:]를 호출합니다.MAAdapterError와 함께 -[MANativeAdAdapterDelegate didFailToLoadNativeAdWithError:]를 호출합니다.-[MANativeAdAdapterDelegate didDisplayNativeAdWithExtraInfo:]를 호출합니다.-[MANativeAdAdapterDelegate didClickNativeAd:]를 호출합니다.MAX는 사용자가 개인정보 보호 동의를 제공하는지 여부를 나타내는 두 개의 boolean 플래그를 제공합니다.
이들은 NSNumber 객체입니다.
사용자가 동의 또는 비동의 중 어느 것도 표시하지 않은 경우 이들의 값은 nil입니다.
MAX는 각 메서드에 parameters 객체를 전달합니다.
개인정보 보호 플래그의 값을 가져오려면 parameters 객체의 다음 API를 사용합니다.
-[MAAdapterParameters hasUserConsent]-[MAAdapterParameters isDoNotSell]Max 데모 앱을 사용하여 커스텀 adapter를 테스트할 수 있습니다 (SDK 연동 가이드 > Platform > 네트워크 테스트 참조). 광고 요청을 받으려면 워터폴에서 해당 placement의 CPM을 높이십시오.
커스텀 adapter가 예상대로 워터폴에 나타나지 않는 경우, 다음 문제 해결 체크리스트를 사용하십시오.