動画リワード広告
1-1. 実装方法
①動画リワード広告専用の広告枠が必要となります。
アドフリくん管理画面の「広告枠」タブ > 「広告枠 追加」 > 「バナー種類」で「動画リワード広告」を選択します。
②アドフリくん動画リワードSDK導入後、ADFmyMovieReward.h
をインポートします。
#import <ADFMovieReward/ADFmyMovieReward.h>
③利用するアドネットワークのSDKをプロジェクトに導入します。
※各アドネットワークの導入方法は、「CocoaPodsを利用」または「手動で導入する手順」を参照ください。
④サポート対象のOSバージョンか、ADFmyMovieReward
クラスの下記のstaticメソッドで事前に確認可能です。
+ (BOOL)isSupportedOSVersion;
⑤“アドフリくん管理画面で発行された広告枠 ID” を指定してADFmyMovieReward
クラスのinitializeWithAppID:viewController:
メソッド(static)を呼び、動画読込を開始します。
application:didFinishLaunchingWithOptions:
ライフサイクル等、アプリの開始直後に極力呼び出して下さい。
+ (void)initializeWithAppID:(NSString *)appID;
パラメータ | 説明 |
---|---|
appID |
対象の広告枠ID |
(既に読込開始している広告枠を指定した場合は、既存の読込が継続されます。)
⑥デリゲート(後述)によるコールバックを受け取りたいタイミングでADFmyMovieReward
クラスのgetInstance:delegate:
メソッド(static)を呼び出し、ADFmyMovieReward
クラスのインスタンスを受け取って下さい。
※ ⑤を呼び出していない場合は nil が返却されます。
+ (ADFmyMovieReward * __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つ動画が選択されます。
・再生が完了(あるいは失敗)したアドネットワークは、自動的に次の動画読み込みが行われます。
⑨アドフリくん動画リワードの終了は、 ADFmyMovieReward
クラスのdisposeAll
メソッド(static)で行います。
(呼ばれた後は、広告の表示が一切行われなくなります)
- (void)disposeAll;
※ アドフリくんに関するリソースの全て開放しますが、こちらで完全な制御を行うことが出来ません。(アドネットワークごとの動作は各々のSDK内で行っているため )
⑩動画のステータス変更に関する通知を受け取りたいクラスに下記デリゲートを実装します。
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;
パラメータ | 説明 |
---|---|
appID |
広告枠ID |
■ 広告を閉じた時のイベントの受け取り
【非推奨】
- (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 |
動画の視聴が何かしらの理由で最後まで行われなかった場合に通知されます。
デリゲートの破棄
デリゲートの参照を破棄したい場合は、ADFmyMovieReward
クラスのインスタンスの delegate
プロパティに nil
を入れて下さい。
1-2. 実装例(Objective-C)
● アプリ起動 〜 事前準備開始
//OSがサポートバージョン以上だったら、動画読込を開始
if ([ADFmyMovieReward isSupportedOSVersion]) {
//広告枠IDを指定し、動画読込を開始
[ADFmyMovieReward initWithAppID:@”広告枠ID” viewController:self.window.rootViewController];
}
● デリゲート実装 〜 インスタンス受け取り 〜 再生開始
//指定したクラスにデリゲートメソッドを実装する (ViewController 例)
@interface MovieRewardViewController ()<ADFmyMovieRewardDelegate>
- (void)viewDidLoad {
//動画リワードのインスタンスを受け取る
//指定した広告枠の動画リワードインスタンスを受け取り、保持
_movieReward = [ADFmyMovieReward getInstance:@"広告枠ID" delegate:self];
}
#pragma mark - ADFmyMovieRewardDelegate
- (void)AdsFetchCompleted:(BOOL)isTestMode_inApp {
//動画広告読み込み完了時の処理
}
- (void)play {
//再生準備が出来ているか確認し、再生開始
if (_movieReward != nil && [_movieReward isPrepared]) {
//再生準備が出来ていたら、再生開始
[_movieReward play];
}
}
● 各種コールバック受け取り
#pragma mark - ADFmyMovieRewardDelegate
- (void)AdsDidShow:(NSString*)adnetworkKey {
//動画表示開始時の処理
}
- (void)AdsDidCompleteShow {
//動画再生完了時の処理
}
- (void)AdsDidHide{
//動画を閉じた時の処理
}
- (void)AdsPlayFailed {
//動画再生失敗時の処理
}
● 広告の破棄
//デリゲートの参照の破棄
_movieReward.delegate = nil;
//インスタンスの全破棄
[ADFmyMovieReward disposeAll];
1-3. 実装例(Swift)
● アプリ起動〜事前準備開始
var window: UIWindow?
//OSがサポートバージョン以上だったら、動画読込を開始
if ADFmyMovieReward.isSupportedOSVersion() {
//広告枠IDを指定し、動画読込を開始
if let vc = self.window?.rootViewController {
ADFmyMovieReward.initWithAppID("広告枠ID", viewController: vc)
}
}
● デリゲート実装 〜 インスタンス受け取り 〜 再生開始
//指定したクラスにデリゲートを実装する (ViewController 例)
class SampleViewController: UIViewController, ADFmyMovieRewardDelegate {
override func viewDidLoad() {
//動画リワードのインスタンスを受け取る
//指定した広告枠の動画リワード インスタンスを受け取り、保持
self.movieReward = ADFmyMovieReward.getInstance("広告枠ID", delegate: self)
}
func AdsFetchCompleted(isTestMode_inApp: Bool) {
//動画広告読み込み完了時の処理
}
@IBAction func triggerVideo(_ sender: AnyObject) {
//再生準備が出来ているか確認し、再生開始
if let movieReward = self.movieReward {
if movieReward.isPrepared() {
movieReward.play()
}
}
}
}
1-4. その他・注意
通信状態が不可の際の挙動について
isPrepared
メソッドは通信状態が ”接続不可 ”(機内モード/感慨など)の際は、 一律でNOを返します。(動画リワードSDK: バージョン2.0.4 以降)
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;
}
その他
- 新しいアドネットワークを導入する際は、都度サービス画面より配信比率を変更し、追加するアドネットワークの比率を高めてのテストをおすすめします。 (デフォルトで、比率の調整を自動で行っているため)
- アプリの負荷に応じて、ONにするアドネットワーク数を適時調整いただくようお願いします。(アドネットワークのSDKが増える毎に、処理の負荷が高まる可能性があります)