ネイティブ広告

InMobiネイティブ広告は、アプリのコンテンツにシームレスに調和することによって、ユーザーにより良い印象や体験を提供できます。アプリのデザインに最も合うレイアウトを選択し、カスタマイズすることができます。ニュース、ユーティリティー、コミュニケーション系のアプリにとっては理想的な広告フォーマットです。

InMobiネイティブ広告は、動画、静止イメージのどちらにも対応できます。プレースメントに応じて以下の選択が可能です。

  • インフィード広告 - ミュートされた自動再生のHD動画またはシンプルな静止イメージ広告です。
  • スプラッシュ広告 - アプリの起動画面にブレンドし、バックグラウンドでのアプリの読み込み時にユーザー時間を収益化します。これらの広告も、ミュートされた自動再生のHD動画広告またはシンプルな静止イメージ広告になります。

静的フィード広告

インフィード動画広告

スプラッシュ動画広告

以下の手順に従い、ネイティブ広告での収益化を開始してください。

ネイティブ広告プレースメントの設定

  1. ネイティブコンテンツプレースメントを作成します。

  2. インフィード動画広告プレースメント

    1. STREAM(ストリーム)をネイティブ広告レイアウトとして選択します。

    2. インフィード動画の場合、アスペクト比256:135または16:9のいずれかを選択します。どちらのアスペクト比も、同様のアスペクト比で有効にされたデフォルトの静的ネイティブフォールバックを有します。


    静的フィード広告プレースメント

    1. FEED(フィード)をネイティブ広告レイアウトとして選択します。

    2. インテグレーションコードで、nativeAd.getPrimaryViewOfWidth(context,convertView, parent, width);を確認してください。
      primaryViewの取得時にwidth = 25を指定します。AdChoicesアイコンが表示され、広告レンダリングイベントが発生します。


    スプラッシュ動画広告プレースメント

    • オプション1 - 320*568スプラッシュ広告の場合:

      SPLASH(スプラッシュ)をネイティブ広告レイアウトとして選択します。

    • オプション2 - 320*480スプラッシュ広告の場合:
      1. STREAM(ストリーム)をネイティブ広告レイアウトとして選択します。

      2. アスペクト比2:3を選択します。この場合、同様のアスペクト比で有効にされたデフォルトの静的ネイティブフォールバックを有します。

ネイティブ広告のアプリへの追加

ネイティブ広告の作成

ネイティブ広告を作成するために、以下の InMobiNativeインスタンスを作成します。

public class NativeAdsActivity extends Activity {
private final List<InMobiNative> mNativeAds = new ArrayList<>();
InMobiNative nativeAd = new InMobiNative(NativeAdsActivity.this, YOUR_PLACEMENT_ID, nativeAdEventListener);
nativeAd.load();
mNativeAds.add(nativeAd);
	

ここで、 nativeAdEventListenerは、NativeAdEventListener抽象クラスを実装しています。ネイティブ広告を作成するにはこのインターフェースの実装が必須です。

必須:Context実装をInMobiNativeコンストラクタに提供する必要があります。

NativeAdListener インターフェースを使用すれば、ネイティブ広告の重要なライフサイクルイベントにリスナーを設定できます。

