InMobiネイティブ広告は、アプリのコンテンツにシームレスに調和することによって、ユーザーにより良い印象や体験を提供できます。アプリのデザインに最も合うレイアウトを選択し、カスタマイズすることができます。ニュース、ユーティリティー、コミュニケーション系のアプリにとっては理想的な広告フォーマットです。
InMobiネイティブ広告は、動画、静止イメージのどちらにも対応できます。プレースメントに応じて以下の選択が可能です。
以下の手順に従い、ネイティブ広告での収益化を開始してください。
インフィード動画広告プレースメント
静的フィード広告プレースメント
nativeAd.getPrimaryViewOfWidth(context,convertView, parent, width);
を確認してください。
スプラッシュ動画広告プレースメント
SPLASH(スプラッシュ)をネイティブ広告レイアウトとして選択します。
ネイティブ広告を作成するために、以下の 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);
</inmobinative>
ここで、 nativeAdEventListener
は、NativeAdEventListener
抽象クラスを実装しています。ネイティブ広告を作成するにはこのインターフェースの実装が必須です。
必須:Context実装をInMobiNative
コンストラクタに提供する必要があります。
NativeAdListener
インターフェースを使用すれば、ネイティブ広告の重要なライフサイクルイベントにリスナーを設定できます。
inMobiNative
は常に強力な参照である必要があります。そうしないと、この参照に対してコールバック(ロード成功、ロード失敗など)を受け取れない可能性があります。inMobiNative
が任意の変数によって参照されている場合は、それが強力な参照であることを確認してください。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()}.
Note: 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
抽象クラスは、ネイティブ広告のビデオイベントについて通知します。
以下は 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種類の形式でアプリ内にステッチ(生成)できます。
例えば、4番目の位置に広告を表示する場合:
private static final int AD_POSITION = 4;
広告の読み込みが成功した場合は、onAdLoadSucceeded(InMobiNative)
コールバックを取得します。次に、このリスナー内のデータソースにInMobiNativeAd
オブジェクトを追加する必要があります。アプリのフィードがListView
の場合、ListView
のサンプル実装は以下のようになります。
@Override
public void onAdLoadSucceeded(@NonNull InMobiNative nativeAd) {
AdFeedItem nativeAdFeedItem = new AdFeedItem(nativeAd);
mFeedItems.add(AD_POSITION, nativeAdFeedItem);
mFeedAdapter.notifyDataSetChanged();
}
上記のステップ中、 AdFeedItem
はFeedItem
クラスの拡張クラスです。ここで、FeedItem
はListView
の各行に対応するクラスです。また、mItems
はArrayList
です。これはこのListView
のアダプタに対応します。
これで、広告が読み込まれ、データソースに追加されました。次に、広告を表示します。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
を受信できない場合もあります。このため、カットオフ時間が経過した直後に広告が準備完了になっているかどうかをプロアクティブにチェックするのが得策です。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 id="" placement="">>,
<<inmobinativeadlistener 1="" created="" in="" step="">>);
inMobiNativeAd.load();
}
</inmobinativeadlistener></your></activity></feeditems>
InMobiNative
の全インスタンスは広告を1つだけ表示します。InMobiNative
のインスタンスを作成します。onCreate()
コールバックかフラグメントのonActivityCreated()
コールバックで InMobiNative
のインスタンスを作成する必要があります。onDestroy()
コールバックかフラグメントのOnDestroyView()
コールバックでInMobiNative
インスタンスを破棄する必要があります。InMobiNativeAd
オブジェクトをデータソースから削除したら、必ず破棄する必要があります。InMobiNativeAd
が破棄された後では、すべてのユーザーの広告ビューとのインタラクションは許可されません。そこで、InMobiNativeAd
を破棄する前に広告ビューを確実に廃棄する必要があります。InMobiNativeAd
インスタンスは破棄されます。クリックの通知に加えて、InMobi SDKにランディングページを開かせるには、ネイティブ広告インスタンスで reportAdClickAndOpenLandingPage()
を呼び出します。
nativeAd.reportAdClickAndOpenLandingPage();
中国ではGoogle Playが存在しないため、InMobi Downloaderと呼ばれるツールを通じてAPKの直接ダウンロードをサポートしています。この機能は、InMobi Android SDKの中国版でのみ利用できます。InMobi Downloaderは、広告主のアプリのダウンロードとインストールを管理します。これは、広告主にイベントを伝え、パブリッシャーおよびユーザーに特化したエクスペリエンスを提供しながらアトリビューションを実現します。
以下のように、新しいサービスをマニフェストファイルに追加する必要があります。
<service android:enabled="true" android:name="com.inmobi.ads.ApkDownloader$ApkDownloadService">
</service>
ダウンローダには、以下のように外部ストレージを書き込む権限が必要です。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
ファイル共有の設計が変更されたため、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=".">
</external-path></paths>
AndroidManifest.xml
に以下の内容を追加します。
<provider android:authorities="{appPackageName}.fileprovider" android:exported="false" android:granturipermissions="true" android:name="android.support.v4.content.FileProvider">
<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">
</uses-permission>
InMobiネイティブ広告オブジェクトを作成する際には、以下のようにダウンローダを有効にする必要があります。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
InMobiNative nativeAd = new InMobiNative(
<<activity instance="">>,
<<your id="" placement="">>,
<<inmobinativeadlistener>>);
nativeAd.setDownloaderEnabled(true);
nativeAd.load();
//Your App code here
}
</inmobinativeadlistener></your></activity>
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とネイティブユニットの両方を実行できます。ネイティブプレースメント用に予約されているリソースに応じて、以下の広告サイズを実行できます。
これをオンに切り替えるには、希望のバックフィルサイズでそれぞれのパートナーマネージャーに接触する必要があります。また、以下のようにコード内でこれを処理する必要があります。
@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;
}
}
}
注意:
isHTMLResponse
が含まれます。時には、広告品質のチェックをすべて逃れた不正な広告主様が、無関係で不快なものや混乱するものをユーザーに表示することで、アプリのユーザーエクスペリエンスを損なうことになります。 このような状況への対応策として、広告インスタンスのcreativeIDを取得し、InMobiの連絡先に暗号化されたクcreativeIDでレポートし直します。
mNativeAd.getCreativeId()// mNativeAd
はサンプルインスタンスです。
[ツール] - [診断]に進み、テストモードを グローバルオンかセレクティブオンのどちらかに切り替えます。
アプリに対する広告インテグレーションが初めての場合 | テストモードをグローバルオンに設定します。 |
特定のテスト用デバイスにのみテスト用広告を配信したい場合 アプリに対してSDKを実装済みで、特定の更新部分などのテストをテスト用のデバイスに限定して実施する必要がある場合。 |
テストモードをセレクティブオンに設定します。
デバイスセクションでテスト端末を登録します。
すでに登録済みのデバイスがある場合は、その端末を選択し、テストモードを有効に設定できます。 |
注意:テスト完了後、本番稼働する前にテストモードをオフにしなければなりません。そうしないと、お客様のアプリは収益化できません。
これで、テスト広告を取得するための準備が整いました。
デバイスIDの取得
ここでのデバイスIDは、Google Play広告主ID(GPID)を指します。デバイスIDを取得するために、コンソールに対してデバッグログを出力するようにSDKを設定します。ネイティブ広告を実装しているアクティビティに以下の行を追加することで設定できます。
InMobiSdk.setLogLevel(LogLevel.DEBUG);
これでデバイスIDはDDMSコンソール内にデバッグログで以下のように出力されます。
ステップ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 granted="" of="" permissions="" /> |
より新しいバージョンのSDKが入手可能な場合。 | デバッグ | InMobi SDKの新しいバージョン(ver.6.0.1)が利用可能です!現在は古い方のバージョンです(バージョン5.3.1)。最新のInMobi SDKを http://www.inmobi.com/products/sdk/#downloadsからダウンロードしてください |
広告のライフサイクルで出力される主なログ
シナリオ | ログレベル | ログメッセージ |
ネットワークが使用できない状況で広告がリクエストされた場合。 | エラー | 現在ネットワークにアクセスできません。もう一度お試しください。 |
広告が読み込み中または利用可能な状態のときに広告がリクエストされた場合。 | エラー | 広告の読み込みはすでに進行中です。読み込みの完了後、他の広告をリクエストしてください(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()
を呼び出して広告アセットをリクエストします。
このメソッドの呼び出しにより、ユーザーがLockscreenの広告ビューとインタラクションすることで発生するアクションが実行されます。このインタラクションは com.inmobi.ads.InMobiNative.LockScreenListener#onActionRequired(InMobiNative)
によって報告されます。このメソッドは、android.content.Intent.ACTION_USER_PRESENT
ブロードキャストの後にアプリによって呼び出される必要があります。