ベストプラクティス - glossom-dev/AdfurikunSDK-iOS GitHub Wiki

広告読み込みタイミングについて

ネットワーク使用量、広告の効率、読み込みと再生タイミングのアプリケーションの実装内容など、様々なケースを顧慮して3つの広告読み込み方法を選んで実装する必要があります。

広告読み込み方法 実装内容 動作内容  メリット  デメリット  実装ケース
手動モード ADFmyMovieReward.load() ・load()関数が呼ばれると各アドネットワークへのRequestが順番で発生する・1回の再生完了後、再度再生するためには毎回load()関数を呼び出す必要がある ・広告が必要なタイミングでRequestが発生する・必要な分だけネットワークを使用する・上位アドネットワークからRequestが発生するため広告効率が高い ・広告再生が間に合わないケースがある  ・広告読み込み開始と再生までの時間がかかる場合・画面に遷移したタイミングで読み込みを行って、ユーザが時間を置いて再生するケース
Timeoutを設定した手動モード ADFmyMovieReward.loadWithTimeout() ・手動モードと同じ動作を行う・load()関数の結果が必ずTimeout時間内で発生する  ・ネットワーク使用面で優秀・適切なTimeoutを設定することで広告再生が間に合わないのが発生しない  ・Timeoutが短すぎると広告準備が間に合わないケースがある・上位アドネットワークに在庫があっても下位アドネットワークが再生されるケースもある ・ユーザにポップアップを表示してボタンを押したタイミングから読み込みが発生するケース

広告読み込みの結果CallbackのTimeoutについて

広告枠情報に設定されている時間情報をベースとして各アドネットワークへのRequestが発生します。それによって、読み込みの結果Callback(AdsFetchCompleted, AdsFetchFailed)は在庫の状況・設定されているアドネットワークの数などの影響で時間がかかる場合があります。

もし、アプリケーションの動作として、何秒以内に必ず広告の読み込み結果を確認してユーザへの通知を行う場合にはloadWithTimeout:(int)timeout関数を使ってロードを行なってください。 アプリの方で設定したTimeout以内で必ずCallbackが発生します。設定可能な範囲は1秒から60秒までになります。

アドフリくんのロードはアドネットワークへのRequestを最大限抑えることでネットワーク使用量及び広告の効率を考慮したモードです。上記の関数でTimeoutを指定すると各アドネットワークへのRequestが仕様より速く発生する為効率が悪くなる恐れがあります。なお、設定したTimeoutが短すぎると広告取得途中で読み込み失敗だと判断される可能性があります。ですので、AdsFetchFailed Callbackが発生した場合でも再度Loadを行うことで広告在庫取得が成功することもあります。

速く広告を取得する方法

アドフリくん初期化タイミングを速くする

アプリを起動してからすぐに広告を表示したい場合は、初期化および広告読み込み開始をAppDelegate.mのapplication:didFinishLaunchingWithOptions:関数など、アプリ起動してすぐに行う事で広告の準備を早くすることができます。

ロード関数のTimeoutを調整する

上記の説明にもあるように、ロードのTimeoutをアプリケーションの状況に合わせて調整します。

アドフリくんサーバーとの通信を省略する

以下コードをアドフリくん初期化前に行う事で、アドフリくんの枠情報を保存して次回以降の広告の取得が早くなります。このコードを使っている間はアドフリくん配信設定を変更しても反映されないので注意してください。

[ADFMovieOptions enableStartupCache];

Silent Update Notificationによりアプリが起動したときについて

Silent Update Notificationによりアプリケーションがバックグラウンドでデータ更新などを行うケースがあります。 その場合にはアプリケーションが一気に起動されるため、アドフリくんSDKの初期化も集中される恐れがあります。 それを回避するため、didFinishLaunchingWithOptions関数のパラメーターを確認してSilent Update Notificationによる起動以外でアドフリくん初期化を実施してください。

- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // ...(略)...
    NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (userInfo == nil) {
    	[ADFmyMovieReward initializeWithAppId:APP_ID];
    }
    return YES;
}