  • inMobiNative は常に強力な参照である必要があります。そうしないと、この参照に対してコールバック(ロード成功、ロード失敗など)を受け取れない可能性があります。
  • inMobiNative が任意の変数によって参照されている場合は、それが強力な参照であることを確認してください。
  • androidプロファイラを使用して、ガベージコレクションのために inMobiNative が削除されないようにします。

NativeAdEventListener抽象クラスを使用すると、ネイティブ広告のキーライフサイクルイベントを聴くことができます。

/**
* A listener for receiving notifications during the lifecycle of a Native ad.
*/
public abstract class NativeAdEventListener {
/**
* Called to indicate that an ad is available in response to a request for an ad (by calling
* {@link InMobiNative#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(InMobiNative)} 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 InMobiNative#isReady()} method.</p>
*
* @param ad Represents the {@link InMobiNative} ad for which ad content was received
*/
public void onAdReceived(InMobiNative ad) {}
/**
* 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(InMobiNative)} callback.
*
* @param ad Represents the {@link InMobiNative} ad which was loaded
*/
   public void onAdLoadSucceeded(InMobiNative ad) {}
   /**
    * Called to notify that a native ad failed to load.
    *
    * @param ad  Represents the {@link InMobiNative} ad which failed to load
    * @param requestStatus Represents the {@link InMobiAdRequestStatus} status containing error reason
    */
   public void onAdLoadFailed(InMobiNative ad, InMobiAdRequestStatus requestStatus) {}
   /**
    *
    * @param ad  Represents the {@link InMobiNative} ad whose fullscreen was dismissed
    */
   public void onAdFullScreenDismissed(InMobiNative ad) {}
   /**
    * Called to notify that the ad will open an overlay that covers the screen.
    *
    * @param ad Represents the {@link InMobiNative} ad which will go fullscreen
    */
   public void onAdFullScreenWillDisplay(InMobiNative ad) {}
   /**
    * Called to notify that the ad opened an overlay that covers the screen.
    *
    * @param ad Represents the {@link InMobiNative} ad whose fullscreen will be displayed
    */
   public void onAdFullScreenDisplayed(InMobiNative ad) {}
   /**
    * Called to notify that the user is about to leave the application as a result of interacting with it.
    *
    * @param ad Represents the {@link InMobiNative} ad
    */
   public void onUserWillLeaveApplication(InMobiNative ad) {}
   /**
    * Called to notify impression has been recorded for this ad. <b>Note:</b>Override this method to notify
    * viewable impression to the Mediation Adapter.
    *
    * @param ad Represents the {@link InMobiNative} ad for which impression is recorded.
    */
   public void onAdImpressed(InMobiNative ad) {}
   /**
    * Called to notify ad was clicked. <b>Note:</b>Override this method to notify click to the Mediation Adapter.
    *
    * @param ad Represents the {@link InMobiNative} ad which was clicked
    */
   public void onAdClicked(InMobiNative ad) {}
   /**
    * Called to notify that the ad status has changed.
    *
    * @param nativeAd Represents the {@link InMobiNative} ad
    */
   public void onAdStatusChanged(InMobiNative nativeAd) {}
}
	

VideoEventListener抽象クラスを使用すると、ネイティブ広告の動画ライフサイクルイベントを聴くことができます。

/**
* A listener for receiving notifications during the lifecycle of a Native ad.
*/
public abstract class VideoEventListener {
   /**
    * Called to notify that the video has finished playing.
    *
    * @param ad Represents the {@link InMobiNative} ad
    */
   public void onVideoCompleted(InMobiNative ad) {
   }
   /**
    * Called to notify that the user has skipped video play.
    *
    * @param ad Represents the {@link InMobiNative} ad
    */
   public void onVideoSkipped(InMobiNative ad) {
   }
   /**
    * Called to notify when media audio state changes.
    *
    * @param isMuted Represents whether media is muted or not.
    */
   public void onAudioStateChanged(InMobiNative inMobiNative, boolean isMuted) {
   }
}
	


ネイティブ広告の読み込み

ネイティブ広告をリクエストするには、上記で作成した InMobiNativeインスタンス上でload()メソッドを呼び出します。

nativeAd.load();
	

NativeAdEventListener抽象クラスは、このメソッドの結果を通知します。 広告リクエストが成功した場合は、 onAdReceived(InMobiNative)イベントが生成されます。 その後にonAdLoadSucceededまたはonAdLoadFailedイベントが続きます。 onAdLoadFailedイベントが発生した場合、その理由はこのイベントで渡されたInMobiAdRequestStatusオブジェクトによって示されます。


ビデオイベントを聞く

上記で作成した InMobiNative インスタンスに、メソッド setVideoEventListener (VideoEventListener videoEventListener )を使用してビデオイベントを受け取るには、 videoEventListener

nativeAd.setVideoEventListener(videoEventListener);
	

VideoEventListener 抽象クラスは、ネイティブ広告のビデオイベントについて通知します。


ネイティブ広告API

以下は InMobiNativeの重要なAPIであり、広告をステッチ(生成)する際に役立ちます。

  • View getPrimaryViewOfWidth(context, convertView, parent, width) - 指定された幅のビューを返します(実際のピクセルで指定されます)。これはネイティブ広告のメインの広告コンテンツです。ネイティブプレースメントの作成時にInMobiダッシュボードで選択したのと同じアスペクト比のビューを返します。このプライマリビューが画面に表示されると、すべてのインプレッションレンダリングイベントも自動的に発生します。

