全画面動画広告

全画面動画広告は、高いeCPMでの収益化が期待できる15~30秒程度のスキップ可能な動画広告です。ブランドやゲーム開発者に好まれる動画広告は、ステージクリア/レベル上昇時の待ち時間、PVP(オンライン対人型)ゲームの待ち時間に最適です。動画広告は視覚、聴覚に加え、動的な表現力を活用してユーザーを夢中にさせる様なアプリ内広告の体験を提供できます。

動画広告を実装するには、まずインタースティシャル広告プレースメントを作成する必要があります。いったんインタースティシャル広告プレースメントを作成すると、InMobiポータルから静止画広告と動画広告の組み合わせか、動画のみの広告を表示するかのどちらかをコントロールできます。

また、より高度な動画コントロールとして、ユーザがWifi接続時にのみ動画広告を表示したり、スキップ可能な動画広告のみを表示したりといった設定が可能です。

以下の手順に従い、動画広告での収益化を開始してください。

全画面動画広告の設定

  1. 全画面動画広告を表示するには、インタースティシャルプレースメントIDが必要です。
  2. アプリを追加してから、インタースティシャル広告を選択して広告タイプ インタースティシャル向けのプレースメントを作成します。
  3. プレースメントの作成に成功したら、プレースメントIDが使用可能になります。

全画面動画広告のアプリへの追加

全画面動画広告の作成

全画面動画広告を作成するために、以下の InMobiInterstitialのインスタンスを作成します。

InMobiInterstitial interstitialAd = new InMobiInterstitial(InterstitialAdsActivity.this, 1471550843414L, mInterstitialAdListener);
	

こちらの mInterstitialAdListenerInterstitialAdListener2インターフェースを実装したものです。全画面動画広告を作成するにはこのインターフェースの実装が必須です。

注意:

  • InMobiInterstitialクラスはスレッドセーフではありません。インタースティシャルインスタンスはUIスレッド上で作成しなければなりません。
  • 同様に、このインスタンスのすべてのメソッドはUIスレッド上で呼び出す必要があります。そうしないと予測不能の動作が発生して、InMobiでの収益化に影響を及ぼす恐れがあります。

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()}. <p class="note"><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.</p>
    *
    * @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, 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) {}
}
	

全画面動画広告の読み込み

全画面動画広告をリクエストするには、 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

時には、広告品質のチェックをすべて逃れた不正な広告主様が、無関係で不快なものや混乱するものをユーザーに表示することで、アプリのユーザーエクスペリエンスを損なうことになります。 このような状況への対応策として、広告インスタンスのcreativeIDを取得し、InMobiの連絡先に暗号化されたクcreativeIDでレポートし直します。

mInterstitialAd.getCreativeId()// mInterstitialAdはサンプルインスタンスです。

インテグレーションのテスト

  1. InMobiポータルでテストモードを設定します。

    [ツール] - [診断]に進み、テストモードを グローバルオンセレクティブオンのどちらかに切り替えます。

    アプリに対する広告インテグレーションが初めての場合 テストモードグローバルオンに設定します。
    特定のテスト用端末にのみテスト用広告を配信したい場合 -

    アプリに対して既にSDKを実装済みで、特定の更新部分などのテストをテスト用の端末に限定して実施する必要がある場合。
    テストモードセレクティブオンに設定します。

    デバイスセクションでテスト端末を登録します。

    1. デバイスIDボックスに、デバイスIDを入力します。
    2. デバイス名ボックスで、任意の名前を設定します。
    3. [デバイスを追加]をクリックしてテスト端末を追加登録します。

    すでに登録済みのデバイスがある場合は、その端末を選択し、テストモードを有効に設定できます。

    注意: テスト完了後、本番稼働する前にテストモードをオフにしなければなりません。そうしないと、お客様のアプリは収益化できません。

    これで、テスト広告を取得するための準備が整いました。

    デバイスIDの確認方法

    ここでのデバイスIDは Google Play Advertising ID (GPID)を指します。デバイスIDを取得するために、コンソールに対してデバッグログを出力するようにSDKを設定します。以下の行をバナー広告をインテグレーションしているアクティビティに追加することで設定できます。

    InMobiSdk.setLogLevel(LogLevel.DEBUG);
    		

    これでデバイスIDはDDMSコンソール内にデバッグログで出力されます。

  2. [診断]タブ上でテストモード時の広告ユニット別のレポート値を確認できます。実装が正しく行われたか確認するのに役立ちます。

デバッグに役立つ情報

ステップ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 of permissions granted>
より新しいバージョンの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の実装及びデバッグに役立てることができます。