インタースティシャル広告はアプリ フローの固有のブレークポイントに置かれるフルページ広告です。バナー広告と比較して 10 倍のスペースを有するインタースティシャルは、ユーザーの目を引き、お客様のモバイル ビジネスの収益を高めることが保証されています。
以下の手順に従い、インタースティシャル広告での収益化を開始してください。
インタースティシャル広告を作成するために、以下の InMobiInterstitial
のインスタンスを作成します。
InMobiInterstitial interstitialAd = new InMobiInterstitial(InterstitialAdsActivity.this, 1471550843414L, mInterstitialAdEventListener);
こちらの mInterstitialAdListener
はInterstitialAdListener2
インターフェースを実装したものです。インタースティシャル広告を作成するにはこのインターフェースの実装が必須です。
注意:
InMobiInterstitial
クラスはスレッドセーフではありません。インタースティシャルインスタンスはUIスレッド上で作成しなければなりません。InterstitialAdEventListener <!-- code-->抽象クラスを使用すると、インタースティシャル広告のキーライフサイクルイベントを聴くことができます。これらのイベントリスナーを介してお客様のアプリケーションがさまざまなライフサイクルトランジションを正しくハンドルしていることを確認する必要があります。
/**
* 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, object=""> params) {}
</object,>/** * 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,>
インタースティシャル広告をリクエストするには、 InMobiInterstitial
インスタンス上でload()
メソッドを呼び出します。
interstitialAd.load();
InterstitialAdEventListener
抽象クラスは、このメソッドの結果を通知します。広告リクエストに成功した場合は、onAdReceived(InMobiInterstitial)
イベントが生成されます。次に、onAdLoadSucceeded
イベントかonAdLoadFailed
イベントが生成されます。
onAdLoadFailed
イベントが生成された場合、このイベントのInMobiAdRequestStatus
オブジェクトにより理由が示されます。
onAdLoadSucceeded
イベントが生成された場合、これ以降はいつでも InMobiInterstitial
インスタンス上のshow()
を呼び出すことにより広告を表示できます。
注意: 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 <!-- code-->抽象クラスを介して通知します。
コード上、広告を表示できる場合、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=""></account> |
パブリッシャーが無効なアカウント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=""></list> |
より新しいバージョンの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=""></placement> ). |
ユーザーが広告を閲覧中に別の広告がリクエストされた場合。 |
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=""></placement> ). |
デバイスIDの確認。 | Debug | Publisher device id is <device id=""></device> |
リクエストされた広告がキャッシュから戻されている途中。 | Returning ad from cache for the Placement Id - <placement id=""></placement> |
|
リクエストされた広告をネットワークから取得中。 | Ad will be fetched from network for the Placement Id - <placement id=""></placement> |
インタースティシャル広告インテグレーション時のログ
シナリオ | ログ レベル | ログ |
SDKが初期化されていない場合。 | Error | Please initialize the SDK before creating an interstitial ad |
インタースティシャル広告が読み込まれた場合。 | Debug | Fetching an interstitial ad for placement id: <placement id=""></placement> |
広告が正常に取得された場合。 | Debug | Interstitial ad successfully fetched for placement id: <placement id=""></placement> |
広告の取得に失敗した場合。 | Error | Failed to fetch interstitial ad for placement id: <placement id=""></placement> with error: <status code="" message=""></status> |
Webビューでインタースティシャル広告の読み込みが開始された場合。 | Debug | Started loading interstitial ad markup in the webview for placement id: <placement id=""></placement> |
インタースティシャル広告が正常にWebビューに読み込まれた場合。 | Debug | Successfully loaded interstitial ad markup in the webview for placement id: <placement id=""></placement> |
Webビューにインタースティシャル広告を読み込めなかった場合。 | Error | Failed to load interstitial markup in the webview for placement id: <placement id=""></placement> |
タイムアウトのためにWebビューにインタースティシャル広告を読み込めなかった場合。 | Error | Failed to load interstitial markup in the webview due to timeout for placement id: <placement id=""></placement> |
インタースティシャル広告が表示された場合。 | Debug | Successfully displayed Interstitial for placement id: <placement id=""></placement> |
インタースティシャル広告が閉じられた場合。 | Debug | Interstitial ad dismissed for placement id: <placement id=""></placement> |
イベントリスナーが設定されていない場合。 | 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の実装及びデバッグに役立てることができます。