    プレースメントの作成中にフィードレイアウトを選択した場合は、 primaryViewの取得時にwidth = 25を指定します。AdChoicesアイコンが表示され、広告レンダリングイベントが発生します。

    getPrimaryViewOfWidth(..) 以下の4つのパラメータを取り込みます。

    • context - 広告のレンダリング時のコンテキスト。
    • convertView - これはListViewの行の完全なビューです。このパラメータは広告の効果的なリサイクルに使用するため、この値をNULLとして指定しないでください。これにより、スムーズなスクロールパフォーマンスが可能になります。
    • parentView - これは親ビューであり、その中に(getPrimaryViewOfWidth()関数によって返される)primaryViewが配置されます。プライマリビューのレイアウトパラメータを決定する際に必要です。
    • adViewWidthInPixels - これは、primaryViewが占有する幅(ピクセル単位)です。
  • String getAdTitle() - 広告の文字列のタイトルを返します。
  • String getAdDescription() - 広告の文字列の説明を返します。
  • String getAdIconUrl() - 広告のイメージ文字列URLを返します。
  • String getAdCtaText() - 広告のClick to action文字列を返します。
  • String getAdRating() - 広告の評価を返します(オプション)。
  • String getAdLandingPageUrl() - 広告のランディングURLを返します。
  • boolean isAppDownload - フィーチャード(商品紹介)広告がアプリインストール広告主からのものである場合はtrueを返します。
  • boolean isReady() - trueは、広告を表示する準備が完了していることを意味します。
  • Boolean isVideo() - 返された広告に動画が含まれているか含まれていない場合はbooleanを返し、間違った状態で呼び出された場合はnullを返します。
  • void reportAdClickAndOpenLandingPage() - この関数はクリックイベントを発生させ、ランディングページを開きます。この関数の使用中はランディングページを自分で開く必要はありません。
  • JSONObject getCustomAdContent() - この関数はJSONObjectを返します。このjsonには、広告のプライマリビューの周囲にカスタムUIを作成する際に使用できる追加情報(説明、イメージURLなど)が含まれています。


ネイティブ広告の生成

ネイティブ広告は、以下の3種類の形式でアプリ内にステッチ(生成)できます。

  • インフィード広告
  • スプラッシュ広告
  • プレロール広告

インフィード広告インテグレーション
  1. 広告を表示する際のフィード内の位置を宣言します。

    例えば、4番目の位置に広告を表示する場合:

    private static final int AD_POSITION = 4;
    		
  2. 広告の読み込みが成功した場合は、onAdLoadSucceeded(InMobiNative)コールバックを取得します。次に、このリスナー内のデータソースにInMobiNativeAdオブジェクトを追加する必要があります。アプリのフィードがListViewの場合、ListViewのサンプル実装は以下のようになります。
    @Override
           public void onAdLoadSucceeded(@NonNull InMobiNative nativeAd) {
    		AdFeedItem nativeAdFeedItem = new AdFeedItem(nativeAd);
    		mFeedItems.add(AD_POSITION, nativeAdFeedItem);
    		mFeedAdapter.notifyDataSetChanged();
           }
    		

    上記のステップ中、 AdFeedItemFeedItemクラスの拡張クラスです。ここで、FeedItemListViewの各行に対応するクラスです。また、mItemsArrayListです。これはこのListViewのアダプタに対応します。

  3. これで、広告が読み込まれ、データソースに追加されました。次に、広告を表示します。ListViewのサンプル実装を以下に示します。
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
       final int itemViewType = getItemViewType(position);
       if (itemViewType == VIEW_TYPE_CONTENT_FEED) {
    		//Your app code
       } else {
    	//Since this content type is InMobi Ad, you need to get native Ad view		
           final InMobiNative nativeAd = ((AdFeedItem) feedItem).mNativeAd;
    	View primaryView = nativeAd.getPrimaryViewOfWidth(context, convertView, parent, parent.getWidth());
    		       if(convertView==null){
              convertView = mLayoutInflater.inflate(R.layout.ad_item, parent, false);
           }
                            ((RelativeLayout)convertView.findViewById(R.id.primaryView)).addView(primaryView);
          ((TextView)convertView.findViewById(R.id.title)).setText(nativeAd.getTitle());
          ((TextView)convertView.findViewById(R.id.desc)).setText(nativeAd.getDescription());
          ((TextView)convertView.findViewById(R.id.cta)).setText(nativeAd.getCtaText());
           return convertView;
       }
    }
    		

    関数 getItemViewType(position)は、以下のようにコンテンツタイプがフィードであるか広告であるかをチェックします。

    @Override
    public int getItemViewType(int position) {
       FeedItem feedItem = getItem(position);
       if (feedItem instanceof AdFeedItem) {
           return VIEW_TYPE_INMOBI_STRAND;
       }
       return VIEW_TYPE_CONTENT_FEED;
    }
    		

    ここでは上記のセクションで説明したAPIの一部を使用して、広告のタイトル、説明、およびCTAテキストを表示しました。同様に、広告の対応する部分を他のAPIを使用して表示することもできます。


