インタースティシャル - 広告ユニットAPIへの移行 - iOS

このガイドでは、現在の実装から LevelPlay インタースティシャル API(広告ユニット ID を使用)へ移行し、インタースティシャル広告をロード・表示する方法について説明します。

Before you start
  • サポートされる最小SDKは 8.6.0 です。最新の SDK はこちらからダウンロードできます。
  • LevelPlay 初期化 API を使用してSDKを初期化してください。詳細はこちらをご覧ください。
  • AdUnitID は LevelPlay ダッシュボードで確認できます。詳細はこちら

インタースティシャル広告オブジェクトの作成

インタースティシャル広告オブジェクトの作成は、onInitSuccess コールバックを受け取った後に行う必要があります。

オブジェクトはセッション中に複数回のロードや表示に再利用できます。一度作成したら同じ広告ユニットをロード・表示に使用してください。

より高度な実装が必要な場合は、複数のインタースティシャル広告オブジェクトを作成しても構いません。

self.interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId"];
self.interstitialAd = LPMInterstitialAd(adUnitId: "adUnitId")

デリゲートの実装

広告配信の通知を受けるには、LPMInterstitialAdDelegate をコードで実装してください。LevelPlayInterstitialDelegate の代わりに使用します。

  • インタースティシャル広告のロード前にデリゲートを設定することを推奨します。
  • 各インタースティシャル広告それぞれにデリゲート実装が必要です。
  • デリゲートメソッドはメインスレッドで実行されます。
