# AdLoader API マイグレーションガイド

# 概要

本ガイドではiOS FiveSDK v3.0.0以降で標準となるAdLoader APIへの移行方法について説明します。

AdLoader APIはSDKの初期化と広告のロードに利用するAPIをまとめたものとなっています。 従来のSDK初期化と広告のロードのAPIは非推奨となるため、修正対応が必要となります。

本稿では、この修正対応の方法について解説します。

※iOSサンプルアプリ:サンプルアプリによる動作確認
AdLoaderAPIを用いた実装例としてご活用ください。ページ内リンクからダウンロード可能です。
サンプルアプリ配布ページには常に最新版SDKに対応したサンプルが掲載されます。

# SDKの初期化

従来はFADSettingsFADConfigを登録することでSDK初期化を行なっていました。

AdLoader APIでは、FADConfigに対応するFADAdLoaderを取得することでSDK初期化が実行されます。

この初期化がエラーとなるのはSDKが利用するストレージ領域の確保に失敗したときなどのごく稀な場合だけであり、通信失敗等の理由ではエラーとなりません。 エラーとなった場合は再呼び出しで成功する見込みはほとんどないため、リトライ処理は不要です。

こうして取得したFADAdLoaderのインスタンスは、アプリ内でアクセスしやすいフィールドに保持しておくことをお勧めします。 例えば、最も簡単なのはAppDelegateに保持しておく方法です。

こうしておくと、アプリケーションのさまざまな場所から簡単に利用できます。

TIP

FADAdLoaderのインスタンスはSDK内部でキャッシュされており、FADAdLoader取得処理は同一の設定に対しては同じインスタンスを返します。 これを利用すればFADAdLoaderを明示的に保持せずにAdLoader APIを利用するコードを記述できます。 ただし、スレッドセーフを保証するためのコストがかかるため、基本的には一度取得したFADAdLoaderのインスタンスはそのまま保持しておくことをお勧めしています。

# 広告のロード処理

従来の広告のロード処理は、以下のような手順でした。

  1. 広告オブジェクトを作成する
  2. FADLoadDelegateを登録する
  3. loadAdAsyncを呼ぶ
  4. fiveAdDidLoadでロード成功通知を受け取る

AdLoader APIでは、次のような手順で広告ロードを行います。

  1. FADAdSlotConfigを作成する
  2. FADAdLoaderのロード関数を呼ぶ
  3. ロード関数に渡したコールバックでロード済みの広告オブジェクトを受け取る

フォーマットごとのFADAdLoaderのロード関数は以下の通りです。

広告フォーマット ロード関数(Swift) ロード関数(Objective-C)
カスタムレイアウト loadBannerAd(with:withInitialWidth:withLoadCallback:) loadBannerAdWithConfig:withInitialWidth:withLoadCallback:
動画リワード loadRewardAd(with:withLoadCallback:) loadRewardAdWithConfig:withLoadCallback:
インタースティシャル loadInterstitialAd(with:withLoadCallback:) loadInterstitialAdWithConfig:withLoadCallback:
ネイティブ loadNativeAd(with:withInitialWidth:withLoadCallback:) loadNativeAdWithConfig:withInitialWidth:withLoadCallback:

以下では、カスタムレイアウト広告のロード処理の実装を具体的に修正する方法を解説します。 広告フォーマットが変わってもロード関数が異なるのみで修正方法は同じなので、これを参考にして修正をお願いします。

# 具体例 (カスタムレイアウト広告)

以下のコードは従来手法によるカスタムレイアウト広告のロード処理の具体例です。

このコードをAdLoader APIを利用した形式に書きかえます。 ここでは、FADAdLoaderのインスタンスはAppDelegateに保存する形式をとっているものとします。

まず、広告オブジェクトFADAdViewCustomLayoutの代わりにFADAdSlotConfigを作成します。 以下のようになります。

次に、FADAdLoaderのインスタンスを利用してロード関数を呼び出します。

FADLoadDelegateはなくなり、代わりにコールバック関数を与える方式になっています。 したがって、既存のFADLoadDelegateの実装の代わりに、ここの「広告ロード成功時の処理」や「広告ロード失敗時の処理」の部分を埋める必要があります。 ただし従来方法とは異なり、self.adCustomLayoutではなくコールバックで返された広告オブジェクトを使う必要があります。

一旦、「広告ロード成功時の処理」と「広告ロード失敗時の処理」の部分をメソッド呼び出しにしておきましょう。

TIP

ロードコールバックは必ず1度だけ呼び出され、成功した場合は ad が、失敗した場合は error が入るようになっています。 したがって、errornilであれば必ずadに値が入っています。

このガイドでは簡単のためにコールバック中でも強参照を利用していますが、弱参照を利用することで安全性をさらに高めることも可能です。 なお、ロードコールバックは必ず1度だけ呼び出され、その後解放される仕組みであるため、強参照を利用した場合でもメモリリークが起きる懸念はありません。

成功と失敗のそれぞれのメソッドを実装します。 self.adCustomLayoutに広告オブジェクトを保存しておらず、一度使ったものが再利用されている可能性を考える必要がないため、removeFromSuperviewなどの処理は省略できます。

これでAdLoader APIへの移行は完了です。 なお、setEventListenerでイベントリスナを登録している場合、その部分のコードはそのまま利用可能です。

完成したコードは以下のようになります。