スプラッシュインテグレーション

スプラッシュエクスペリエンスは、同じInMobiNativeクラスを使用して実装できます。ただし、注意すべき点がいくつかあります。

  • InMobiNativeAd.isReady()関数を使用して、広告の表示の準備が完了しているかどうかを判断する必要があります。メインスレッドが占有されていて、時間どおりにonAdLoadSucceededを受信できない場合もあります。このため、カットオフ時間が経過した直後に広告が準備完了になっているかどうかをプロアクティブにチェックするのが得策です。
  • 重要事項:広告の2番目の画面が表示されている場合は、広告を破棄または更新しないでください。onAdFullScreenDisplayedでこれをチェックし、このコールバックが発生した場合は広告を閉じることはできません。

サンプル実装を以下に示します。

@Override
public void onAdFullScreenDisplayed(InMobiNative nativeAd) {
	isSecondScreenDisplayed = YES;
}
public void dismissAd() {
   if(isSecondScreenDisplayed){
       Log.d(TAG, "DO NOT DISMISS THE AD WHILE THE SCREEN IS BEING DISPLAYED");
   }
   else
   {
	splashAdView.setVisibility(View.GONE);
	nativeAd.destroy();
   }
}
	

プレロールインテグレーション

プリロールビデオ体験は、同じ InMobiNative クラスを使用して実装できます。 videoEventListener を登録する必要があり、次のコールバックで広告ビューを閉じる必要があります。

@Override
public void onVideoCompleted(@NonNull InMobiNative nativeAd) {
	Log.d(TAG, "Media playback complete " + mPosition);
}
	

プレロール広告は、以下のように閉じることができます。

public void dismissAd() {
	splashAdView.setVisibility(View.GONE);
	nativeAd.destroy();
}
	


ネイティブ広告の更新

ユーザーへの広告の表示を最適化するには、さまざまな時点で広告を更新する必要があります。広告を更新するには、以下の関数を正確な順序で呼び出す必要があります。

注意:adFeedItemオブジェクトをデータソースから削除し、更新する前にそれを破棄することが重要です。以下のコードに示すように、新しいオブジェクトを作成してloadを呼び出す必要があります。

private void refreshAd() {
       Iterator<FeedItems> feedItemIterator = mFeedItems.iterator();
       while (feedItemIterator.hasNext()) {
           final FeedItem feedItem = feedItemIterator.next();
           if (feedItem instanceof AdFeedItem) {
               feedItemIterator.remove();
           }
       }
       // refresh feed
       mFeedAdapter.notifyDataSetChanged();
       // destroy InMobiNative object
       inMobiNativeAd.destroy();
       // create InMobiNative object again
	InMobiNative inMobiNativeAd = new InMobiNative(
	<<Activity Instance>>,
	<<Your Placement ID>>,
	<<InMobiNativeAdListener created in step 1>>);
	inMobiNativeAd.load();
}
	


InMobiNativeインスタンスの管理

  1. InMobiNativeの全インスタンスは広告を1つだけ表示します。
  2. コンテンツフィード内の複数のポジションに広告を配置する場合は、広告のポジションの数と同じ数のInMobiNativeのインスタンスを作成します。
  3. アクティビティのonCreate()コールバックかフラグメントのonActivityCreated()コールバックで InMobiNativeのインスタンスを作成する必要があります。
  4. アクティビティのonDestroy()コールバックかフラグメントのOnDestroyView()コールバックでInMobiNative インスタンスを破棄する必要があります。
  5. InMobiNativeAdオブジェクトをデータソースから削除したら、必ず破棄する必要があります。InMobiNativeAdが破棄された後では、すべてのユーザーの広告ビューとのインタラクションは許可されません。そこで、InMobiNativeAdを破棄する前に広告ビューを確実に廃棄する必要があります。
  6. インスタンス(この場合、アクティビティ)をホストしているコンポーネントがdestroy() APIを使用して破棄されると、すべてのInMobiNativeAdインスタンスは破棄されます。


