App open ads는 interstitial ads와 유사하지만, 사용자가 앱을 soft launch하거나 cold start할 때 표시됩니다.
Fire OS 애플리케이션은 지원되지 않습니다.
App Open Ad 포맷을 구현할 때는 항상 retention을 고려해야 합니다.
App open ads의 경우 다양한 구현 전략 중에서 선택할 수 있습니다.
AppLovin은 아래에 설명된 기술 중 하나 이상을 사용하여 테스트해 볼 것을 권장합니다. 각 애플리케이션은 retention이나 앱 체류 시간에 영향을 주지 않으면서 수익을 극대화할 수 있는 고유한 구성을 가지고 있습니다. 사용자 행동과 인게이지먼트는 변경될 수 있으므로, AppLovin은 App Open Ads 전략을 자주 재테스트할 것을 권장합니다. App Open Ads를 테스트하기 위해 사용할 수 있는 몇 가지 구현 기술은 다음과 같습니다:
사용자가 애플리케이션을 포그라운드로 가져올 때 app open ad가 준비되어 있도록 하려면, MAAppOpenAd를 프리로드하세요.
광고가 준비되었을 때 광고를 보여주는 메서드를 만드세요.
해당 메서드를 applicationDidBecomeActive: 내부에서 호출하세요.
그러면 앱은 앱이 열릴 때 광고 표시를 시도하거나, 프리로드된 광고가 없는 경우 광고를 로드합니다.
광고를 요청하는 시점과 표시할 광고를 수신하는 시점 사이에는 지연이 존재합니다. 앱을 제대로 설계하지 않으면 사용자가 잠시 앱을 보았다가 갑자기 맥락에 맞지 않는 광고가 나와 당황할 수 있습니다. 이러한 나쁜 사용자 경험을 방지하세요. 앱 콘텐츠가 표시되기 전에 로딩 화면을 보여주고, 로딩 화면이 끝난 후에 광고를 보여주는 방식으로 cold starts를 처리할 수 있습니다. 로딩 화면 이후에 앱 콘텐츠가 이미 표시되었다면 광고를 보여주지 마세요.
App open ad 아래에 로딩 화면이 있고 사용자가 광고를 닫기 전에 해당 로딩 화면이 완료되는 경우, didHide 메서드에서 로딩 화면을 닫을 수 있습니다.
이 코드 예제는 앱이 메모리에 일시 중단된 후 “soft launch”할 때만 app open ads가 표시된다고 가정합니다. 스플래시/로딩 화면은 포함되어 있지 않습니다. 스플래시/로딩 화면은 직접 처리해야 합니다. Best practices를 참조하세요.
@interface AppDelegate()<MAAdDelegate>
@property (nonatomic, strong) MAAppOpenAd *appOpenAd;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[ALSdk shared] initializeSdkWithCompletionHandler:^(ALSdkConfiguration *configuration) {
self.appOpenAd = [[MAAppOpenAd alloc] initWithAdUnitIdentifier: @"«ad-unit-ID»"];
self.appOpenAd.delegate = self;
[self.appOpenAd loadAd];
}]
return YES;
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[self showAdIfReady];
}
- (void)showAdIfReady
{
if ( ![[ALSdk shared] isInitialized] )
{
return;
}
if ( [self.appOpenAd isReady] )
{
[self.appOpenAd showAdForPlacement: @"«test-placement-ID»"];
}
else
{
[self.appOpenAd loadAd];
}
}
- (void)didLoadAd:(MAAd *)ad {}
- (void)didFailToLoadAdForAdUnitIdentifier:(NSString *)adUnitIdentifier withError:(MAError *)error {}
- (void)didDisplayAd:(MAAd *)ad {}
- (void)didClickAd:(MAAd *)ad {}
- (void)didHideAd:(MAAd *)ad
{
[self.appOpenAd loadAd];
}
- (void)didFailToDisplayAd:(MAAd *)ad withError:(MAError *)error
{
[self.appOpenAd loadAd];
}
@end
@UIApplicationMain
class AppDelegate: UIApplicationDelegate
{
private lazy var appOpenAd = MAAppOpenAd(adUnitIdentifier: "«ad-unit-ID»")
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
{
ALSdk.shared().initializeSdk { (configuration: ALSdkConfiguration) in
appOpenAd.delegate = self
appOpenAd.load()
}
return true
}
func applicationDidBecomeActive(_ application: UIApplication)
{
showAdIfReady()
}
private func showAdIfReady()
{
if ALSdk.shared().isInitialized
{
return
}
if appOpenAd.isReady
{
appOpenAd.show(forPlacement: "«test-placement-ID»")
}
else
{
appOpenAd.load()
}
}
}
extension AppDelegate : MAAdDelegate
{
func didLoad(_ ad: MAAd) {}
func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) {}
func didDisplay(_ ad: MAAd) {}
func didClick(_ ad: MAAd) {}
func didHide(_ ad: MAAd)
{
appOpenAd.load()
}
func didFail(toDisplay ad: MAAd, withError error: MAError)
{
appOpenAd.load()
}
}
| Ad network | Minimum adapter version |
|---|---|
| BIGO Ads | 4.2.1.0 |
| Google Bidding and Google AdMob | 10.9.0.1 |
| Liftoff Monetize | 6.12.0.3 |
| Mintegral | 7.2.3.0.1 |
| Pangle | 4.6.2.2.1 |