6-3. リファレンス ネイティブ広告(Android / iOS 共通 C++)
※各実装例の詳細は、サンプルプロジェクトをご確認下さい。
※バージョン1.8から、既存の動画操作メソッドの代替メソッドが追加されております。追加された代替メソッドをご利用していただくことを推奨しております。こちらをご確認ください。
■ ADFMovieNative
public class Adfurikun::ADFMovieNative
動画ネイティブ広告のCocos2d-x用のクラスです。このクラスで動画ネイティブ広告の制御を行います。
■コールバック設定
static void setDelegate (const char *appId, ADFMovieNativeDelegate *delegate)
コールバック(後述)を返したいクラスを設定します。
@param Adfurikun::ADFMovieNativeDelegateクラスを継承したクラス
動画広告の読込完了 / 失敗 などのタイミングで呼ばれる、呼び出し元へのコールバック(後述)を、設定可能です。(コールバックの受け取りが必要ない場合は、設定は必須ではありません)
■設定したコールバックの取得
static ADFMovieNativeDelegate * getDelegate (const char *appId)
設定したコールバックのオブジェクトを取得します。
@param const char* appId ... 広告枠ID
@return ADFMovieNativeDelegate * ... setDelegateで設定したコールバック(未設定の場合はNULL)
■設定したコールバックの参照を外す
static void detachDelegate (const char *appID)
設定したコールバックの参照を外します。
@param const char* appId ... 広告枠ID
画面遷移などでコールバックの参照を外したい場合は、上記で行えます。
■動画ネイティブ広告 : 動画操作メソッド
※バージョン1.8から、initializeWithAppIDとsetFrameの代替メソッドが追加されます。代替メソッドをご利用していただくことを推奨しております。こちらをご確認ください。
static void initializeWithAppID(const char* appId, int x, int y, int width, int height)
SDKの準備を開始します。
AppDelegate.cpp、applicationDidFinishLaunchingメソッド内など、
出来るだけアプリ開始直後に呼び出して下さい。
@param const char* appId ... 広告枠ID
@param int x ... 表示位置(x座標)
@param int y ... 表示位置(y座標)
@param int width ... 広告枠の横幅
@param int height ... 広告枠の高さ
レイアウトパターンは現在、1種類しか用意されていないため、
第二引数には1を指定してください。
static void load(const char* appId)
動画広告の取得リクエストを行います
@param const char* appId ... 広告枠ID
static void disableAd(const char* appId)
動画広告をViewから削除する
@param const char* appId ... 広告枠ID
画面遷移などで、広告を画面から消したいときなどに呼んでください
static void showVideo(const char* appId)
動画の読み込みの完了後、動画広告を表示する
@param const char* appId ... 広告枠ID
static void setFrame(const char* appId, int x, int y, int width, int height)
動画広告の表示位置とサイズを更新する
@param const char* appId ... 広告枠ID
@param int x ... 表示位置(x座標)
@param int y ... 表示位置(y座標)
@param int width ... 広告枠の横幅
@param int height ... 広告枠の高さ
広告枠ID毎に動画を管理します。動画広告の取得が成功したタイミング等は、コールバック(後述)を利用することで取得可能です。
バージョン1.8以前のメソッドで、広告を表示する場合、それぞれのプラットフォーム上での解像度及び座標軸が異なることにより、各プラットフォーム上での座標位置への変換作業が実装者側で追加で必要でした。
バージョン1.8で追加されたメソッドでは、各プラットフォームへの座標位置及びサイズの変換作業をプラグイン側で行うことで、実装者側で行なっていた変換作業をしなくても、広告を表示することができるようになります。
1.8では、setFrameやinitializeWithAppIDの代替メソッドが追加されているので、そちらのメソッドのご利用を推奨します。
static void initializeWithAppID(const char* appId)
SDKの準備を開始します。
AppDelegate.cpp、applicationDidFinishLaunchingメソッド内など、
出来るだけアプリ開始直後に呼び出して下さい。
@param const char* appId ... 広告枠ID
static void setConvertFrame(const char* appId, float visibleSizeW, float visibleSizeH, float x, float y, float width, float height)
指定した位置及びサイズで、動画広告を表示する
@param const char* appID 広告枠ID
@param float visibleSizeW 表示画面のサイズ(幅)
ex). Director::getInstance()->getVisibleSize()で取得したsizeオブジェクトの幅
@param float visibleSizeH 表示画面のサイズ(高さ)
ex). Director::getInstance()->getVisibleSize()で取得したsizeオブジェクトの高さ
@param float x 画面左下の原点(origin.x)から広告枠の左上の頂点までの距離
@param float y 画面左下の原点(origin.y)から広告枠の左上の頂点までの距離
@param float width 広告枠の横幅
@param float height 広告枠の高さ
広告枠の左上の頂点を、表示させたい位置になるように、x,yを調整してください
setConvertFrameで指定するx,yの補足説明
指定するx,yは下図のようになります
static void setFrameGravity(const char* appId, float visibleSizeW, float visibleSizeH, float width, float height , int horizontalGravity, int verticalGravity)
指定した掲載位置及びサイズで、動画広告を表示する
@param const char* appID 広告枠ID
@param float visibleSizeW 表示画面のサイズ(幅)
ex). Director::getInstance()->getVisibleSize()で取得したsizeオブジェクトの幅
@param float visibleSizeH 表示画面のサイズ(高さ)
ex). Director::getInstance()->getVisibleSize()で取得したsizeオブジェクトの高さ
@param float width 広告枠の横幅
@param float height 広告枠の高さ
@param int horizontalGravity 水平方向での広告の掲載位置
ex).
Adfurikun::ADFMovieNative::H_LEFT 画面の左端
Adfurikun::ADFMovieNative::H_CENTER 画面中央
Adfurikun::ADFMovieNative::H_RIGHT 画面の右端
@param int verticalGravity 垂直方向での広告の掲載位置
ex).
Adfurikun::ADFMovieNative::V_TOP 画面上部
Adfurikun::ADFMovieNative::V_CENTER 画面中央
Adfurikun::ADFMovieNative::V_BOTTOM 画面下部
static void setFitWidthFrame(const char* appId, float visibleSizeH, float height, int verticalGravity)
動画広告をアスペクト比を維持したまま、画面の横幅いっぱいまで広げて表示させます。
@param const char* appId ... 広告枠ID
@param float visibleSizeH ... 表示画面の高さ
ex). Director::getInstance()->getVisibleSize()で取得したsizeオブジェクトの高さ
@param float height ... 広告枠の高さ
@param int verticalGravity ... 垂直方向での広告の掲載位置
ex).
Adfurikun::ADFMovieNative::V_TOP 画面上部
Adfurikun::ADFMovieNative::V_CENTER 画面中央
Adfurikun::ADFMovieNative::V_BOTTOM 画面下部
■ ADFMovieNativeDelegate
public class Adfurikun::ADFMovieNativeDelegate
SDKからのコールバックのインターフェイスとなるクラスです。動画広告の取得のリクエストの成否に関する通知を受け取りたいクラスで継承し、メソッドを実装して下さい。
● 正常系
■動画広告の取得のリクエストが成功
virtual void onNativeMovieAdViewLoadFinish (const char *appId)=0
@param const char* appId ... 広告枠ID
バージョン1.10.0から、追加されたコールバック
■動画広告の再生開始
virtual void onNativeMovieAdViewPlayStart(const char* appId) = 0
@param const char* appId ... 広告枠ID
上述のコールバックは以下のタイミングで呼ばれます
・動画の再生開始のタイミング
・動画のリプレイ開始のタイミング
また、以下のタイミングでは呼ばれません
・アプリ側で、動画を一時停止して、再度動画を再生させた場合
■動画広告の再生終了
virtual void onNativeMovieAdViewPlayFinish(const char* appId, bool isVideoAd) = 0
@param const char* appId ... 広告枠ID
@param bool isVideoAd ... 動画広告 : true , 静止画 : false
上述のコールバックは以下のタイミングで呼ばれます
・動画の再生終了のタイミング
・動画のリプレイ終了のタイミング
● 異常系
■動画広告の取得のリクエストが失敗
virtual void onNativeMovieAdViewLoadError (const char *appId, int errorCode)=0
@param const char* appId ... 広告枠ID
@param int errorCode ... エラーコード
バージョン1.10.0から、paramにerrorCodeが追加されました
リクエストが何かしらの理由で最後まで行われなかった場合に通知されます。
(異常終了を必ず補足することは出来ません。あくまで、各アドネットワークのSDKから、通知があった場合のみに限ります)
バージョン1.10.0から、追加されたコールバック
■動画広告の再生失敗
virtual void onNativeMovieAdViewPlayFail(const char* appId, int errorCode) = 0
@param const char* appId ... 広告枠ID
@param int errorCode ... エラーコード
上述のコールバックは以下のタイミングで呼ばれます
・動画の再生が失敗したタイミング
● エラーコード(Android)
タイプ | コード | 内容 |
---|---|---|
NO_AD | 0 | 広告の在庫がない場合 |
NO_NETWORK | 1 | オフラインまたはフライトモードの場合 |
INVALID_APP_ID | 2 | 広告IDが登録されている内容と異なる場合 |
API_REQUEST_FAILURE | 3 | リクエストが失敗した場合 |
NO_SUPPORT_API_VERSION | 4 | API Levelが14以下の場合 |
PLAYER_ITEM_LOAD_FAILURE | 5 | 広告の読み込みが失敗した場合 |
PLAYER_ITEM_PLAY_FAILURE | 6 | 広告の再生が失敗した場合 |
OTHER_ERROR | 7 | その他の予期せぬエラーが発生した場合 |
● エラーコード(iOS)
タイプ | コード | 内容 |
---|---|---|
ADF_FETCH_ERROR_CODE_OUTOFSTOCK | 203 | ADNWから在庫が返却されなかった場合 |
ADF_FETCH_ERROR_CODE_NOADNETWORK | 400 | 配信設定において利用可能なADNWが一つもなかった場合 |
ADF_FETCH_ERROR_CODE_ALREADY_LOADING | 999 | 前回のLoadingがまだ完了してない場合 |
■ 使用例
(詳細は、サンプルアプリ・adfrikunSampleCocos を参照)
● アプリ起動〜事前準備開始
●広告枠IDを指定し、初期化処理を開始
(AppDelegate.cpp、applicationDidFinishLaunchingメソッド内に記述 例 )
//初期化処理を開始
Adfurikun::ADFMovieNative::initializeWithAppID([広告枠ID]);
●動画の再生位置及びサイズの設定
Adfurikun::ADFMovieNative::setConvertFrame(MOVIE_NATIVE_APPID, visibleSize.width , visibleSize.height ,p_x, p_y , p_width , p_height);
● 動画の読み込み開始
●動画を読み込む
Adfurikun::ADFMovieNative::load(MOVIE_NATIVE_APPID);
● デリゲート実装 〜 インスタンス受け取り 〜 再生開始
●指定したクラスにコールバッククラスを継承する (シーンのヘッダ 例)
class HelloAdfurikunNative : public cocos2d::LayerColor, public Adfurikun::ADFMovieNativeDelegate{
public:
//コールバック
void onNativeMovieAdViewLoadFinish(const char * appID);
void onNativeMovieAdViewLoadError(const char * appID, int errorCode);
//バージョン1.10.0から、追加されたコールバック
void onNativeMovieAdViewPlayStart(const char* appId);
void onNativeMovieAdViewPlayFinish(const char* appId, bool isVideoAd);
void onNativeMovieAdViewPlayFail(const char* appId, int errorCode);
}
●動画ネイティブのコールバックを設定
Adfurikun::ADFMovieNative::setDelegate( [広告枠ID], this);
●動画広告の取得のリクエストの成否の通知を受け取る
/**動画広告の取得リクエストが成功した時に呼ばれるコールバック */
void HelloAdfurikunNative::onNativeMovieAdViewLoadFinish(const char * appID){
// ここに処理を書く
}
/**動画広告の取得リクエストが失敗した時に呼ばれるコールバック */
void HelloAdfurikunNative::onNativeMovieAdViewLoadError(const char * appID, int errorCode){
// ここに処理を書く
}
/**動画広告の再生が開始した時に呼ばれるコールバック */
void HelloAdfurikunNative::onNativeMovieAdViewPlayStart(const char * appID){
// ここに処理を書く
}
/**動画広告の再生が終了した時に呼ばれるコールバック */
void HelloAdfurikunNative::onNativeMovieAdViewPlayFinish(const char * appID, bool isVideoAd){
// ここに処理を書く
}
/**動画広告の再生が失敗した時に呼ばれるコールバック */
void HelloAdfurikunNative::onNativeMovieAdViewPlayFail(const char * appID, int errorCode){
// ここに処理を書く
}
●動画広告の取得リクエストが完了したタイミングで、動画の再生開始
void HelloAdfurikunNative::onNativeMovieAdViewLoadFinish(const char * appID){
// ここに処理を書く
Adfurikun::ADFMovieNative::playVideo( [広告枠ID] );
}
● 各種コールバック受け取り
●動画広告取得リクエストの成否に関しての通知を受け取る
/** 取得が成功した時のイベント */
void HelloAdfurikunNative::onNativeMovieAdViewLoadFinish(const char * appID){
// ここに処理を書く
Adfurikun::ADFMovieNative::playVideo( [広告枠ID] );
}
/** 取得が失敗した時のイベント */
void HelloAdfurikunNative::onNativeMovieAdViewLoadError(const char * appID, int errorCode){
// ここにretry処理を書く
// 失敗した場合に、広告のロードのリトライ処理を再び行うと、在庫がないケースの場合、無限にロードを行ってしまう可能性があるため
// アプリ側でリトライ回数などを設けて、適宜ハンドリングしていただけるようお願いいたします
}
●動画広告の再生状態に関しての通知を受け取る
/** 再生を開始した時のイベント */
void HelloAdfurikunNative::onNativeMovieAdViewPlayStart(const char * appID){
// ここに処理を書く
}
/** 再生を終了した時のイベント */
void HelloAdfurikunNative::onNativeMovieAdViewPlayFinish(const char * appID, bool isVideoAd){
if (isVideoAd) {
} else {
// 静止画の場合は、表示された直後にこのコールバックが呼ばれるため
// もし、広告を切り替えるという処理をしている場合は、タイムラグを発生させる必要あり
}
}
/** 再生が失敗した時のイベント */
void HelloAdfurikunNative::onNativeMovieAdViewPlayFail(const char * appID, int errorCode){
// ここに処理を書く
}
● 動画広告の位置指定
画面の中央に広告を表示させたい場合
下図のように、画面の中央に広告を表示させたい場合
setConvertFrameを使う場合
// 画面サイズと画面の左下座標を取得
cocos2d::Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
// 広告の横幅
int p_width = 160;
// 広告の高さ
int p_height = p_width * 9/16;
// 左下の座標原点(origin.xおよびorigin.y)から、広告枠の左上の頂点までの距離を算出
float p_x = visibleSize.width *0.5 - p_width *0.5;
float p_y = visibleSize.height *0.5 + p_height *0.5;
Adfurikun::ADFMovieNative::setConvertFrame(MOVIE_NATIVE_APPID, visibleSize.width , visibleSize.height ,p_x, p_y , p_width , p_height);
}
setFrameGravityを使う場合
cocos2d::Size visibleSize = Director::getInstance()->getVisibleSize();
Adfurikun::ADFMovieNative::setFrameGravity(MOVIE_NATIVE_APPID, visibleSize.width , visibleSize.height , ADFURIKUN_NATIVE_VIEW_W , ADFURIKUN_NATIVE_VIEW_W * 9/16 , Adfurikun::ADFMovieNative::H_CENTER,Adfurikun::ADFMovieNative::V_CENTER);
画面の下部に指定したサイズで、広告を表示させたい場合
cocos2d::Size visibleSize = Director::getInstance()->getVisibleSize();
// 水平方向と垂直方向の掲載位置を変更することで、画面の上部や右端などに広告を表示することが可能
// 詳細はサンプルコードをご覧ください
Adfurikun::ADFMovieNative::setFrameGravity(MOVIE_NATIVE_APPID, visibleSize.width , visibleSize.height , ADFURIKUN_NATIVE_VIEW_W , ADFURIKUN_NATIVE_VIEW_W * 9/16 , Adfurikun::ADFMovieNative::H_CENTER,Adfurikun::ADFMovieNative::V_BOTTOM);
画面の横幅いっぱいまで広げて、広告を表示させたい場合
cocos2d::Size visibleSize = Director::getInstance()->getVisibleSize();
int p_height = visibleSize.width * 9/16;
// 画面の掲載位置を変えることで、上部や中央にも表示することが可能
Adfurikun::ADFMovieNative::setFitWidthFrame(MOVIE_NATIVE_APPID, visibleSize.height, p_height,Adfurikun::ADFMovieNative::V_BOTTOM);
特定のスプライト画像の上に広告を表示させたい場合
例).下図のように、テレビ画像の上に広告を表示して、CMのように広告を流したい場合。テレビ画像のAnchor Pointは(0.5, 0.5)
// 画面サイズと画面の左下座標を取得
cocos2d::Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
int margin = 4;
// 広告の横幅
int p_width = tv.width - margin * 2;
// 広告の高さ
int p_height = p_width * 9/16;
// 左下の座標原点(origin.xおよびorigin.y)から、広告枠の左上の頂点までの距離を算出
float p_x = margin + tvPos.x - origin.x - tv.width/2;
float p_y = tvPos.y-origin.y + tv.height/2 - margin;
Adfurikun::ADFMovieNative::setConvertFrame(MOVIE_NATIVE_APPID, visibleSize.width , visibleSize.height ,p_x, p_y , p_width , p_height);
}
■ 動画の再生タイミングに関して
成功のコールバックが返されて、広告の取得が完了したら、開発者の任意のタイミングで動画の再生を行うことが可能です。
*初回の動画再生はplayVideoメソッドを実行しないと動画が再生されないので、注意してください
■ 動画の自動停止機能について
動画ネイティブ広告(View)は、表示エリア内において(コンテンツ領域とタイトルバーを含んだエリア)、広告Viewの可視域が60%以上の時のみ動画を再生し、60%未満の場合は自動で再生を停止します。
したがって、スクロールなどで広告が隠れて、広告の見えている部分が60%未満になったタイミングで動画の再生が自動で停止されて、再び60%以上表示されたタイミングで自動的に再生が再開されます。
ただし、pauseVideoメソッドで動画の再生が一時停止されている場合は、60%以上が画面に表示されていても自動で動画の再生は開始されません。また、動画の停止中は案件の自動更新も同じく一時的に停止します。
*なお、この機能はAndroidの場合、OS3.2以上の端末のみ提供となります。iOSの場合は、OSのバージョン関係なくこの機能は提供されております。
■ 動画ネイティブ広告を表示するActivityに関して
※AndroidManifest.xmlの動画ネイティブ広告を表示するActivityの項目に、以下の内容を設定してください。
android:hardwareAccelerated="true"
■ 広告のサイズの目安に関して
広告の視認性確保のため、以下を目安に実装をお願いします。
- 縦画面: 動画広告の横幅が画面横幅の50%以上であること
- 横画面: 動画広告の横幅が画面横幅の25%以上であること
※上記基準を下回る場合は、広告の配信が停止される可能性がございますので、ご了承ください。
■ 広告の複数表示について
- 現在、複数枠には対応していません。
- 1画面で1箇所の設置を推奨します。
- また、設置箇所ごとのレポートは参照できず合算されます。