広告ビューでのクリックトラッキング

クリックの通知に加えて、InMobi SDKにランディングページを開かせるには、ネイティブ広告インスタンスで reportAdClickAndOpenLandingPage()を呼び出します。

nativeAd.reportAdClickAndOpenLandingPage();
	

ダウンローダインテグレーション(中国のトラフィックを収益化したい場合)

はじめに

中国ではGoogle Playが存在しないため、InMobi Downloaderと呼ばれるツールを通じてAPKの直接ダウンロードをサポートしています。この機能は、InMobi Android SDKの中国版でのみ利用できます。InMobi Downloaderは、広告主のアプリのダウンロードとインストールを管理します。これは、広告主にイベントを伝え、パブリッシャーおよびユーザーに特化したエクスペリエンスを提供しながらアトリビューションを実現します。

マニフェストファイルの変更

以下のように、新しいサービスをマニフェストファイルに追加する必要があります。

<service
	android:name="com.inmobi.ads.ApkDownloader$ApkDownloadService"
	android:enabled="true">
</service>
	

ダウンローダには、以下のように外部ストレージを書き込む権限が必要です。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
	

Android 7(Nougat以降)

ファイル共有の設計が変更されたため、Android N以降では新しい変更が必要になります。他のアプリはあなたのアプリのファイルにアクセスすることができないため、ここでダウンロードしたAPKファイルをインストールするにはPackageInstallerアプリが必要です。 ここを参照してください。

  • 追加 res/xml/provider.xml
    <?xml version="1.0" encoding="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
       <external-path name="external_files" path="."/>
    </paths>
    		
  • AndroidManifest.xmlに以下の内容を追加します。
    <provider
       android:name="android.support.v4.content.FileProvider"
       android:authorities="{appPackageName}.fileprovider"
       android:exported="false"
       android:grantUriPermissions="true">
       <meta-data
           android:name="android.support.FILE_PROVIDER_PATHS"
           android:resource="@xml/provider" />
    </provider>
    		
  • Android Oreo(8以降)の場合、AndroidManifest.xmlに以下の内容を追加します。
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    		

InMobi Downloaderの呼び出し

InMobiネイティブ広告オブジェクトを作成する際には、以下のようにダウンローダを有効にする必要があります。

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	InMobiNative nativeAd = new InMobiNative(
	<<Activity Instance>>,
	<<Your Placement ID>>,
	<<InMobiNativeAdListener>>);
	nativeAd.setDownloaderEnabled(true);
	nativeAd.load();
	//Your App code here
}
	

ダウンローダコールバックの取得

InMobi Downloaderは、 onAdStatusChanged()という名前のリスナーメソッドでコールバックを提供します。これは、ダウンローダの状態が変わるたびに発生します。ステータスにはgetDownloadStatus() メソッドを介してアクセスできます。考えられる状態およびそれに対応するステータスメッセージを以下に示します。

STATE_UNINITIALIZED = -2;
STATE_INITIALIZING = -1;
STATE_DOWNLOADING = 0;
STATE_DOWNLOADED = 1;
STATE_ERROR = 2;
	

ダウンローダがAPK( STATE_DOWNLOADING = 0)をダウンロードしている状態では、getDownloadProgress()メソッドを使用してダウンロードの進行状況にアクセスできます。この進行状況を使用して、ユーザーに進行状況バーを表示することができます。

注意:onAdStatusChanged()は、ダウンロード率が状態STATE_DOWNLOADING = 0内で変化するたびに発生することに注意してください。このサンプル実装を以下に示します。

public void onAdStatusChanged(@NonNull InMobiNative nativeAd) {
	Log.d("InMobi Downloader status is", "value: " + nativeAd.getDownloader().getDownloadStatus());
	if (nativeAd.getDownloader().getDownloadStatus() == InMobiNative.Downloader.STATE_DOWNLOADING) {
	progressBar.setProgress(nativeAd.getDownloader().getDownloadProgress());
	}  
}
	

