動画リワード広告

動画リワード広告は、15秒程度のスキップ不可能な動画広告です。ユーザーの同意の元、バーチャル グッズやゲーム内ギフトなどの利益(リワード)と引き換えに視聴します。ブランドマーケティング担当者に好まれるこれらの動画リワード広告は、アプリ内ショップ、ゲームの開始と終了時等での表示に適しており、リワードによって、ユーザーが継続的にアプリを使用し続けることを促します。リワードはビ動画広告視聴完了時にのみ付与されるので、広告主にとっては良質のユーザーを、そしてパブリッシャーには高いeCPMを提供することができます。

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

動画リワード広告の設定

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

ユーザーが動画広告視聴を完了した時点で、SDKのコールバックによって提供されるリワードの詳細情報となるキーと値のペアを入力できます。例えば、以下の様なリワード詳細を入力できます。
Key(キー) = Coins
Value(値) = 1000
注意: InMobi SDKはどのような場合もコールバックを提供します。そこで、ここには何も入力せず、お客様のアプリのコード上でリワードを完全にコントロールすることも可能です。

動画リワード広告のアプリへの追加

動画リワード広告の作成

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

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

ここで、 mInterstitialAdEventListener は、InterstitialAdEventListener抽象クラスの実装です。インタースティシャル広告を作成するにはこのインターフェースの実装が必須です。

注意:

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

InterstitialAdEventListener 抽象クラスを使用すると、インタースティシャル広告のキーライフサイクルイベントを聴くことができます。これらのイベントリスナーを介してお客様のアプリケーションがさまざまなライフサイクルトランジションを正しくハンドルしていることを確認する必要があります。

   /**
* 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();
	

InterstitialAdListener2イベントインターフェースによりこのメソッドの結果が知らされます。広告リクエストに成功した場合は、onAdReceived(InMobiInterstitial)イベントが生成されます。次に、onAdLoadSucceededイベントかonAdLoadFailedイベントが生成されます。

onAdLoadFailedイベントが生成された場合、このイベントのInMobiAdRequestStatusオブジェクトにより理由が示されます。

onAdLoadSucceededイベントが生成された場合、これ以降はいつでも InMobiInterstitialインスタンス上のshow()を呼び出すことにより広告を表示できます。

注意: onAdLoadSucceededイベントが生成されたあとで、同じインタースティシャル広告上でload()を呼び出しても、ネットワークからの新しい広告のリクエストは保証されません。新しい広告が取得されるのは、以前の広告をSDKが廃棄した場合、広告の有効期限が切れた場合、またはユーザーがアプリケーションのデータやキャッシュをクリアした場合のみです。

動画リワード広告の表示

動画リワード広告を表示するには、SDKが onAdLoadSucceededイベントを生成した後、任意のタイミングでInMobiInterstitialインスタンス上でshow()を呼び出してください。

以下、コード例です。

 InterstitialAdListener2 mInterstitialListener = new InMobiInterstitial.InterstitialAdListener2() {
        // 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, mInterstitialListener);
   }
   void prepareGameLevel() {
       interstitialAd.load();
   }
   void handleGameLevelCompleted() {
        If (mCanShowAd) interstitialAd.show();
   }
	

InterstitialAdListener2インターフェースによりこのリクエストの結果が知らされます。

コード上、広告を表示できる場合、SDKは onAdWillDisplayインタフェース上に呼び出し、続いて、その広告が実際に画面上に表示されている場合はonAdDisplayed メソッドを呼び出すことで状態を通知します。

広告が表示できない場合は、SDKが onAdDisplayFailedイベントを生成して、お客様のアプリケーションに広告を表示できなかったことを知らせます。このイベントに対処するために、load()を再度呼び出すことで新しい広告をリクエストできます。

動画リワード広告が閉じられる場合は、お客様のアプリケーションの onAdDismissedコールバックに通知されます。

アニメーション

このプロセスで使用するアニメーションリソースIDを供給することでインタースティシャル広告の表示と非表示をアニメーション化できます。これは、以下の show(int, int)を呼び出すだけで実行できます。

interstitialAd.show(R.anim.anim_entry, R.anim.anim_exit);
	

報酬でコールバックを実装する

動画リワード広告については、SDKは、お客様がInMobiポータルで設定したメタデータを渡しながら onAdRewardActionCompletedイベントを生成します。このイベントは以下の方法で処理できます。

    InterstitialAdEventListener mInterstitialAdEventListener = new InterstitialAdEventListener() {
        // implementation for other events
        // onAdLoadSucceeded, onAdDisplayed, etc
        @Override
        public void onRewardsUnlocked(InMobiInterstitial inMobiInterstitial, Map<Object, Object> map) {
            Log.d(TAG, "Ad rewards unlocked!");
            for (Object key : map.keySet()) {
                Object value = map.get(key);
                Log.v(TAG, "Unlocked " + value + " " + key);
            }
        }
    };
	

こちら、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の実装及びデバッグに役立てることができます。