2015年以降、
Admobネイティブ広告の状況はそれほど変化しておらず、ネイティブ広告はベータ版リリースのままであり、パブリッシャーのアクセスは制限されています。 新しいドキュメントは、公式のドックに登場し、これらのネイティブ広告の実装方法に関するいくつかの説明が追加されました。 また、私たちは、次の記事のために資料を保存し、
じっと座っていませんでした。そして、空き時間が現れたらすぐに、
admobadapterライブラリーの機能を少し拡張しました。 つまり、
前回の ListViewの 記事で行ったよう
に、 RecyclerViewのスクロール可能なネイティブ広告のサポートを実装しました。
ネイティブ広告でRecyclerViewを友達に

以前の経験が良好であることが判明したため、
RecyclerViewの場合、彼らはアダプターの
ラッパー(以下、ラッパーと呼ぶ)を実装することにしました。 これにより、開発者はデータ用に独自の特別でユニークなアダプターを作成でき、この取り組みを妨げないようにしています。 次に、開発者は
依存性注入を使用してラッパーをアダプターに関連付け、
RecyclerViewでラッパー参照を渡します。 したがって、アダプターロジックに干渉しません。 コレクションを表示するとき、ラッパーは広告ユニットを表示する場所とソースデータを計算します。 検討中のライブラリの一部にはエレガントなソリューションや革新的なデザインが含まれていないため、
ListViewの RecyclerViewのスクロール可能なネイティブ広告の実装の機能と違いについて詳しく説明します。
RecyclerViewのアダプタ基本クラスは
RecyclerView.Adapter <〜>であり、
ListViewの場合は
BaseAdapterです。
ListViewの
ViewHolder -patternのアプリケーションが
best-practicesのカテゴリからのアクションである場合、
RecyclerView.Adapter <VH extends RecyclerView.ViewHolder> 宣言では、ViewHolderタイプ
パラメーターが必要です。 基本クラスにはメソッドのオーバーライドが必要です
abstract int getItemCount()
アダプタによって保存されたアイテムの総数を返します。 本質的にint getCount()に似ています。
abstract void onBindViewHolder(VH holder, int position)
ホルダーに保存されたビューを、
位置インデックスで取得されたデータ収集要素にバインドします。 このメソッドと次のメソッドは
、BaseAdapterから
View getViewメソッド
(int位置、View convertView、ViewGroup親)を「置換」するために、以前に、
convertViewの
nullのチェック結果に応じて、新しい
convertViewを作成するか、現在のデータを対応するデータにバインドしました。
abstract VH onCreateViewHolder(ViewGroup parent, int viewType)
目的のタイプ
viewTypeのビュー ホルダーを作成して返します。 特定の属性に応じてコレクションの要素をさまざまな方法で表示する必要がある場合は、
viewTypeコンテナ
タイプを使用する必要があります。 この場合、メソッドも定義する必要があります
int getItemViewType(int position)
位置インデックスにあるデータコレクションアイテムのコンテナタイプを返します。
BaseAdapterの場合 、
getViewTypeCountメソッドでコンテナタイプの合計数を決定する
ことも必要でした
。RecyclerView.Adapter <〜>では、これは不要になりました。 この例では、
getViewTypeCountは
ラッパーで 3を返し
ます 。元のデータコレクション(アダプター用)からの要素用に1つ、コンテンツを使用した広告およびアプリケーションのインストール用の広告用に2つです(前の記事を参照)。 同時に、アダプターはコンテナータイプを表示するための独自のロジックを決定でき、ラッパーはそれについて何も知る必要がありません。 だから、ソースコードは千語よりも優れています:)
展開する public class AdmobRecyclerAdapterWrapper<T, V extends View> extends RecyclerView.Adapter<ViewWrapper<V>> implements AdmobFetcher.AdmobListener {
ちょっとした官僚主義
記事の冒頭で、Admobからのネイティブ広告に関する公式ドックの説明に言及しましたが、主な変更点の1つは
公開ルールです。 一般的に、ネイティブ広告を統合するプロセスは次のようになります(間違えた場合は修正してください)。
- アプリケーションのテストバージョンの実装前でも、将来の広告のモックアップおよびUIでのプレゼンテーションについて、アカウントマネージャーから開発および承認を得る(任意)
- 閉じたモードで、テストadmob発行IDを使用して広告テンプレートをテストする
- テンプレートおよび配置ルールですべてが正常であることの公式承認を取得します。 この手順は、アルファ/ベータテストモードの開発者コンソールから、またはadmobダッシュボードから直接利用できるようにすることをお勧めします
- 承認済みアプリケーションを公開
UIでの広告の外観の正式なチェックは、既に公開されている
チェックリストに従って実行されます。
また、
developer-guideにコメントが追加されました。その本質は、単一の
AdLoaderオブジェクトのコンテキストで
loadAdメソッドを呼び出すことにより、広告ユニットのマルチスレッドロードに対して開発者に警告することです。 つまり、基本的に、2つ以上のオプションが残っています:)
- loadAd呼び出しごとに個別のAdLoaderエンティティを作成します。
- 単一のAdLoaderオブジェクトのコンテキストでloadAdを呼び出す前に、前のブロックの読み込みが完了したことを確認してください。
2番目のオプションの実装例は、再び
admobadapterライブラリで見ることができます(
正規性の主張なし)。 これらのメソッドは、前の
記事ですでに詳細に説明されているため、
loadAd同期の原因となる
AdmobFetcherコードフラグメントを検討します。 この目的でフラグが使用されます。
AtomicBoolean lockFetch = new AtomicBoolean();
loadAdを呼び出す前に、このフラグの値を確認し、trueに設定されている場合-別のブロックが現在ロード中の場合-終了します。 それ以外の場合は、trueに設定して、広告ユニットの読み込みを試みます
展開する private synchronized void fetchAd() { Context context = mContext.get(); if (context != null) { if(lockFetch.getAndSet(true)) return; adLoader.loadAd(getAdRequest()); } else { mFetchFailCount++; } }
広告ユニットの読み込みを許可するには、フラグをfalseに設定する必要があります。これは、以下に示すように、
AdLoaderエンティティの作成時に
loadAdが終了するようにサインアップすることで実行できます。
展開する adLoader = new AdLoader.Builder(mContext.get(), admobUnitId) .forAppInstallAd(new NativeAppInstallAd.OnAppInstallAdLoadedListener() { @Override public void onAppInstallAdLoaded(NativeAppInstallAd appInstallAd) { lockFetch.set(false);
結論の代わりに
そのため、
RecyclerViewの新しいラッパーには変更が加えられています。
- データ/広告を表示するビューを作成する
- データ/広告へのビューのバインド
- 基本クラスの他の抽象メソッドをオーバーライドします。
以前のままでした:
- AdMobサーバーから広告をダウンロードするためのメカニズム( AdmobFetcherクラス)
- 広告ビュー (xml)の構造とバインディングの充填
- 原価計算インデックスと広告ユニット/データブロックの数
- getItemCount() 、 getItemId(int position)およびgetItemViewType(int position)メソッドの本質は同じままですが、名前が変更されました。
記事の2番目の部分からの乾燥した残留物-Admobネイティブ広告の公式ドキュメントは、ネイティブ広告をアプリケーションに統合する手順が重要であり、費やされる時間は開発速度だけでなく中程度の速度にも依存することが示唆されるかのように開発を続けていますAdmob / Googleスタッフの十分性。
添付の投票に投票していただければ、統計に感謝します! 伝統的に、私たちはあなたのアプリケーションであなたに美しい広告を願っています!
PS:この記事の情報の一部は「わずかに」古いことが判明したため、新しいGoogleドキュメント
support.google.com/admob/answer/6270315?hl=enへのリンクを提供
します。 時間が来たら-Habréでの接続プロセスについて説明します。