バックフィルの実装

InMobiのSDKは、ネイティブプレースメントに対してHTMLとネイティブユニットの両方を実行できます。ネイティブプレースメント用に予約されているリソースに応じて、以下の広告サイズを実行できます。

  • 320x50 HTMLバナー
  • 300x250 HTMLバナー
  • 320x480 HTML全画面バナー
  • 320x568 HTML全画面バナー
これをオンに切り替えるには、希望のバックフィルサイズでそれぞれのパートナーマネージャーに接触する必要があります。また、以下のようにコード内でこれを処理する必要があります。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
   final int itemViewType = getItemViewType(position);
   if (itemViewType == VIEW_TYPE_CONTENT_FEED) {
		//Your app code
 	} 
   else {
   		//Since this content type is InMobi Ad, you need to get native Ad view
		final InMobiNative nativeAd = ((AdFeedItem) feedItem).mNativeAd;
		//Render according to the type of response served
		if(currentNativeAd.getCustomAdContent().has("isHTMLResponse")){	
			View primaryView = nativeAd.getPrimaryViewOfWidth(context, convertView, parent, Math.round(getResources().getDisplayMetrics().density*250));
 		   	if(convertView==null){
 	         		convertView = mLayoutInflater.inflate(R.layout.ad_item, parent, false);
 	       		}
			((RelativeLayout)convertView.findViewById(R.id.primaryView)).addView(primaryView);
			return convertView;
		} 
		else {
		 	View primaryView = nativeAd.getPrimaryViewOfWidth(context, convertView, parent, parent.getWidth());
		   	if(convertView==null){
	         		 convertView = mLayoutInflater.inflate(R.layout.ad_item, parent, false);
	       		}
		  	((RelativeLayout)convertView.findViewById(R.id.primaryView)).addView(primaryView);
		   	((TextView)convertView.findViewById(R.id.title)).setText(nativeAd.getTitle());
		   	((TextView)convertView.findViewById(R.id.desc)).setText(nativeAd.getDescription());
		   	((TextView)convertView.findViewById(R.id.cta)).setText(nativeAd.getCtaText());
		  	 return convertView;
   		}
	}
}
	

注意:

  • レスポンスがバックフィルであるかどうかを検出するために、customAdContentには文字列isHTMLResponseが含まれます。
  • HTMLバナーレスポンスの幅を調整しないでください。例えば、300x250のバックフィルを選択した場合は、指定された幅がハードコーディングされた250であることを確認してください。
  • バックフィルレスポンスの場合は、CTAボタンを追加しないでください。このボタンを広告の横に追加した場合、クリックは収益化されません。

取得CreativeID

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

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

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

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

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

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

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

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

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

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

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

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

    デバイスIDの取得

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

       InMobiSdk.setLogLevel(LogLevel.DEBUG);
    		

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

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

デバッグに役立つ情報

ステップ1で示した通りにデバッグログを有効にすると、SDKはデバッグに役立つログ情報をDDMSコンソールに出力します。

以下の表がこれらのログをキャプチャします。

SDK初期化

シナリオ ログレベル ログメッセージ
NULLまたは空白のアカウントIDを渡した場合。 エラー アカウントIDをNULLまたは空にすることはできません。有効なアカウントIDを入力してください。
有効なアカウントIDを渡した場合。 デバッグ アカウントIDで初期化されたInMobi SDK:<account id>
無効なアカウントIDを渡した場合。 エラー initに渡されたアカウントIDが無効です。有効なアカウントIDを入力してください。
パブリッシャーが必須許可を許可しなかった場合。 デバッグ 必須の権限を付与してください。NTERNET&ACCESS_NETWORK_STATE、SDKを初期化できませんでした。
現在設定されているパーミッション デバッグ SDKに出された許可は以下です。<List of permissions granted>
より新しいバージョンのSDKが入手可能な場合。 デバッグ InMobi SDKの新しいバージョン(ver.6.0.1)が利用可能です!現在は古い方のバージョンです(バージョン5.3.1)。最新のInMobi SDKを http://www.inmobi.com/products/sdk/#downloadsからダウンロードしてください

広告のライフサイクルで出力される主なログ

