全画面動画広告は、高いeCPMでの収益化が期待できる15~30秒程度のスキップ可能な動画広告です。ブランドやゲーム開発者に好まれる動画広告は、ステージクリア/レベル上昇時の待ち時間、PVP(オンライン対人型)ゲームの待ち時間に最適です。動画広告は視覚、聴覚に加え、動的な表現力を活用してユーザーを夢中にさせる様なアプリ内広告の体験を提供できます。
動画広告を実装するには、まずインタースティシャル広告プレースメントを作成する必要があります。いったんインタースティシャル広告プレースメントを作成すると、InMobiポータルから静止画広告と動画広告の組み合わせか、動画のみの広告を表示するかのどちらかをコントロールできます。
また、より高度な動画コントロールとして、ユーザがWifi接続時にのみ動画広告を表示したり、スキップ可能な動画広告のみを表示したりといった設定が可能です。
以下の手順に従い、動画広告での収益化を開始してください。
全画面動画広告を作成するために、以下の InMobiInterstitial
のインスタンスを作成します。
InMobiInterstitial interstitialAd = new InMobiInterstitial(InterstitialAdsActivity.this, 1471550843414L, mInterstitialAdListener);
こちらの mInterstitialAdListener
はInterstitialAdListener2
インターフェースを実装したものです。全画面動画広告を作成するにはこのインターフェースの実装が必須です。
注意:
InMobiInterstitial
クラスはスレッドセーフではありません。インタースティシャルインスタンスはUIスレッド上で作成しなければなりません。InterstitialAdListener2
インターフェースを使用すれば、全画面動画広告の重要なライフサイクルイベントにリスナーを設定できます。これらのイベントリスナーを介してお客様のアプリケーションがさまざまなライフサイクルトランジションを正しくハンドルしていることを確認する必要があります。
/**
* Listener for receiving notifications during the lifecycle of an interstitial.
*/
public abstract class InterstitialAdEventListener {
/**
* Called to indicate that an ad was loaded and it can now be shown. This will always be called
* <strong>after</strong> the {@link #onAdReceived(InMobiInterstitial)} callback.
*
* @param ad Represents the {@link InMobiInterstitial} ad which was loaded
*/
public void onAdLoadSucceeded(InMobiInterstitial ad) {}
/**
* Callback to signal that a request to fetch an ad (by calling
* {@link InMobiInterstitial#load()} failed. The status code indicating the reason for failure
* is available as a parameter. You should call {@link InMobiInterstitial#load()} again to
* request a fresh ad.
*
* @param ad Represents the {@link InMobiInterstitial} ad which failed to load
* @param status Represents the {@link InMobiAdRequestStatus} status containing error reason
*/
public void onAdLoadFailed(InMobiInterstitial ad, InMobiAdRequestStatus status) {}
/**
* Called to indicate that an ad is available in response to a request for an ad (by calling
* {@link InMobiInterstitial#load()}.
<strong>Note</strong> This does not * indicate that the ad can be shown yet. Your code should show an ad <strong>after</strong> the * {@link #onAdLoadSucceeded(InMobiInterstitial)} method is called.
Alternately, if you do not * want to handle this event, you must test if the ad is ready to be shown by
checking the * result of calling the {@link InMobiInterstitial#isReady()} method.* *
@param ad Represents the {@link InMobiInterstitial} ad for which ad content was received */
public void onAdReceived(InMobiInterstitial ad) {}
/** * Called to indicate that an ad interaction was observed.
* * @param ad Represents the {@link InMobiInterstitial} ad on which user clicked *
@param params Represents the click parameters */
public void onAdClicked(InMobiInterstitial ad, Map<object> params) {}
/** * Called to indicate that the ad will be launching a fullscreen overlay.
* * @param ad Represents the {@link InMobiInterstitial} ad which will display */
public void onAdWillDisplay(InMobiInterstitial ad) {}
/** * Called to indicate that the fullscreen overlay is now the topmost screen.
* * @param ad Represents the {@link InMobiInterstitial} ad which is displayed */
public void onAdDisplayed(InMobiInterstitial ad) {}
/** * Called to indicate that a request to show an ad (by calling {@link InMobiInterstitial#show()} * failed.
You should call {@link InMobiInterstitial#load()} to request for a fresh ad.
* * @param ad Represents the {@link InMobiInterstitial} ad which failed to show */
public void onAdDisplayFailed(InMobiInterstitial ad) {}
/** * Called to indicate that the fullscreen overlay opened by the ad was closed.
* * @param ad Represents the {@link InMobiInterstitial} ad which was dismissed */
public void onAdDismissed(InMobiInterstitial ad) {}
/** * Called to indicate that the user may leave the application on account of interacting with the ad.
* * @param ad Represents the {@link InMobiInterstitial} ad */
public void onUserLeftApplication(InMobiInterstitial ad) {}
/** * Called to indicate that rewards have been unlocked.
* * @param ad Represents the {@link InMobiInterstitial} ad for which rewards was unlocked
* @param rewards Represents the rewards unlocked */
public void onRewardsUnlocked(InMobiInterstitial ad, Map<object, object=""> rewards) {} }</object,></object>
全画面動画広告をリクエストするには、 InMobiInterstitial
インスタンス上でload()
メソッドを呼び出します。
interstitialAd.load();
アプリケーションは、このリクエストの結果を InterstitialAdEventListener
抽象クラスを介して通知します。広告リクエストに成功した場合は、onAdReceived(InMobiInterstitial)
イベントが生成されます。次に、onAdLoadSucceeded
イベントかonAdLoadFailed
イベントが生成されます。
onAdLoadFailed
イベントが生成された場合、このイベントのInMobiAdRequestStatus
オブジェクトにより理由が示されます。
onAdLoadSucceeded
イベントが生成された場合、これ以降はいつでも InMobiInterstitial
インスタンス上のshow()
を呼び出すことにより広告を表示できます。
注意: SDKにより onAdLoadSucceeded
イベントが生成されたあとで、同じインタースティシャル広告上でload()
を呼び出しても、ネットワークからの新しい広告のリクエストは保証されません。新しい広告が取得されるのは、以前の広告をSDKが廃棄した場合、広告の有効期限が切れた場合、またはユーザーがアプリケーションのデータやキャッシュをクリアした場合のみです。
全画面動画広告を表示するには、SDKが onAdLoadSucceeded
イベントを生成した後、任意のタイミングでInMobiInterstitial
インスタンス上でshow()
を呼び出してください。
以下、コード例です。
InterstitialAdEventListener mInterstitialAdEventListener = new InterstitialAdEventListener() {
// implementation for other events
// onAdReceived, onAdLoaFailed, etc
@Override
public void onAdLoadSucceeded(InMobiInterstitial inMobiInterstitial) {
Log.d(TAG, "Ad can now be shown!");
mCanShowAd = true;
}
};
void init() {
InMobiInterstitial interstitialAd = new InMobiInterstitial(GameActivity.this, 1471550843414L, mInterstitialAdEventListener);
}
void prepareGameLevel() {
interstitialAd.load();
}
void handleGameLevelCompleted() {
If (mCanShowAd) interstitialAd.show();
}
アプリケーションは、このリクエストの結果を InterstitialAdEventListener
抽象クラスを介して通知します。
コード上、広告を表示できる場合、SDKは onAdWillDisplay
インタフェース上に呼び出し、続いて、その広告が実際に画面上に表示されている場合 onAdDisplayed
メソッドを呼び出すことで状態を通知します。
広告が表示できない場合は、SDKが onAdDisplayFailed
イベントを生成して、お客様のアプリケーションに広告を表示できなかったことを知らせます。このイベントに対処するために、load()
を再度呼び出すことで新しい広告をリクエストできます。
全画面動画広告が閉じられる場合は、お客様のアプリケーションの onAdDismissed
コールバックに通知されます。
アニメーション
このプロセスで使用するアニメーションリソースIDを実装することで全画面動画広告の表示と非表示をアニメーション化できます。これは、以下の例の様に show(int, int)
を呼び出すだけで実行できます。
interstitialAd.show(R.anim.anim_entry, R.anim.anim_exit);
こちら、GitHubでインタースティシャル広告インテグレーションのコードサンプルを確認できます。
時には、広告品質のチェックをすべて逃れた不正な広告主様が、無関係で不快なものや混乱するものをユーザーに表示することで、アプリのユーザーエクスペリエンスを損なうことになります。 このような状況への対応策として、広告インスタンスのcreativeIDを取得し、InMobiの連絡先に暗号化されたクcreativeIDでレポートし直します。
mInterstitialAd.getCreativeId()// mInterstitialAd
はサンプルインスタンスです。
[ツール] - [診断]に進み、テストモードを グローバルオンかセレクティブオンのどちらかに切り替えます。
アプリに対する広告インテグレーションが初めての場合 | テストモードをグローバルオンに設定します。 |
特定のテスト用端末にのみテスト用広告を配信したい場合 - アプリに対して既にSDKを実装済みで、特定の更新部分などのテストをテスト用の端末に限定して実施する必要がある場合。 |
テストモードをセレクティブオンに設定します。
デバイスセクションでテスト端末を登録します。
すでに登録済みのデバイスがある場合は、その端末を選択し、テストモードを有効に設定できます。 |
注意: テスト完了後、本番稼働する前にテストモードをオフにしなければなりません。そうしないと、お客様のアプリは収益化できません。
これで、テスト広告を取得するための準備が整いました。
デバイスIDの確認方法
ここでのデバイスIDは Google Play Advertising ID (GPID)を指します。デバイスIDを取得するために、コンソールに対してデバッグログを出力するようにSDKを設定します。以下の行をバナー広告をインテグレーションしているアクティビティに追加することで設定できます。
InMobiSdk.setLogLevel(LogLevel.DEBUG);
これでデバイスIDはDDMSコンソール内にデバッグログで出力されます。
ステップ1で示した通りにデバックログを有効にすると、SDKはDDMSコンソールにデバッグにに役立つログ情報を出力します。
以下、出力されるログの情報です。
以下の表がこれらのログをキャプチャします。
SDK初期化時
シナリオ | ログ レベル | ログ |
パブリッシャーがNULLまたは空白のアカウントIDを渡した場合。 | Error | Account id cannot be null or empty. Please provide a valid Account id. |
パブリッシャーが有効なアカウントIDを渡した場合。 | Debug | InMobi SDK initialized with <account id="" /> |
パブリッシャーが無効なアカウントIDを渡した場合。 | Error | Invalid account id passed to init. Please provide a valid account id. |
必須パーミッションの設定不備の場合。 | Debug | Please grant the mandatory permissions : INTERNET & ACCESS_NETWORK_STATE, SDK could not be initialized. |
現在設定されているパーミッション | Debug | Permissions granted to the SDK are : <list granted="" of="" permissions="" /> |
より新しいバージョンのSDKが入手可能な場合。 | Debug | A newer version (ver. 6.0.0) of the InMobi SDK is available! You are currently on an older version (ver. 5.3.1). Download the latest InMobi SDK from http://www.inmobi.com/products/sdk/#downloads |
広告のライフサイクルで出力される主なログ
シナリオ | ログ レベル | ログ |
ネットワークが使用できない状況で広告がリクエストされた場合。 | Error | Network not reachable currently. Please try again. |
広告の読み込み中に別の広告がリクエストされた場合。 | Error | An ad load is already in progress. Please wait for the load to complete before requesting for another ad ( <placement id="" /> ). |
ユーザーが広告を閲覧中に別の広告がリクエストされた場合。 | Error | An ad is currently being viewed by the user. Please wait for the user to close the ad before requesting for another ad (<placement id="" /> ). |
デバイスIDの確認。 | Debug | Publisher device id is <device id="" /> |
リクエストされた広告がキャッシュから戻されている途中。 | Returning ad from cache for the Placement Id - <placement id="" /> |
|
リクエストされた広告をネットワークから取得中。 | Ad will be fetched from network for the Placement Id - <placement id="" /> |
全画面ビデオ広告インテグレーション時のログ
シナリオ | ログ レベル | ログ |
SDKが初期化されていない場合。 | Error | Please initialize the SDK before creating an interstitial ad |
全画面ビデオ広告が読み込まれた場合。 | Debug | Fetching an interstitial ad for placement id: <placement id="" /> |
広告が正常に取得された場合。 | Debug | Interstitial ad successfully fetched for placement id: <placement id="" /> |
広告の取得に失敗した場合。 | Error | Failed to fetch interstitial ad for placement id: <placement id="" /> with error: <status code="" message="" /> |
Webビューで全画面ビデオ広告の読み込みが開始された場合。 | Debug | Started loading interstitial ad markup in the webview for placement id: <placement id="" /> |
全画面ビデオ広告が正常にWebビューに読み込まれた場合。 | Debug | Successfully loaded interstitial ad markup in the webview for placement id: <placement id="" /> |
Webビューに全画面ビデオ広告を読み込めなかった場合。 | Error | Failed to load interstitial markup in the webview for placement id: <placement id="" /> |
タイムアウトのためにWebビューに全画面ビデオ広告を読み込めなかった場合。 | Error | Failed to load interstitial markup in the webview due to timeout for placement id: <placement id="" /> |
全画面ビデオ広告が表示された場合。 | Debug | Successfully displayed Interstitial for placement id: <placement id="" /> |
全画面ビデオ広告が閉じられた場合。 | Debug | Interstitial ad dismissed for placement id: <placement id="" /> |
イベントリスナーが設定されていない場合。 | Error | The Ad unit cannot be created as no event listener was supplied. Please attach a listener to proceed |
コンストラクターにコンテキストが設定されていない場合。 | Error | Unable to create ad unit with NULL context object |
広告がReadyステータスになる前に表示しようとした場合。 | Error | Ad Load is not complete. Please wait for the Ad to be in a ready state before calling show The supplied resource id with show for animations is invalid |
InMobiAdActivityの追加不備。 | Error | Do not declare InMobiAdActivity in manifest file. |
SDKから出力されたログに加えて、テストモードでの[診断]タブ上に表示される情報をSDKの実装及びデバッグに役立てることができます。