インタースティシャル広告をiOSアプリに追加する

Audience Networkを利用すると、iOS用アプリにFacebook広告を掲載して収益を生み出すことができます。インタースティシャル広告は、アプリ内に表示できるフルスクリーン広告です。この種類の広告ユニットを表示する場合は、このガイドの指示に従ってください。違う種類の広告ユニットに興味がある場合は、使用できる種類の一覧をご覧ください。

次のインタースティシャル広告配置を実装してみましょう。



ステップ1: インタースティシャル広告ビューを読み込んで表示する

ステップ2: インプレッションとクリックのログ記録を確認する

ステップ3: 広告が表示されない場合のデバッグ方法

ステップ4: 広告の連携をテストする

ステップ1: インタースティシャル広告ビューを読み込んで表示する

続行する前に、必ずAudience Networkのスタートガイドのスタートガイドすべてに目を通しておいてください。

  1. iOSスタートガイドに従って新しいプロジェクトを作成したら、FBAudienceNetworkをインポートし、ViewControllerFBInterstitialAdDelegateプロトコルを実装していることを宣言し、インタースティシャル広告ユニットのインスタンス変数を追加します。
    import UIKit
    import FBAudienceNetwork
    
    class ViewController: UIViewController, FBInterstitialAdDelegate {
      private var interstitialAd: FBInterstitialAd?
    }
    #import <UIKit/UIKit.h>
    @import FBAudienceNetwork;
    
    @interface ViewController : UIViewController <FBInterstitialAdDelegate>
    @property (nonatomic, strong) FBInterstitialAd *interstitialAd;
    @end

  2. 次に、ビューコントローラーのviewDidLoadメソッドで広告オブジェクトを初期化し、interstitialAdDidLoadを実装します。
    override func viewDidLoad() {
      super.viewDidLoad()
    
      // Instantiate an InterstitialAd object.
      // NOTE: the placement ID will eventually identify this as your app. You can ignore it while you are testing
      // and replace it later when you have signed up.
      // While you are using this temporary code you will only get test ads and if you release
      // your code like this to the App Store your users will not receive ads (you will get a 'No Fill' error).
      let interstitialAd = FBInterstitialAd(placementID: "YOUR_PLACEMENT_ID")
      interstitialAd.delegate = self
    
      // For auto play video ads, it's recommended to load the ad at least 30 seconds before it is shown
      interstitialAd.load()
      
      self.interstitialAd = interstitialAd
    }
    
    func interstitialAdDidLoad(_ interstitialAd: FBInterstitialAd) {
      guard interstitialAd.isAdValid else {
        return
      }
      print("Ad is loaded and ready to be displayed")
      interstitialAd.show(fromRootViewController: self)
    }
    - (void)viewDidLoad 
    {
      [super viewDidLoad];
    
      // Instantiate an InterstitialAd object. 
      // NOTE: the placement ID will eventually identify this as your app. You can ignore it while you are testing 
      // and replace it later when you have signed up.
      // While you are using this temporary code you will only get test ads and if you release
      // your code like this to the App Store your users will not receive ads (you will get a 'No Fill' error).
      self.interstitialAd = [[FBInterstitialAd alloc] initWithPlacementID:@"YOUR_PLACEMENT_ID"];
    
      self.interstitialAd.delegate = self;
    
      // For auto play video ads, it's recommended to load the ad at least 30 seconds before it is shown
      [self.interstitialAd loadAd];
    }
    
    - (void)interstitialAdDidLoad:(FBInterstitialAd *)interstitialAd
    {
      NSLog(@"Ad is loaded and ready to be displayed");
    
      if (interstitialAd && interstitialAd.isAdValid) {
        // You can now display the full screen ad using this code:
        [interstitialAd showAdFromRootViewController:self];
      }
    }

  3. YOUR_PLACEMENT_IDで表示されるIDは、テスト専用の一時的なIDです。

    この一時的なIDを実際のコードで使用しても、ユーザーは広告を受け取りません(No Fillエラーを受け取ります)。テスト後にここに戻って、一時的なIDを実際の配置IDに置き換えてください。

    実際の配置IDの生成方法については、Audience Network設定をご覧ください

    ビルドターゲットにデバイスを選択し、上記のコードを実行すると、次のように表示されます。

