概要
ネイティブ広告は、アプリのコンテンツと自然に調和するようにカスタマイズできる広告です。AdropNativeAdとAdropNativeAdViewを使用して、アプリのUIに合わせて広告を構成できます。
主な特徴
- アプリデザインに合わせたカスタムレイアウト構成が可能
- ヘッドライン、本文、CTAボタン、プロフィールなど様々な要素を提供
- 画像およびHTMLクリエイティブをサポート
- カスタムクリック処理をサポート
- バックフィル広告をサポート
開発環境ではテストユニットIDを使用してください:
PUBLIC_TEST_UNIT_ID_NATIVEAdropNativeAd
コンストラクタ
プロパティ
メソッド
dispose()済みのAdropNativeAdは再利用できません。別の広告をリクエストするには、新しいAdropNativeAdインスタンスを作成してください。AdropNativeAdView
ネイティブ広告を画面に表示するウィジェットです。コンストラクタ
AdropNativeProperties
ネイティブ広告のコンテンツプロパティです。プロパティ
AdropNativeProfile
基本的な使い方
AdropNativeListener
ネイティブ広告イベントを処理するリスナーです。コールバック関数
コールバックの説明
カスタムクリック処理
動画クリエイティブやカスタムクリック動作が必要な場合はuseCustomClickを使用します。
useCustomClickがtrueの場合、子ウィジェットのクリックイベントが広告クリックとして処理されます。
HTMLクリエイティブの表示
ネイティブ広告にHTMLクリエイティブが含まれている場合、WebViewを使用して表示できます。HTMLクリエイティブを使用するには、
webview_flutterパッケージを追加する必要があります。バックフィル広告の処理
ネイティブ広告がバックフィル広告の場合、isBackfilledプロパティで確認して処理できます。
AdChoicesの位置調整
バックフィルネイティブ広告で、AdChoicesマークを表示するコーナーを指定できます。AdropNativeAdコンストラクタでpreferredAdChoicesPositionを設定してください。
この設定はバックフィルネットワークに渡される希望位置のヒントで、バックフィルネイティブ広告にのみ適用されます — ダイレクト広告には影響しません。バックフィルネットワークがポリシー上別の位置に表示する場合があります。
動画トラッキングとVTR
Adropはネイティブ広告の動画指標 — VTR(動画完了率)、onAdVideoStart、onAdVideoEnd — を、SDKメディアコンテナ内で動画がレンダリングされる場合にのみ収集します。FlutterではHTMLクリエイティブの表示セクションのように、properties.creative(HTMLペイロード)をWebViewでレンダリングする方式がこれに該当します。これは広告のメインメディア(メディア 1)に当てはまります。複数メディアのクリエイティブのそれ以外のメディアについては、複数メディアのクリエイティブを参照してください。
properties.assetフィールドは元の画像または動画ファイルのURLを返します。これはサムネイル表示や媒体社独自分析などの補助メタデータとして公開されており、再生を直接行うためのものではありません。
推奨パターン
動画クリエイティブはWebView + HTMLクリエイティブパターンを使用してください。AdropNativeAdView内部に配置し、クリックとインプレッショントラッキングが広告コンテナに接続されたまま維持されるようにしてください。
特定の面がどうしても独自プレイヤーを使う必要があり、VTRが計測されないことを許容する場合、広告を
AdropNativeAdViewにバインドしたままにすることで、クリックとインプレッションのアトリビューションは引き続き確保できます。ただしその面を社内レポートで非VTRインベントリとして分類し、SDKが計測した動画パフォーマンスと混在させないでください。追加フィールドの使用
媒体社が定義した追加フィールドはextraマップからアクセスできます。
複数メディアのクリエイティブ
adrop_ads_flutter 1.16.0以降が必要です。バックフィルを使う場合は、バックフィルモジュールも1.16.0に更新してください。properties.extraAssetsには、広告のすべてのメディアがコンソールで設定したメディアIDをキーとして格納されています。メディア 1は常にm1で、それ以外のメディアには広告ユニット詳細画面のメディアサイズに表示されるID(例:m2、m3)が使われます。
- メディア 1(
m1)はproperties.asset、properties.creativeと同じメディアです。これまでどおり表示し、それ以外のメディアだけを自分で描画してください。 - メディアが1つのユニットのクリエイティブとバックフィル広告では、
extraAssetsは空です。これらの広告は通常どおり表示してください。 - メディアは順序に頼らず、IDで取得してください。
- 広告がダークモードで配信される場合、画像メディアもダークモード用の画像になります。
- 複数メディアのクリエイティブでレイアウトを確認するには、テストデバイスでクリエイティブをプレビューしてください。
AdropNativeAsset
メディアの表示
- 画像:
useCustomClickの設定にかかわらず、AdropNativeAdView内のウィジェットのタップは広告クリックになるため、その中に置いた画像のタップも、広告のほかの部分と同じように集計されます。画像のcreativeHTMLはクリックをAdropに報告しないため、読み込まないでください。 - 動画:
assetURLではなくcreativeHTMLを再生してください。HTMLに動画プレイヤーとトラッキングが含まれているため、動画指標はこのHTMLでのみ計測されます。WebViewWidgetはAdropNativeAdViewの外に配置してください。中に置くと、プレイヤーのコントロールのタップを含むすべてのタップが広告クリックになります。HTMLは事前に読み込まず、広告が画面に表示される直前に読み込んでください。 - ランディングページ: ユーザーが動画をタップすると、HTMLがクリックを報告し、ランディングページを新しいウィンドウまたは同じウィンドウで開くよう要求します。どちらの要求も
onNavigationRequestに届くため、そこで要求されたURLを開いてください。
インプレッションとクリック
インプレッション、クリック、動画指標は、SDKとメディアの両方が報告しても、メディア単位ではなく広告ごとに1回だけ集計されます。動画のどのタップがクリックとして集計されるかは、ユニットの動画コントローラー設定によって異なります。コントローラーがオフの場合は動画のすべてのタップがクリックになり、オンの場合は再生・ミュートのコントロールのタップはクリックになりません。
例
メディア 2(m2)が画像の場合はAdropNativeAdViewの中に、動画の場合はそのすぐ下に表示する例です。m2はユニットのメディアIDに置き換えてください。先にWebViewとURL Launcherのパッケージを追加してください。
エラー処理
バックフィル関連エラー
バックフィル広告が設定されている場合、直接広告とバックフィル広告の両方がない場合はbackfillNoFillエラーコードが返されます。
一般的なエラー処理
ベストプラクティス
1. 広告の再生成
新しい広告をロードするには、新しいAdropNativeAdインスタンスを生成します。
2. 条件付きレンダリング
広告がロードされるまで適切なプレースホルダーを表示します。3. レスポンシブレイアウト
様々な画面サイズに対応できるようにレイアウトを構成します。4. 広告プロパティのnullチェック
ネイティブ広告プロパティはnullの可能性があるため、常に確認します。バックフィル広告のプリロード (preload)
SDK 1.17.0から、AdropNativeAd.preload()でバックフィルネイティブ広告をプリロードしておくことができます。同じユニットIDと同じAdChoicesの位置でload()したネイティブ広告が、ダイレクト広告なしでバックフィル広告に切り替わると、バックフィル広告を再度リクエストせず、プリロードしておいた広告をすぐに使用します。
load()はpreloadに関係なく、まずダイレクト広告をリクエストします。ダイレクト広告を受信した場合、プリロードしておいた広告はそのまま残ります。preloadを呼び出さなければ、動作はこれまでと同じです。
動作条件
adrop_ads_flutter1.17.0以降と、ネイティブプラットフォームのバックフィル依存性1.17.0以降が必要です。はじめにを参照してください。- 現在表示するダイレクト広告がないとサーバーからアプリに通知されている状態でのみ、バックフィル広告を受信します。それ以外の場合は、バックフィル広告をリクエストせずに
ERROR_CODE_AD_PRELOAD_SKIPPEDで終了します。ダイレクト広告のキャンペーンがあるアプリでは正常な結果です。 - アプリのインストール直後、アプリキーを変更した直後、
setUIDで別のユーザーに切り替えた直後は、サーバーの応答を受信するまでERROR_CODE_AD_PRELOAD_SKIPPEDで終了します。 - テストユニットIDでは常に
ERROR_CODE_AD_PRELOAD_SKIPPEDで終了します。
使用方法
ネイティブ広告がある画面を表示する直前に呼び出してください。プリロードした広告は使用されないと30分後に破棄されるため、すぐに表示する広告に対してのみ呼び出してください。結果を待ってからload()する必要はありません。まだ受信中の場合は、load()がその結果を待って使用します。
preload()はプリロードに成功すると完了し、それ以外の結果(ERROR_CODE_AD_PRELOAD_SKIPPEDを含む)は、codeがエラーコード文字列であるPlatformExceptionとして渡されます。処理しないと、正常な結果であるSKIPPEDも未処理の非同期エラーとして報告されるため、try/catchで囲むか、.catchErrorを付けてください。
load()するAdropNativeAdを、preloadに渡した値と同じpreferredAdChoicesPositionで作成してください。どちらもデフォルト値はAdropAdChoicesPosition.topRightです。
プリロードした広告が使われる条件
- 同じユニットIDと同じAdChoicesの位置: AdChoicesの位置はバックフィル広告を受信するときに決まるため、
load()する広告のpreferredAdChoicesPositionが、preloadに渡した値と同じである必要があります。異なる場合、プリロードした広告はそのまま残り、load()は通常どおりバックフィル広告をリクエストします。 - 一度だけ使用: プリロードした広告は、1回の
load()で使用されるとなくなります。再度プリロードするには、preloadをもう一度呼び出してください。 - 有効期間と個数: 30分以内に使用されなかった広告は破棄されます。同じユニット・AdChoicesの位置には1個のみ保持し、ネイティブ広告は異なる組み合わせを最大5個まで保持します。5個を超えると、最も早く受信した広告から破棄します。
- 再度呼び出す場合: 同じユニット・AdChoicesの位置で再度呼び出しても、新たにリクエストしません。受信済みの広告がある場合は新しいリクエストなしで完了し、受信中の場合はそのロードの結果(成功または失敗)がそのまま伝えられます。広告を更新する用途には使用できません。ただし、その間にユーザーの同意状態が変わった場合は、既存の広告を破棄して新たに受信します。
- 同意状態の変更: プリロードした後にユーザーの同意状態が変わると、その広告は
load()に使用されません。 - 完了の意味:
preload()が完了したということは、プリロードが終わったという意味です。その結果を待っていたload()がすでに使用している場合もあります。
失敗コード
次のステップ
インタースティシャル広告
画面全体を覆うインタースティシャル広告を実装する
リワード広告
報酬を提供するリワード広告を実装する
ポップアップ広告
ポップアップ形式で表示される広告を実装する
リファレンス
タイプ、メソッド、エラーコードを参照する