インタースティシャル広告
はじまる前に
この実装方法ではアドフリくんSDK 3.3.0から追加されたインタースティシャル広告をベースに説明をしています。
既存の動画インタースティシャル広告とは実装方法は全く同じで、機能を提供するClassが違うだけです。
もし、動画インタースティシャル広告を実装したい場合には下記の手順の中からClass名のADFmyInterstitialをADFmyMovieInterstitialに差し替えて実装してください。
ADFmyMovieInterstitialは今後Deprecatedになる予定ですので、ADFmyInterstitialを使っての実装を推奨します。
1-1. 実装方法
①インタースティシャル広告専用の広告枠が必要となります。
アドフリくん管理画面の「広告枠」タブ > 「広告枠 追加」 > 「バナー種類」で「インタースティシャル広告」を選択します。
②アドフリくん動画リワードSDK導入後、ADFmyInterstitial.h
をインポートします。
#import <ADFMovieReward/ADFmyInterstitial.h>
③利用するアドネットワークのSDKをプロジェクトに導入します。
※各アドネットワークの導入方法については、「CocoaPodsを利用」または「手動で導入する手順」を参照ください。
④サポート対象のOSバージョンか、ADFmyInterstitial
クラスの下記のstaticメソッドで事前に確認可能です。
+ (BOOL)isSupportedOSVersion;
⑤“アドフリくん管理画面で発行された広告枠 ID” を指定してADFmyInterstitial
クラスのinitializeWithAppID:
メソッド(static)を呼び、動画読込を開始します。
application:didFinishLaunchingWithOptions:
ライフサイクル等、アプリの開始直後に極力呼び出して下さい。
+ (void)initializeWithAppID:(NSString *)appID;
パラメータ | 説明 |
---|---|
appID |
広告枠ID |
(既に読込開始している広告枠を指定した場合は、既存の読込が継続されます。)
⑥デリゲート(後述)によるコールバックを受け取りたいタイミングでADFmyInterstitial
クラスgetInstance
メソッド(static)を呼び出し、 ADFmyInterstitialクラスのインスタンスを受け取って下さい。
※ ⑤を呼び出していない場合は nil が返却されます。
+ (ADFmyInterstitial * __nullable)getInstance:(NSString *)appID delegate:(id<ADFmyMovieRewardDelegate>)delegate;
パラメータ | 説明 |
---|---|
appID |
広告枠ID |
delegate |
デリゲート(後述)を実装したクラスのインスタンス |
(動画の再生準備が完了していた際は、インスタンス受け取り直後に完了通知も受け取ります。)
⑦広告枠が新ローディングモードの場合、広告表示準備を明示的に行う必要があります。
- (void)load;
load
メソッドを呼び出すとそのタイミングで各アドネットワークへの表示準備開始をします。
load()関数を呼び出さないと表示準備が行われません。
⑧デリゲート(後述)で広告表示準備の完了通知を受け取った後、動画再生開始メソッドを呼びます。
//非推奨
- (void)play;
//推奨
- (void)playWithPresentingViewController:(UIViewController *)viewController;
パラメータ | 説明 |
---|---|
viewController |
アプリ最前面viewのUIViewController、多くの場合は「self」 |
- 再生準備が完了したアドネットワークの中から、1つ動画が選択されます。
- 再生が完了(あるいは失敗)したアドネットワークは、自動的に次の動画読み込みが行われます。
⑨動画のステータス変更に関する通知を受け取りたいクラスに下記デリゲートを実装します。
ADFmyMovieRewardDelegate
正常系のイベント
■ 広告の表示準備完了のイベントの受け取り
【非推奨】
- (void)AdsFetchCompleted:(BOOL)isTestMode_inApp;
パラメータ | 説明 |
---|---|
isTestMode_inApp |
テストモードか否か(この機能は現在未実装で、常にYESを返します) |
【推奨】
- (void)AdsFetchCompleted:(NSString *)appID isTestMode:(BOOL)isTestMode_inApp;
パラメータ | 説明 |
---|---|
appID |
広告枠ID |
isTestMode_inApp |
テストモードか否か(こ 機能 現在 未実装で、常にYESを返します) |
■ 動画広告の再生開始時のイベントの受け取り
【非推奨】
- (void)AdsDidShow:(NSString *)adnetworkKey;
パラメータ | 説明 |
---|---|
adnetworkKey |
再生を開始したアドネットワークのアドネットワークキー |
【推奨】
- (void)AdsDidShow:(NSString *)appID adNetworkKey:(NSString *)adNetworkKey;
パラメータ | 説明 |
---|---|
appID |
広告枠ID |
adnetworkKey |
再生を開始したアドネットワークのアドネットワークキー |
■ 動画再生完了時のイベントの受け取り
【非推奨】
- (void)AdsDidCompleteShow;
【推奨】
- (void)AdsDidCompleteShow:(NSString *)appID;
■ 広告を閉じた時のイベントの受け取り
【非推奨】
- (void)AdsDidHide;
【推奨】
- (void)AdsDidHide:(NSString *)appID;
パラメータ | 説明 |
---|---|
appID |
広告枠ID |
異常系のイベント
■ 広告表示準備失敗時のイベントの受け取り
- (void)AdsFetchFailed:(NSString *)appID error:(NSError *)error;
パラメータ | 説明 |
---|---|
appID |
広告枠ID |
error |
エラー情報 |
error.code | 説明 |
---|---|
ADF_FETCH_ERROR_CODE_OUTOFSTOCK | ADNWから在庫が返却されなかった場合 |
ADF_FETCH_ERROR_CODE_NOADNETWORK | 配信設定において利用可能なADNWが一つもなかった場合 |
ADF_FETCH_ERROR_CODE_ALREADY_LOADING | 前回のLoadingがまだ完了してない場合 |
■ 動画再生失敗時のイベントの受け取り
【非推奨】
- (void)AdsPlayFailed;
【推奨】
- (void)AdsPlayFailed:(NSString *)appID;
パラメータ | 説明 |
---|---|
appID |
広告枠ID |
動画の視聴が何かしらの理由で最後まで行われなかった場合に通知されます。
デリゲートの破棄
デリゲートの参照を破棄したい場合は、ADFmyInterstitial
クラスのインスタンスのdelegate
プロパティにnil
を入れて下さい。
1-2. 実装例(Objective-C)
● アプリ起動 〜 事前準備開始
//OSがサポートバージョン以上だったら、動画読込を開始
if ([ADFmyInterstitial isSupportedOSVersion] ) {
//広告枠IDを指定し、動画読込を開始
[ADFmyInterstitial initializeWithAppID:@”広告枠ID”];
}
● デリゲート実装 〜 インスタンス受け取り 〜 再生開始
//指定したクラスにデリゲートを実装する (ViewController 例)
@interface InterstitialViewController ()<ADFmyMovieRewardDelegate>
- (void)viewDidLoad {
//動画インタースティシャルのインスタンスを受け取る
//指定した広告枠 動画インタースティシャル インスタンスを受け取り、保持
_interstitial = [ADFmyInterstitial getInstance:@"広告枠ID" delegate:self];
}
#pragma mark - ADFmyMovieRewardDelegate
-(void)AdsFetchCompleted:(BOOL)isTestMode_inApp {
//動画広告読み込み完了時の処理
}
- (void)play {
//再生準備が出来ているか確認し、再生開始
if (_interstitial != nil && [_interstitial isPrepared]) {
//再生準備が出来ていたら、再生開始
[_interstitial playWithPresentingViewController:self];
}
}
● 各種コールバック受け取り
#pragma mark - ADFmyMovieRewardDelegate
- (void)AdsDidShow:(NSString*)adnetworkKey {
//動画表示開始時の処理
}
- (void)AdsDidCompleteShow {
//動画再生完了時の処理
}
- (void)AdsDidHide{
//動画を閉じた時の処理
}
- (void)AdsPlayFailed {
//動画再生失敗時の処理
}
● 広告の破棄
//デリゲートの参照の破棄
_interstitial.delegate = nil;
1-3. 実装例(Swift)
● アプリ起動 〜 事前準備開始
var window: UIWindow?
//OSがサポートバージョン以上だったら、動画読込を開始
if ADFmyInterstitial.isSupportedOSVersion() {
//広告枠IDを指定し、動画読込を開始
ADFmyInterstitial.initWithAppID("広告枠ID")
}
● デリゲート実装 〜 インスタンス受け取り 〜 再生開始
//指定したクラスにデリゲートを実装する (ViewController 例)
class SampleViewController: UIViewController, ADFmyMovieRewardDelegate {
override func viewDidLoad() {
//動画インタースティシャルのインスタンスを受け取る
//指定した広告枠 動画インタースティシャル インスタンスを受け取り、保持
self.interstitial = ADFmyInterstitial.getInstance("広告枠ID", delegate: self)
}
func AdsFetchCompleted(isTestMode_inApp: Bool) {
//動画広告読み込み完了時の処理
}
@IBAction func triggerVideo(_ sender: AnyObject) {
//再生準備が出来ているか確認し、再生開始
if let interstitial = self.interstitial{
if interstitial.isPrepared() {
interstitial.playWithPresentingViewController(self)
}
}
}
}