シナリオ ログレベル ログメッセージ
ネットワークが使用できない状況で広告がリクエストされた場合。 エラー 現在ネットワークにアクセスできません。もう一度お試しください。
広告が読み込み中または利用可能な状態のときに広告がリクエストされた場合。 エラー 広告の読み込みはすでに進行中です。読み込みの完了後、他の広告をリクエストしてください(Placement id:<placement id> )。
デバイスID デバッグ パブリッシャーのデバイスIDは、 <Device Id>です

ネイティブ広告インテグレーション時のログ

シナリオ ログレベル ログメッセージ
パブリッシャーがヌルコンテキストを提供した場合。 エラー ヌルアクティビティオブジェクトでは InMobiNative広告を作成できません。
パブリッシャーがSDKを初期化せずにネイティブ広告を作成した場合。 エラー ネイティブ広告を作成する前にSDKを初期化してください。
パブリッシャーが無効なプレースメントIDでインタースティシャルを作成した場合。 エラー NA
パブリッシャーがヌルを提供しました。 InMobiNativeAdListenerobject エラー 提供されたリスナーがヌルです。ネイティブ広告を作成できません。
パブリッシャーがネイティブへの読み込みを呼び出した場合。 デバッグ プレースメントIDのネイティブ広告を取得:<placement id>
広告がサーバーから正常に取得された場合。 デバッグ ネイティブ広告のプレースメントIDが正常に取得されました。<placement id>
広告の取得に失敗した場合。 エラー プレースメントIDのネイティブ広告を取得できませんでした:<Placement id> エラー:<Status code / message>
広告ビューが拡大されない場合。 デバッグ コンテナに読み込まれた広告マークアップがビューに拡大されます。

高度な設定

ロック画面広告

ロック画面インテグレーションの場合、広告をプリフェッチ(先読み)して、特定のアクティビティにそれらを結びつけたくない場合があります。InMobi SDKにより、 Applicationサブクラスで管理できるネイティブ広告ユニットを作成できます。アプリは、収益化イベントが発生するロック画面アクティビティでネイティブ広告ユニットを使用できます。

  • プリフェッチネイティブ広告:InMobiAdRequestを作成して、広告サーバーに特定のターゲット情報を提供します。
  • 以下に示すように、NativeAdRequestListenerインターフェースの実装を提供することにより、InMobiNative.requestAd(Context, InMobiAdRequest, NativeAdRequestListener)を呼び出します。
    public class YourApplication extends Application {
        ... 
        private InMobiAdRequest mInMobiAdRequest;
        private NativeAdRequestListener mListener;
        Private InMobiNative mNativeAd;
        ...
        public void onCreate() {
            mInMobiAdRequest = new InMobiAdRequest.Builder(PlacementId.YOUR_PLACEMENT_ID)
                    .build();
            mListener = new InMobiNative.NativeAdRequestListener() {
                @Override
                public void onAdRequestCompleted(InMobiAdRequestStatus status, InMobiNative nativeAd) {
                    if (status.getStatusCode() == NO_ERROR && nativeAd != null) {
                        mNativeAd = nativeAd;
                    } 
                }
            };
            InMobiNative.requestAd(this, mInMobiAdRequest, mListener);
            ...
        }
        public InMobiNative getNativeAd() {
            return mNativeAd;
        }
    }
    		
  • アクティビティで、getNativeAd()メソッドをApplicationサブクラスに呼び出すことにより、この広告ユニットのインスタンスを取得できます。

    showOnLockScreen(LockScreenListener lockScreenListener)を使用して、このネイティブインスタンスをlockscreenアクションに登録します。このリスナーは、ユーザーが広告とインタラクティブになるとすぐに呼び出されます。このインタラクションを完了するにはロック画面を閉じる必要があります。

    * このメソッドは、load(Context)またはload()の前に呼び出す必要があります。

  • load(Context)を呼び出して広告マークアップを読み込み、収益化イベントが発生するアクティビティを指定します。
  • 広告の読み込み後、アセットを取得するために、getAdContent()を呼び出して広告アセットをリクエストします。
    takeAction()

    このメソッドの呼び出しにより、ユーザーがLockscreenの広告ビューとインタラクションすることで発生するアクションが実行されます。このインタラクションは com.inmobi.ads.InMobiNative.LockScreenListener#onActionRequired(InMobiNative)によって報告されます。このメソッドは、android.content.Intent.ACTION_USER_PRESENTブロードキャストの後にアプリによって呼び出される必要があります。