self.interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId"]; 
self.interstitialAd.delegate = self;
#pragma mark - LPMInterstitialAdDelegate Methods
- (void)didLoadAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didFailToLoadAdWithAdUnitId:(NSString *)adUnitId error:(NSError *)error {}
- (void)didChangeAdInfo:(LPMAdInfo *)adInfo {}
- (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo error:(NSError *)error {}
- (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didCloseAdWithAdInfo:(LPMAdInfo *)adInfo {}
self.interstitialAd = LPMInterstitialAd(adUnitId: "adUnitId") 
self.interstitialAd.setDelegate(self)
  
// MARK: LPMInterstitialAdDelegate methods
func didLoadAd(with adInfo: LPMAdInfo) {}
func didFailToLoadAd(withAdUnitId adUnitId: String, error: Error) {}
func didChangeAdInfo(_ adInfo: LPMAdInfo) {}
func didDisplayAd(with adInfo: LPMAdInfo) {}
func didFailToDisplayAd(with adInfo: LPMAdInfo, error: Error) {}
func didClickAd(with adInfo: LPMAdInfo) {}
func didCloseAd(with adInfo: LPMAdInfo) {}
レガシー 広告ユニット(New)
Delegates  LevelPlayInterstitialDelegate LPMInterstitialAdDelegate
Events didLoadWithAdInfo didLoadAdWithAdInfo
didFailToLoadWithError didFailToLoadAdWithAdUnitId
didOpenWithAdInfo didDisplayAdWithAdInfo
didCloseWithAdInfo didCloseAdWithAdInfo
didFailToShowWithError didFailToDisplayAdWithAdInfo
didClickWithAdInfo didClickAdWithAdInfo
didShowWithAdInfo – (deprecated)
didChangeAdInfo

LevelPlay Ad Info

Ad Info インタースティシャルリスナーコールバックから返される ISAdInfo クラスは LPMAdInfo に置き換わりました。

実装や利用可能なフィールドの詳細はこちらをご覧ください。

インタースティシャル広告のロード

インタースティシャル広告をロードするには、loadInterstitial の代わりに loadAd を使用してください。

[self.interstitialAd loadAd];
self.interstitialAd.loadAd()

インタースティシャル広告の表示

didLoadWithAdInfo コールバックを受け取った後、LevelPlayInterstitialDelegate の代わりに LPMInterstitialAdDelegate API を使ってインタースティシャル広告を表示します。showInterstitialWithViewController の代わりに showAdWithViewController を使用します。

  • ViewController を渡す必要があります。
  • プレースメントを利用する場合は、下記の Placements セクションのように showAd API でプレースメント名を渡してください。
  • 広告がユーザーに正常に表示された後は、ロード手順を繰り返して別の広告をロードできます。
- (void)showInterstitialAd {
    // Check that ad is ready
    if ([self.interstitialAd isAdReady]) {
        // Show without placement
        [self.interstitialAd showAdWithViewController:self placementName:NULL];
    }
}
func showInterstitialAd() {
    // Check that ad is ready  
    if self.interstitialAd.isAdReady() {
        // Show without placement
        self.interstitialAd.showAd(viewController: self, placementName: nil)
    }
}

広告のロード状態を確認

表示失敗を防ぎ、広告が正しく表示できるよう、showAd API 呼び出し前に次の API を使うことを推奨します。

isAdReady – 広告が正常にロードされ、広告ユニットがキャップされていなければ true、それ以外は false。

isPlacementCapped – 有効なプレースメントがキャップに達していれば true。無効またはキャップに達していない場合は false。

// Check that ad is ready and that the placement is not capped 
if ([self.interstitialAd isAdReady] && ![LPMInterstitialAd isPlacementCapped:placementName]) {
    [self.interstitialAd showAdWithViewController:self placementName:placementName];
}
// Check that ad is ready and that the placement is not capped 
if self.interstitialAd.isAdReady(),!LPMInterstitialAd.isPlacementCapped(placementName) {
    self.interstitialAd.showAd(viewController: self, placementName: placementName)
}

プレースメント

LevelPlay ダッシュボードでインタースティシャル広告のプレースメントのペーシングとキャッピングがサポートされています。

インタースティシャル広告にプレースメントが設定されている場合は、showAd メソッドで特定のプレースメントで広告を配信してください。

// Check that ad is ready and that the placement is not capped
 if ([self.interstitialAd isAdReady] && ![LPMInterstitialAd isPlacementCapped:placementName]) {
    // Show ad with placement
    [self.interstitialAd showAdWithViewController:self placementName:@"PlacementName"];
}
// Check that ad is ready and that the placement is not capped 
if self.interstitialAd.isAdReady(), !LPMInterstitialAd.isPlacementCapped(placementName) {
    // Show ad with placement
    self.interstitialAd.showAd(viewController: self, placementName: placementName) 
}

マルチ広告ユニット対応インタースティシャル API

レガシー 広告ユニット(New)
API loadInterstitial loadAd
showInterstitialWithViewController showAdWithViewController
hasInterstitial isAdReady
isInterstitialCappedForPlacement isPlacementCapped

インタースティシャル広告のフル実装例

NS_ASSUME_NONNULL_BEGIN
@interface InterstitialAdViewController () <LPMInterstitialAdDelegate>
@property(nonatomic, strong) LPMInterstitialAd *interstitialAd;
@end
@implementation InterstitialAdViewController
- (void)createInterstitialAd {
    self.interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId"];
    self.interstitialAd.delegate = self;
}
- (void)loadInterstitialAd {
    // Used to load or reload the ad
    [self.interstitialAd loadAd];
}
- (void)showInterstitialAd {
    if ([self.interstitialAd isAdReady]) {
        [self.interstitialAd showAdWithViewController:self placementName:NULL];
    }
}
- (void)showInterstitialAdWithPlacementName:(NSString *)placementName {
    // Check that ad is ready and that the placement is not capped 
    if ([self.interstitialAd isAdReady] && ![LPMInterstitialAd isPlacementCapped:placementName]) {
        [self.interstitialAd showAdWithViewController:self placementName:placementName];
    }
}
#pragma mark - LPMInterstitialAdDelegate Methods
- (void)didLoadAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didFailToLoadAdWithAdUnitId:(NSString *)adUnitId error:(NSError *)error {}
- (void)didChangeAdInfo:(LPMAdInfo *)adInfo {}
- (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo error:(NSError *)error {}
- (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}
- (void)didCloseAdWithAdInfo:(LPMAdInfo *)adInfo {}
@end
NS_ASSUME_NONNULL_END
class InterstitialAdViewController: UIViewController, LPMInterstitialAdDelegate {
    var interstitialAd: LPMInterstitialAd!
    
    func createInterstitialAd() {
        self.interstitialAd = LPMInterstitialAd(adUnitId: "adUnitId")
        self.interstitialAd.setDelegate(self)
    }
    
    func loadInterstitialAd() {
        // Used to load or reload the ad
        self.interstitialAd.loadAd()
    }
    
    func showInterstitialAd() {
        if self.interstitialAd.isAdReady() {
            self.interstitialAd.showAd(viewController: self, placementName: nil)
        }
    }
    
    func showInterstitialAd(withPlacementName placementName: String) {
        // Check that ad is ready and that the placement is not capped 
        if self.interstitialAd.isAdReady(), !LPMInterstitialAd.isPlacementCapped(placementName) {
            self.interstitialAd.showAd(viewController: self, placementName: placementName)
        }
    }
    
    // MARK: LPMInterstitialAdDelegate methods
    func didLoadAd(with adInfo: LPMAdInfo) {}
    func didFailToLoadAd(withAdUnitId adUnitId: String, error: Error) {}
    func didChangeAdInfo(_ adInfo: LPMAdInfo) {}
    func didDisplayAd(with adInfo: LPMAdInfo) {}
    func didFailToDisplayAd(with adInfo: LPMAdInfo, error: Error) {}
    func didClickAd(with adInfo: LPMAdInfo) {}
    func didCloseAd(with adInfo: LPMAdInfo) {}
}

LevelPlay Mediation デモアプリ

デモアプリでインタースティシャルの広告ユニット API をアプリに実装する方法を確認できます。

iOS デモアプリ

完了!

これで新しいマルチ広告ユニット API を使って、アプリケーション内でインタースティシャル広告を配信できるようになりました。