バナー広告は画像 (静止画またはアニメーション) から構成され、ユーザーを Web サイトまたは関連するアプリ ストアに導くハイパーリンクを備えています。全てのタイプのアプリはバナー広告を使用して収益化が可能です。
以下の手順に従い、バナー広告での収益化を開始してください。
メソッド 1: XMLレイアウトファイルにバナーを追加します。
XMLでレイアウトファイルにバナー広告を追加し、その広告を通常のビューで参照するようにコードから参照します。
以下の例では、XMLでのバナー広告の追加方法を示しています。InMobi広告のネームスペースは上位レベルのレイアウトエレメントに追加する必要がある点にご注意ください。
<linearlayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context="com.inmobi.samples.BannerXMLActivity" xmlns:ads="http://schemas.android.com/apk/lib/com.inmobi.ads" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<textview android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/banner_xml_message">
<com.inmobi.ads.inmobibanner ads:placementid="1431977751489005" ads:refreshinterval="60" android:id="@+id/banner" android:layout_height="50dp" android:layout_width="320dp">
</com.inmobi.ads.inmobibanner></textview></linearlayout>
注:バナーXMLの統合の場合、Android SDK 720以降を使用しているサイト運営者は、次のように placementId
タグに「plid-」を追加する必要があります。
ads:placementId = "plid-1431977751489005"
これで、以下の様に、コードからバナーを参照できます。
InMobiBanner bannerAd = (InMobiBanner)findViewById(R.id.banner);
以下のセクションで示すように、バナーインスタンスを生成し、広告をリクエストします。
広告をリクエストする前に、メインアクティビティかバナー広告を表示しているアクティビティで InMobiSdk.init(Context, String)
メソッドを呼び出してInMobi SDKを初期化してください。
メソッド 2:コードでのバナーの追加
InMobiBanner
のインスタンスを作成します。
InMobiBanner bannerAd = new InMobiBanner(BannerAdsActivity.this, 1468078426600L);
注意:
InMobiBanner
クラスはスレッドセーフではありません。バナーインスタンスはUIスレッド上で作成しなければなりません。バナー広告を作成したら、その広告を以下の様にViewの階層に追加します。
RelativeLayout adContainer = (RelativeLayout) findViewById(R.id.ad_container);
RelativeLayout.LayoutParams bannerLp = new RelativeLayout.LayoutParams(640, 100);
bannerLp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
bannerLp.addRule(RelativeLayout.CENTER_HORIZONTAL);
adContainer.addView(bannerAd, bannerLayoutParams);
注意: バナー広告のレイアウトパラメーターを設定する際は、ピクセル単位でバナービューの寸法を指定する必要があります。また、バナー広告のレイアウトパラメーターとしてWRAP_CONTENT
を提供するのはプログラミングエラーです。この制約は XMLレイアウトファイルでバナーを作成していても、コードでバナーを作成していても適用されます。
スマホ用とタブレット用の両方向けて実装する場合は、バナーのレイアウトパラメーターとして MATCH_PARENT
を利用できます。InMobi SDKは、バナービューの寸法を正しく計算しなおして、広告を取得します。
バナー広告を読み込むためには、 InMobiBanner
インスタンスでの広告をリクエストする前にバナー広告ビューをビュー階層に追加する必要があります。ビューをビュー階層に追加すると、InMobi SDKがバナービューの寸法を正しく計算できるようになり、ネットワークからこれらの寸法に合っている最適な広告をリクエストできるようになります。
ビュー階層に InMobiBanner
を追加したら、 作成したインスタンス上にload()
を呼び出して広告をリクエストできるようになります。
InMobiBanner
インスタンス上でload()
を呼び出すことにより、初回の広告をリクエスト以降は、バナー広告が自動的に更新されます。自動更新はXMLレイアウトファイル作成時、またはコード上でsetRefreshInterval(int)
を実装することで設定できます。。
以下のサンプルでは、XMLでの実装方法を示しています。
<linearlayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context="com.inmobi.samples.BannerXMLActivity" xmlns:ads="http://schemas.android.com/apk/lib/com.inmobi.ads" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<textview android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/banner_xml_message">
<com.inmobi.ads.inmobibanner ads:placementid="plid-1431977751489005" ads:refreshinterval="60" android:id="@+id/banner" android:layout_height="50dp" android:layout_width="320dp">
</com.inmobi.ads.inmobibanner></textview></linearlayout>
バナーを更新する際に実行されるアニメーションスタイルを選択できます。また、オフにすることも設定できます。その場合は、バナーインスタンスの取得後に setAnimationType(InMobiBanner.AnimationType)
メソッドを呼び出し実装します。
注意: デフォルトのアニメーションはAnimationType.ROTATE_HORIZONTAL_AXIS
に設定されています。これをオフにする場合は、 setAnimationType
メソッドにAnimationType.ANIMATION_OFF
パラメーターを設定します。
バナーのライフサイクルで重要なイベントにリスナーを設定する場合は、 BannerAdListener
インターフェイスを実装する必要があります。次に、InMobiBanner
インスタンス上でsetListener(BannerAdListener)
メソッドを使用してこのリスナーを設定できます。各イベントの簡単な説明は以下の通りです。
/**
* A listener for receiving notifications during the lifecycle of a banner ad.
*/
public abstract class BannerAdEventListener {
/**
* Called to notify that an ad was successfully loaded.
* @param ad Represents the {@link InMobiBanner} ad which was loaded
*/
public void onAdLoadSucceeded(InMobiBanner ad) {}
/**
* Called to notify that a request to load an ad failed.
* @param ad Represents the {@link InMobiBanner} ad which failed to load
* @param status Represents the {@link InMobiAdRequestStatus} status containing error reason
*/
public void onAdLoadFailed(InMobiBanner ad, InMobiAdRequestStatus status) {}
/**
* Called to notify that the user interacted with the ad.
* @param ad Represents the {@link InMobiBanner} ad on which user clicked
* @param params Represents the click parameters
*/
public void onAdClicked(InMobiBanner ad, Map<object, object=""> params) {}
/**
* Called to notify that the banner ad was displayed
* @param ad Represents the {@link InMobiBanner} ad which was displayed
*/
public void onAdDisplayed(InMobiBanner ad) {}
/**
* Called to notify that the User is about to return to the application after closing the ad.
* @param ad Represents the {@link InMobiBanner} ad which was closed
*/
public void onAdDismissed(InMobiBanner ad) {}
/**
* Called to notify that the user is about to leave the application as a result of interacting with the ad.
* @param ad Represents the {@link InMobiBanner} ad
*/
public void onUserLeftApplication(InMobiBanner ad) {}
/**
* Called to notify that a reward was unlocked.
* @param ad Represents the {@link InMobiBanner} ad for which rewards was unlocked
* @param rewards Represents the rewards unlocked
*/
public void onRewardsUnlocked(InMobiBanner ad, Map<object, object=""> rewards) {}
}
</object,></object,>
こちら、GitHubでバナー広告インテグレーションのコードサンプルを確認できます。
時には、広告品質のチェックをすべて逃れた不正な広告主様が、無関係で不快なものや混乱するものをユーザーに表示することで、アプリのユーザーエクスペリエンスを損なうことになります。 このような状況への対応策として、広告インスタンスのcreativeIDを取得し、InMobiの連絡先に暗号化されたクcreativeIDでレポートし直します。
mBannerAd.getCreativeId() // mBannerAd
はサンプルインスタンスです。
[ツール] - [診断]に進み、テストモードを グローバルオンかセレクティブオンのどちらかに切り替えます。
アプリに対する広告インテグレーションが初めての場合 | テストモードをグローバルオンに設定します。 |
特定のテスト用端末にのみテスト用広告を配信したい場合 - アプリに対して既に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="" /> |
パブリッシャーが無効なアカウント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 a Banner ad |
プレースメントIDが無効またはNULL値でバナーを作成した場合。 | Error | |
無効なプレースメントIDでIB/xml からバナーが読み込まれた場合。 | Error | Placement id value supplied in XML layout is not valid. Banner creation failed. |
XMLで作成されたバナーにプレースメントIDがありません。 | Error | Placement id value is not supplied in XML layout. Banner creation failed. |
バナー広告が読み込まれた場合。 | Debug | Fetching a Banner ad for placement id: <placement id="" /> |
広告が正常に取得された場合。 | Debug | Banner ad successfully fetched for placement id: <placement id="" /> |
広告の取得に失敗した場合。 | Debug | Failed to fetch interstitial ad for placement id: <placement id="" /> with error: <status code="" message="" /> |
Webビューでバナー広告の読み込みが開始された場合。 | Debug | Started loading Banner ad markup in the webview for placement id: <placement id="" /> |
バナー広告が正常にWebビューに読み込まれた場合。 | Debug | Successfully loaded banner ad markup in the webview for placement id: <placement id="" /> |
Webビューにバナー広告を読み込めなかった場合。 | Debug | NA <placement id="" /> |
バナー広告の更新を開始した場合。 | Debug | Initiating Banner refresh for placement id: <placement id="" /> |
プレースメントIDが無効な場合。 | Error | Placement id value supplied in XML layout is not valid. Banner creation failed. |
更新インターバルの値が無効な場合。 | Debug | Refresh interval value supplied in XML layout is not valid. Falling back to default value. |
コンテキストがNULLの場合。 | Error | Context supplied as null, the ad unit can't be created. |
レイアウトパラメーターが設定されていない場合。 | Error | The layout params of the banner must be set before calling load |
高さや幅がWRAP_CONTENTに設定されている場合。 | Error | The height or width of a Banner ad can't be WRAP_CONTENT |
高さか幅が設定されていない場合。 | Error | The height or width of the banner cannot be determined |
リスナーがNULLの場合。 | Error | Please pass a non-null listener to the banner. |
SDKから出力されたログに加えて、広告ユニットと広告リクエストの[診断]タブ上にフィードバックを取得することもできますが、これはインテグレーションの間に特に役立ちます。