6-4. リファレンス ネイティブFLEX広告(Android / iOS 共通 C++)
※各実装例の詳細は、サンプルプロジェクトをご確認下さい。
■ APPLICATIONクラスの実装に関して
動画ネイティブ広告(FLEX)の場合は、Applicationクラスの実装が必要となります。
private AppActivity mAppActivity;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
if (activity instanceof AppActivity) {
mAppActivity = (AppActivity) activity;
}
}
@Override
public void onActivityStarted(Activity activity) {
if (activity instanceof FlexViewAdActivity || activity instanceof GlossomBillboardAdActivity) {
mAppActivity.onWindowFocusChanged(true);
mAppActivity.onResume();
}
}
※詳細な実装方法に関しては、サンプルコードのAndroidManifest.xml及び「org.cocos2dx.cpp.CustomApplication」クラスを参照してください。
■ ADFMovieNativeAdFlex
public class Adfurikun::ADFMovieNativeAdFlex
動画ネイティブFLEX広告のCocos2d-x用のクラスです。このクラスで動画ネイティブFLEX広告の制御を行います。
■コールバック設定
static void setDelegate (const char *appId, ADFMovieNativeAdFlexDelegate *delegate)
コールバック(後述)を返したいクラスを設定します。
@param Adfurikun::ADFMovieNativeAdFlexDelegateクラスを継承したクラス
動画の読込完了 / 再生 などのタイミングで呼ばれる、呼び出し元へのコールバック(後述)を、設定可能です。(コールバックの受け取りが必要ない場合は、設定は必須ではありません)
■設定したコールバックの取得
static ADFMovieNativeAdFlexDelegate * getDelegate (const char *appId)
設定したコールバックのオブジェクトを取得します。
@param const char* appId ... 広告枠ID
@return ADFMovieNativeAdFlexDelegate * ... setDelegateで設定したコールバック(未設定の場合はNULL)
■設定したコールバックの参照を外す
static void detachDelegate (const char *appID)
設定したコールバックの参照を外します。
@param const char* appId ... 広告枠ID
画面遷移などでコールバックの参照を外したい場合は、上記で行えます。
■動画ネイティブFLEX広告 : 動画操作メソッド
static void initializeWithAppID(const char* appId)
広告枠に対して、初期化を行います。
@param const char* appId ... 広告枠ID
static void load(const char* appId)
広告の準備を開始します。
@param const char* appId ... 広告枠ID
static void play(const char* appId)
動画広告の再生を開始します。
@param const char* appId ... 広告枠ID
static void closeAd(const char* appId)
再生を終了します。
@param const char* appId ... 広告枠ID
static bool isPrepared(const char* appId)
動画広告の準備が完了したか?
@param const char* appId ... 広告枠ID
static void dispose()
アドフリくん動画ネイティブFLEXのSDKに関するリソースを開放します。
破棄後に再度動画ネイティブFLEXの準備を開始する際は、initializeWithAppIDメソッドを
再度呼び出して下さい。
広告枠ID毎に動画を管理します。再生可能になるタイミング等は、コールバック(後述)を利用することで取得可能です。
■ ADFMovieNativeAdFlexDelegate
public class Adfurikun::ADFMovieNativeAdFlexDelegate
SDKからのコールバックのインターフェイスとなるクラスです。動画のステータス変更に関する通知を受け取りたいクラスで継承し、メソッドを実装して下さい。
● 正常系
■広告の表示準備完了のイベントの受け取り
virtual void prepareSuccess (const char *appId)=0
@param const char* appId ... 広告枠ID
■動画広告の再生開始時のイベントの受け取り
virtual void startPlaying (const char *appId, const char *adnetworkKey)=0
@param const char* appId ... 広告枠ID
@param const char* adnetworkKey ... アドネットワークキー
■動画再生完了時のイベントの受け取り (インセンティブ発生ポイント)
virtual void finishedPlaying (const char *appId)=0
@param const char* appId ... 広告枠ID
■広告を閉じた時のイベントの受け取り
virtual void adClose(const char *appId)=0
@param const char* appId ... 広告枠ID
● 異常系
■広告準備失敗時のイベントの受け取り
virtual void prepareFailure(const char * appID, int errorCode)=0
@param const char* appId ... 広告枠ID
@param int errorCode ... Error Code
● エラーコード(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がまだ完了してない場合 |
■広告の再生失敗時のイベントの受け取り
virtual void failedPlaying (const char *appId)=0
@param const char* appId ... 広告枠ID
動画の視聴が何かしらの理由で最後まで行われなかった場合に通知されます。
(異常終了を必ず補足することは出来ません。あくまで、各アドネットワークのSDKから、通知があった場合のみに限ります)
■ 使用例
(詳細は、サンプルアプリ・adfrikunSampleCocos を参照)
● アプリ起動〜事前準備開始
●広告枠IDを指定し、動画読込を開始
(AppDelegate.cpp、applicationDidFinishLaunchingメソッド内に記述 例 )
//動画読込を開始
Adfurikun::ADFMovieNativeAdFlex::initializeWithAppID([広告枠ID]);
● デリゲート実装 〜 インスタンス受け取り 〜 再生開始
●指定したクラスにコールバッククラスを継承する (シーンのヘッダ 例)
class HelloAdfurikunNativeAdFlex : public cocos2d::LayerColor,
public Adfurikun::ADFMovieNativeAdFlexDelegate
●動画ネイティブFLEXのコールバックを設定
Adfurikun::ADFMovieNativeAdFlex::setDelegate( [広告枠ID], this);
●動画読込完了の通知を受け取る
/**動画広告の読み込みが完了した時に呼ばれるコールバック */
void HelloAdfurikunNativeAdFlex::prepareSuccess(const char * appID){ }
●再生準備が出来ているか確認し、再生開始
if ( Adfurikun::ADFMovieNativeAdFlex::isPrepared( [広告枠ID] )) {
//再生準備が出来ていたら、再生開始 (再生準備が出来ているか、ご確認ください )
Adfurikun::ADFMovieNativeAdFlex::play( [広告枠ID] );
//BGM 停止など
}
●再生終了
Adfurikun::ADFMovieNativeAdFlex::closeAd( [広告枠ID] );
● 各種コールバック受け取り
●動画表示開始時 / 動画再生完了時 / 動画再生失敗時 / 動画を閉じた時 の通知を受け取る
/** 広告 表示が開始した時のイベント */
void HelloAdfurikunNativeAdFlex::startPlaying(const char * appID, const char * adnetworkKey){
//再生開始時に、必ず他 アニメーションを停止して下さい。
(一部のアドネットワークでエラーが起きます)
//再生完了(もしくは失敗)後、アニメーションを再開して下さい。
Director::getInstance()->pause();
Director::getInstance()->stopAnimation();
}
/** 広告 表示が最後まで終わった時のイベント */
void HelloAdfurikunNativeAdFlex::finishedPlaying(const char * appID){
//アニメーションを再開
Director::getInstance()->resume();
Director::getInstance()->startAnimation();
}
/** 動画広告再生エラー時のイベント */
void HelloAdfurikunNativeAdFlex::failedPlaying(const char * appID){
//アニメーションを再開
Director::getInstance()->resume();
Director::getInstance()->startAnimation();
}
/** 広告を閉じた時のイベント */
void HelloAdfurikunNativeAdFlex::adClose(const char * appID){
//アニメーションを再開
Director::getInstance()->resume();
Director::getInstance()->startAnimation();
//BGMの再開など
}
● 参照の破棄
デリゲートの参照の破棄
/** 画面遷移 */
Adfurikun::ADFMovieNativeAdFlex::detachDelegate();
インスタンス 全破棄
/** アドフリくんSDKに関するリソースの破棄を行ないます。
アドネットワーク毎のSDKに関しては制御を行っていません。
(明示的に破棄する手段が存在しないアドネットワークが存在するため) */
Adfurikun::ADFMovieNativeAdFlex::dispose();
■ 動画再生後の画面の回転の挙動について
動画ネイティブ広告(FLEX)を再生させたActivityを画面固定している場合は、動画ネイティブ広告(FLEX)の画面回転によって同じく画面回転してしまいます。
以下の方法で再生させたActivityを画面回転しないように対応可能です。
/**
* ApplicationクラスからActivityLifecycleCallbacksを設定し、
* オーバーライドされたonActivityStartedのメソッドで
* 以下のコードを追加すると固定できます
*/
@Override
public void onActivityStarted(Activity activity) {
if (activity instanceof FlexViewAdActivity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
※詳細な実装方法に関しては、サンプルコードのAndroidManifest.xml及び「org.cocos2dx.cpp.CustomApplication」クラスを参照してください。
■ 動画広告における、その他の注意点
新しいアドネットワークを導入する際は、都度サービス画面より配信比率を変更し、追加するアドネットワークの比率を高めてのテストをおすすめします。
(デフォルトで、比率の調整を自動で行っているため)
また、アプリの負荷に応じて、ONにするアドネットワーク数を適時調整いただくようお願いします。
(アドネットワーク SDKが増える毎に、処理の負荷が高まる可能性があります)