アドバンス設定
広告プレースメント
各広告ユニットにプレースメント名を設定することができます(例:「Rewarded VideoLevels」、「INTER_levelEnd」、「RewardedVideoCoinStore」など)。 これにより、異なるプレースメントカテゴリーの統計を集計することができます。 以下のスニペットは、さまざまな広告フォーマットのプレースメント名を設定する方法を示しています。
バナー / MREC
adView.placement = @"«placement»";[adView loadAd];
adView.placement = "«placement»"adView.loadAd()
インタースティシャル広告
[interstitialAd showAdForPlacement: @"«placement»"];
interstitial.show(forPlacement: "«placement»")
リワード広告
[rewardedAd showAdForPlacement: @"«placement»"];
rewardedAd.show(forPlacement: "«placement»")
ネイティブ広告
nativeAdLoader.placement = @"«placement»";
nativeAdLoader.placement = "«placement»"
ネイティブ広告(Ad Placer)
MAAdPlacerSettings *settings = [MAAdPlacerSettings settingsWithAdUnitIdentifier: @"«ad-unit-ID»"];settings.placement = @"«placement»";
let settings = MAAdPlacerSettings(adUnitIdentifier: "«ad-unit-ID»")settings.placement = "«placement»"
音声をミュート
アプリを起動する際に、一部のメディエーションSDKネットワークの音声をミュートすることができます。 AppLovin SDKをとおしてこの機能をサポートしているネットワークは、Google Bidding、 Google AdMob 、AppLovin、DT Exchange、 Google アド マネージャー、LINE、Mintegral、Tencent、Verveです。 他のネットワークについては、この機能が利用可能かどうか、またそのアクセス方法について、ネットワークのアカウントチームにお問い合わせください。
以下のコードスニペットは、この機能をサポートするネットワークで音声をミュートする方法を示しています。
ALSdk *sdk = [ALSdk shared];sdk.settings.muted = YES; // to mutesdk.settings.muted = NO; // to unmute
let sdk = ALSdk.shared()sdk.settings.isMuted = true /// to mutesdk.settings.isMuted = false /// to unmute
Verboseログを有効化
詳細ログを有効にする方法は2つあります。
プログラムで
SDKの設定オブジェクト内でフラグ isVerboseLoggingEnabled
を YES
に設定することで、詳細ログを有効にできます。
[ALSdk shared].settings.verboseLoggingEnabled = YES;
ALSdk.shared().settings.isVerboseLoggingEnabled = true
Info.plist
アプリケーションの Info.plist
で AppLovinVerboseLoggingOn
を YES
に設定することでも、詳細ログを有効にできます。
検証
Verboseログを正常に有効化したことを確認するには、AppLovin SDKのログの初期化セクションに、Verbose Logging On: true
と表示される行を確認してください。
AppLovin SDKVersion: 11.4.2⋮Verbose Logging On: true⋮
AppLovin SDKは、そのログに「/AppLovinSdk: [AppLovinSdk]
」というタグを付けます。
クリエイティブIDとネットワーク名
さまざまなメディエーションネットワークから表示された広告のクリエイティブIDとネットワーク名を取得できます。 詳細については、the Creative Debugger documentation を参照してください。
DSP名
AppLovin Exchangeから配信されるMAX広告のDSP名を、次のようなコードで取得することができます。
- (void)didLoadAd:(MAAd *)ad{ NSLog(@"AppLovin Exchange DSP name: %@", ad.DSPName);}
func didLoad(_ ad: MAAd){ print("AppLovin Exchange DSP name: (ad.dspName?)")}
インプレッションレベルのユーザー収益API
SDKバージョン10.3.0より、クライアント側のインプレッションレベルのユーザー収益データにアクセスすることが可能です。 このデータを使用して、異なるソースやキャンペーンを比較できます。 また、MAX ユーザー収益APIを使ってこのデータにアクセスすることもできます。 このデータにアクセスしたいMMPは、MMP向けのインプレッションレベルのユーザー収益APIのページをご参照ください。
サポートされているすべてのネットワークに対して、Adjust などのモバイル計測パートナーとインプレッションレベルの広告収益データを共有できます。
すべての広告ライフサイクルコールバックで、収益額を取得できます。 以下の例は、「ad revenue paid」コールバックでこれを行う方法を示しています。
- (void)didPayRevenueForAd:(MAAd *)ad{ double revenue = ad.revenue; // In USD
// Miscellaneous data NSString *countryCode = [ALSdk shared].configuration.countryCode; // "US" for the United States, etc - Note: Do not confuse this with currency code which is "USD" NSString *networkName = ad.networkName; // Display name of the network that showed the ad NSString *adUnitId = ad.adUnitIdentifier; // The MAX Ad Unit ID MAAdFormat *adFormat = ad.format; // The ad format of the ad (e.g. BANNER, MREC, INTERSTITIAL, REWARDED) NSString *placement = ad.placement; // The placement this ad's postbacks are tied to NSString *networkPlacement = ad.networkPlacement; // The placement ID from the network that showed the ad}
func didPayRevenue(_ ad: MAAd){ let revenue = ad.revenue // In USD
// Miscellaneous data let countryCode = ALSdk.shared().configuration.countryCode // "US" for the United States, etc - Note: Do not confuse this with currency code which is "USD" let networkName = ad.networkName // Display name of the network that showed the ad let adUnitId = ad.adUnitIdentifier // The MAX Ad Unit ID let adFormat = ad.format // The ad format of the ad (e.g. BANNER, MREC, INTERSTITIAL, REWARDED) let placement = ad.placement // The placement this ad's postbacks are tied to let networkPlacement = ad.networkPlacement // The placement ID from the network that showed the ad}
以下の例のように、収益値の精度評価を取得することもできます。
NSString *revenuePrecision = ad.revenuePrecision;
let revenuePrecision = ad.revenuePrecision
この精度は、以下のいずれかの値を取ります。
"publisher_defined"
- 収益額はパブリッシャーによって指定された価格です
"exact"
- 収益額はリアルタイムオークションによって算出されます
"estimated"
- 収益額はAuto-CPMまたはFBビディングの推定に基づいています
"undefined"
- 収益額が定義されておらず、推定するのに十分なデータがありません
""
- 収益と精度が有効ではありません(テストモードなど)
広告リクエストコールバックの設定
MAAdRequestDelegate
を設定し、その[didStartAdRequestForAdUnitIdentifier:]
メソッドを実装し、requestDelegate
にデリゲートを設定することで、広告リクエストが行われたのを検知することができます。
以下の例では、そのような「広告リクエストを開始」するためのコールバックの実装方法を示します。
- (void)didStartAdRequestForAdUnitIdentifier:(NSString *)adUnitIdentifier{ // Ad request started here}
func didStartAdRequest(forAdUnitIdentifier adUnitIdentifier: String){ // Ad request started here}
Selective Init
特定の広告ユニットを使用してSDKを初期化することができます。 これを行う場合、SDKは指定した広告ユニット向けに設定されたネットワークのみを初期化します(広告ユニットが指定されていない場合、SDKは現在のセッションにすべての広告ユニットが必要であると仮定します。 その場合、設定されたすべてのネットワークが初期化されます)。 以下の例では、この機能を実装する方法を示しています。
ALSdkSettings *settings = [[ALSdkSettings alloc] init];settings.initializationAdUnitIdentifiers = @[@"«ad-unit-ID-1»", @"«ad-unit-ID-2»"];
ALSdk *sdk = [ALSdk sharedWithSettings: settings];sdk.mediationProvider = @"max";[sdk initializeSdkWithCompletionHandler:^(ALSdkConfiguration *configuration) { ⋮}];
let settings = ALSdkSettings()settings.initializationAdUnitIdentifiers = ["«ad-unit-ID-1»", "«ad-unit-ID-2»"]
let sdk = ALSdk.shared(with: settings)sdk.mediationProvider = "max"sdk.initializeSdk { _ in ⋮}
Waterfall Information API
Waterfall Information APIは、広告の現在のウォーターフォール(ロードされたもの、またはロードに失敗したもの)について通知します。APIは、ウォーターフォール内の各広告のロード状態、待ち時間、資格情報、およびメディエーションネットワーク情報を返します。 ウォーターフォール内の広告がロードに失敗した場合、APIはエラー情報を提供します。
このAPIは、iOS SDKバージョン10.3.7からサポートされています。
AdLoadStateの値
値 | 説明 |
---|---|
0 | Ad Load Not Attempted |
1 | Ad Loaded |
2 | Ad Failed To Load |
例
- Objective-C
- Swift
- アウトプット
- (void)didLoadAd:(MAAd *)ad{ NSLog(@"Waterfall Name: %@ and Test Name: %@", ad.waterfall.name, ad.waterfall.testName); NSLog(@"Waterfall latency was: %f seconds", ad.waterfall.latency);
for (MANetworkResponseInfo *networkResponse in ad.waterfall.networkResponses) { NSLog(@"Network -> %@", networkResponse.mediatedNetwork); NSLog(@"...adLoadState: %ld", (long) networkResponse.adLoadState); NSLog(@"...latency: %f seconds", networkResponse.latency); NSLog(@"...credentials: %@", networkResponse.credentials); if (networkResponse.error) { NSLog(@"...error: %@", networkResponse.error); } }}
- (void)didFailToLoadAdForAdUnitIdentifier:(NSString *)adUnitIdentifier withError:(MAError *)error{ if (!error.waterfall) { return; }
MAAdWaterfallInfo *waterfall = error.waterfall; NSLog(@"Waterfall Name: %@ and Test Name: %@", waterfall.name, waterfall.testName); NSLog(@"Waterfall latency was: %f seconds", waterfall.latency);
for (MANetworkResponseInfo *networkResponse in waterfall.networkResponses) { NSLog(@"Network -> %@", networkResponse.mediatedNetwork); NSLog(@"...latency: %f seconds", networkResponse.latency); NSLog(@"...credentials: %@", networkResponse.credentials); if (networkResponse.error) { NSLog(@"...error: %@", networkResponse.error); } }}
func didLoad(_ ad: MAAd){ print("Waterfall Name: (ad.waterfall.name) and Test Name: (ad.waterfall.testName)") print("Waterfall latency was: (ad.waterfall.latency) seconds")
for networkResponse in ad.waterfall.networkResponses { print("Network -> (networkResponse.mediatedNetwork)") print("...adLoadState: (networkResponse.adLoadState.rawValue)") print("...latency: (networkResponse.latency) seconds") print("...credentials: (networkResponse.credentials)") if let networkError = networkResponse.error { print("...error: (networkError)") } }}
func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError){ guard let waterfall = error.waterfall else { return } print("Waterfall Name: (waterfall.name) and Test Name: (waterfall.testName)") print("Waterfall latency was: (waterfall.latency) seconds")
for networkResponse in waterfall.networkResponses { print("Network -> (networkResponse.mediatedNetwork)") print("...latency: (networkResponse.latency) seconds") print("...credentials: (networkResponse.credentials)") if let networkError = networkResponse.error { print("...error: (networkError)") } }}
Waterfall Name: Default Waterfall and Test Name: ControlWaterfall latency was: 4.1710309982299805 secondsNetwork -> [MAMediatedNetworkInfo: name=Fyber, adapterClassName=ALInneractiveMediationAdapter, adapterVersion=8.1.1.0, sdkVersion=8.1.1]...adLoadState: 2...latency: 0.0057220458984375 seconds...credentials: ["placement_id": 235786, "app_id": 106516]...error: [MAAdapterError: errorCode=-5202, errorMessage="Invalid Configuration", thirdPartySdkErrorCode=495, thirdPartySdkErrorMessage="The operation couldn’t be completed. (There is no 235786 spot ID in current app config error 495.)"]
Network -> [MAMediatedNetworkInfo: name=AdMob, adapterClassName=ALGoogleMediationAdapter, adapterVersion=8.13.0.2, sdkVersion=afma-sdk-i-v8.13.0]...adLoadState: 1...latency: 3.0903170108795166 seconds...credentials: ["app_id": ca-app-pub-3555987499620362~1761536714, "event_id": 7f40fb8a9d64cbf1156909a514e53d8181fcf7a3, "placement_id": ca-app-pub-3555987499620362/1638443478]
Network -> [MAMediatedNetworkInfo: name=ironSource, adapterClassName=ALIronSourceMediationAdapter, adapterVersion=7.1.12.0.0, sdkVersion=7.1.12]...adLoadState: 0...latency: -1.0 seconds...credentials: ["placement_id": 1082713, "app_key": 882393cd]
ウォーターフォールが空の場合、MAError.waterfall
は nil
を返すため、ウォーターフォールモデルのプロパティを確認することはできません。
ただし、空のウォーターフォールであっても requestLatency
を使用して広告のロード遅延を取得することは可能です。
- (void)didLoadAd:(MAAd *)ad{ NSLog(@"Succesful ad load latency: %f seconds", ad.requestLatency);}
- (void)didFailToLoadAdForAdUnitIdentifier:(NSString *)adUnitIdentifier withError:(MAError *)error{ NSLog("Failed ad load latency: %f seconds", error.requestLatency);}
func didLoad(_ ad: MAAd){ print("Successful ad load latency: (ad.requestLatency) seconds")}
func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError){ print("Failed ad load latency: (error.requestLatency) seconds")}
バナー広告 / MREC広告のリフレッシュをカスタマイズ
バナー広告およびMREC広告のリフレッシュ間隔は、Ad Unitの UIで設定できるように、連携ごとに直接カスタマイズすることが可能です。 リフレッシュ間隔の最小値は10秒、最大値は120秒です。 この範囲内に含まれない値は対象外となります。 以下のコードサンプルでは、これらのリフレッシュ間隔をカスタマイズする方法を示しています。
// Where adView is an instance of MAAdView[adView setExtraParameterForKey: @"ad_refresh_seconds" value: «ad-refresh-rate»];
// Where adView is an instance of MAAdViewadView.setExtraParameter("ad_refresh_seconds", «ad-refresh-rate»)
オーディオ設定
インタースティシャルおよびリワードの広告音声がアプリのバックグラウンドオーディオに干渉しないようにするために、AppLovinは広告を表示する前にアプリのバックグラウンドオーディオを停止することを推奨します。 広告を非表示にした後、アプリのバックグラウンドオーディオを再開できます。
- (void)didDisplayAd:(MAAd *)ad{ // Pause your app's background audio}
- (void)didHideAd:(MAAd *)ad{ // Resume your app's background audio}
func didDisplay(_ ad: MAAd){ // Pause your app's background audio}
func didHide(_ ad: MAAd){ // Resume your app's background audio}