シミュレーターで広告を実行するときには、設定をテストモードに変更しないとテスト広告が表示されません。詳しくは、テストモードの使用方法に関するページをご覧ください。

広告が画面に表示されている間は、FBInterstitialAdでloadAdを呼び出さないでください。将来使用するために別のFBInterstitialAdを読み込む必要がある場合は、ユーザーが現在のものを閉じた後に、例えばinterstitialAdDidCloseコールバックなどで読み込むことができます。

ステップ2: インプレッションとクリックのログ記録を確認する

また、必要に応じて以下の関数を追加し、ユーザーが広告を表示した場合、クリックした場合、閉じた場合に処理を実行することができます

func interstitialAdWillLogImpression(_ interstitialAd: FBInterstitialAd) {
  print("The user sees the ad")
  // Use this function as indication for a user's impression on the ad.
}

func interstitialAdDidClick(_ interstitialAd: FBInterstitialAd) {
  print("The user clicked on the ad and will be taken to its destination")
  // Use this function as indication for a user's click on the ad.
}

func interstitialAdWillClose(_ interstitialAd: FBInterstitialAd) {
  print("The user clicked on the close button, the ad is just about to close")
  // Consider to add code here to resume your app's flow
}

func interstitialAdDidClose(_ interstitialAd: FBInterstitialAd) {
  print("The user clicked on the close button, the ad is just about to close")
  // Consider to add code here to resume your app's flow
}
- (void)interstitialAdWillLogImpression:(FBInterstitialAd *)interstitialAd 
{
  NSLog(@"The user sees the ad");
  // Use this function as indication for a user's impression on the ad.
}

- (void)interstitialAdDidClick:(FBInterstitialAd *)interstitialAd
{
  NSLog(@"The user clicked on the ad and will be taken to its destination");
  // Use this function as indication for a user's click on the ad.
}

- (void)interstitialAdWillClose:(FBInterstitialAd *)interstitialAd
{
  NSLog(@"The user clicked on the close button, the ad is just about to close");
  // Consider to add code here to resume your app's flow
}

- (void)interstitialAdDidClose:(FBInterstitialAd *)interstitialAd
{
  NSLog(@"Interstitial had been closed");
  // Consider to add code here to resume your app's flow
}

ステップ3: 広告が表示されない場合のデバッグ

ビューコントローラーの実装ファイルに、広告の読み込み失敗を処理するための以下の関数を追加し実装します。

func interstitialAd(_ interstitialAd: FBInterstitialAd, didFailWithError error: Error) {
  print("Interstitial ad failed to load with error: \(error.localizedDescription)")
}
- (void)interstitialAd:(FBInterstitialAd *)interstitialAd didFailWithError:(NSError *)error
{
  NSLog(@"Interstitial ad failed to load with error: %@", error);
}

表示する広告がない場合は、error.code1001に設定されてinterstitialAd:didFailWithError:が呼び出されます。独自のカスタムレポートレイヤーやメディエーションレイヤーを使用する場合は、必要に応じてコードの値を確認して、表示する広告がない状況を検出できます。表示する広告がない場合、別のアドネットワークをフォールバックとして使用できますが、直後に広告のリクエストを再送信しないようにしてください。

次のステップ

  • ネイティブ広告の使い方を示すコードサンプルを読み、研究してください。SDKの一部として提供されるNativeAdSampleは、FBAudienceNetwork/samplesフォルダにあります。プロジェクトをXcodeで開き、デバイス上またはシミュレータ上で実行してください。