Native Ads Integration For Android - Hiroaki-Shinoda/Geniee-Android-SDK GitHub Wiki

Android ネイティブ広告の実装

ネイティブ広告では、完成した広告レイアウトを提供するのではなく、広告コンテンツ(部品)を提供することにより、オリジナルデザインで広告を配信する事ができます。タイトルや説明テキスト、アイコンなど、好きなデザインで配信する事が可能です。 広告インプレッション、広告クリックのトラッキングは、広告SDKで処理します。

実装準備

ネイティブ広告の実装準備は、下記スタートガイドから行ってください。
Geniee SDK をプロジェクトにインストールする必要があります。
スタートガイド

クラスとインタフェース

Android ネイティブ広告配信には、下記クラスを使用します。

  • GNNativeAdRequest 非同期でネイティブ広告を取得するためのクラス
  • GNNativeAd ネイティブ広告の情報を提供するためのクラス
  • GNNativeAdRequestListener ネイティブ広告のロード結果を受け取るためのインタフェース

SDK初期化

アプリのグローバルでSDK初期化します。

  1. グローバルでSDK初期化します。
    (例:アプリ起動時初期化をします。)
    import android.app.Application;
    import jp.co.geniee.gnadsdk.common.GNAdSDK;
    
    public class MyApplication extends Application {
        GNAdSDK gnadsdk = null;
        @Override
        public void onCreate() {
            GNAdSDK gnadsdk = GNAdSDK.getInstatnce(getApplicationContext());
            gnadsdk.init();
        }
    }
    

ネイティブ広告の取得

  1. SDK をプロジェクトに追加します。スタートガイド

  2. GNNativeAdをインポートします。

    import jp.co.geniee.sdk.ads.nativead.GNNativeAd;
    import jp.co.geniee.sdk.ads.nativead.GNNativeAdRequest;
    import jp.co.geniee.sdk.ads.nativead.GNNativeAdRequestListener;
    import jp.co.geniee.gnadsdk.common.GNAdLogger;
    
  3. GNNativeAdRequestListenerインタフェースを実装します。

    public class NativeAdSampleActivity extends ListActivity implements GNNativeAdRequestListener {
    }
    
  4. GNNativeAdRequestの変数を宣言します。

    GNNativeAdRequest nativeAdRequest;
    
  5. GNNativeAdRequest のインスタンスを初期化します。

  • 初期化 API
    public GNNativeAdRequest(Context context, String zoneids)
    
  • 初期化 API の使用例
    nativeAdRequest = new GNNativeAdRequest(this, "YOUR_SSP_APP_ID");
    

thisパラメータは、アプリのContextを設定します。
YOUR_SSP_APP_ID は、Geniee内での枠の管理IDを設定します。

  1. GNNativeAdRequestListenerインタフェースの実装クラスを設定します。
    ネイティブ広告ロードイベントのは、インタフェースの実装クラス経由で通知されます。
    GNNativeAdRequestListenerインタフェースの実装した変数を設定します。

    nativeAdRequest.setAdListener(this);
    
  2. ネイティブ広告をロードします。

    nativeAdRequest.loadAds(this);
    

thisパラメータは、アプリのContextを設定します。

  1. GNNativeAdRequestListenerインタフェースの実装
    GNNativeAdRequestListenerのコールバック関数を実装し、
    ネイティブ広告のロードイベントの結果を受け取ります。
    public abstract void onNativeAdsLoaded(GNNativeAd[] nativeAds);
    public abstract void onNativeAdsFailedToLoad();
    public abstract boolean onShouldStartInternalBrowserWithClick(String landingURL);
    

受信したネイティブ広告GNNativeAdは、配列のnativeAds引数で渡されます。
複数ネイティブ広告の振り分け処理には、GNNativeAdzoneID情報で行います。
配列nativeAdsの要素数: - 1個 GNNativeAdRequest 初期化時、APP_IDを1つ指定した場合 - 複数個 GNNativeAdRequest 初期化時、APP_IDを複数指定した場合

  • ListActivity の実装例:
    import jp.co.geniee.sdk.ads.nativead.GNNativeAd;
    import jp.co.geniee.sdk.ads.nativead.GNNativeAdRequest;
    import jp.co.geniee.sdk.ads.nativead.GNNativeAdRequestListener;
    import jp.co.geniee.gnadsdk.common.GNAdLogger;
    
    public class NativeAdSampleActivity extends ListActivity implements GNNativeAdRequestListener {
    GNNativeAdRequest nativeAdRequest;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        nativeAdRequest = new GNNativeAdRequest(this, "YOUR_SSP_APP_ID");
        nativeAdRequest.setAdListener(this);
        //nativeAdRequest.setGeoLocationEnable(true);
        nativeAdRequest.loadAds(this);
    }
    
    @Override
    public void onNativeAdsLoaded(GNNativeAd[] nativeAds) {
        for(int i=0; i<nativeAds.length; i++) {
            queueAds.enqueue(nativeAds[i]);
        }
    }
    
    @Override
    public void onNativeAdsFailedToLoad() {
        Log.w("NativeAdSampleActivity","onNativeAdsFailedToLoad");
    }
    
    @Override
    public boolean onShouldStartInternalBrowserWithClick(String landingURL) {
        Log.i("NativeAdSampleActivity","onShouldStartInternalBrowserWithClick : " + landingURL);
        return false;
    }
    

複数枠の広告の同時取得

  • 複数枠の広告を同時に取得するためには、複数枠の APPID を指定してインスタンスを初期化する必要があります。

  • 最大10枠の広告を同時取得できます。

  • 各 APPID をカンマで区切り、APPID の間はスペースを入れないでください。

    nativeAdRequest = new GNNativeAdRequest(this, "APPID1,APPID2,APPID3,...,APPID10");
    

ネイティブ広告のレンダリング

受信したネイティブ広告の情報に基づいて、ネイティブ広告をレンダリングします。

  • 情報データの型は、GNNativeAdクラスの定義を参照します。

  • 情報データ( String 型)の値が未設定の場合、""となります。

  • 情報データ(int、double型)の値が未設定の場合、0となります。

    情報の名前 情報の内容
    zoneID String Geniee内での枠の管理ID
    advertiser String 広告主の名前
    title String feed広告のタイトル
    description String 広告説明
    cta String call to actionの文言
    icon_aspectRatio double icon画像の横縦比
    icon_url String icon画像のURL
    icon_height int icon画像の高さ
    icon_width int icon画像の幅
    screenshots_aspectRatio double screenshot画像の横縦比
    screenshots_url String screenshot画像のURL
    screenshots_height int screenshot画像の高さ
    screenshots_width int screenshot画像の幅
    app_appName String アプリの名前
    app_appid String アプリのID(ios:数値、Android:パッケージ)
    app_rating double アプリの評価
    app_storeURL String アプリのストアのURL
    app_targetAge String アプリの対象年齢
  • ListActivity の実装例: 管理画面に下記ネイティブ広告の情報を設定した場合

    • title
    • description
    • icon image URL
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
    
        Object cell = getItem(position);
        //SDK: Rendering NativeAd content
        if (cell instanceof GNNativeAd) {
            holder.textView.setText(((GNNativeAd)cell).title);
            holder.imageView.setTag(((GNNativeAd)cell).icon_url);
            new ImageGetTask(holder.imageView, ((GNNativeAd)cell).icon_url).execute();
            //SDK: Report impression
            ((GNNativeAd)cell).onTrackingImpression();
        } else {
            // GNNativeAd以外のセルの表示処理
        }
        return convertView;
    }
    
  • ListActivity 実装例のイメージ

    image

ネイティブ広告のインプレッション報告

  • ネイティブ広告がレンダリングされた時、広告のインプレッションを報告します。

  • インプレッション報告済みのネイティブ広告に対して、再度報告ができません。

  • 新しい広告表示には、ネイティブ広告を再取得する必要があります。

    nativeAd.onTrackingImpression();
    

ネイティブ広告のクリックトラッキング

  • ネイティブ広告がクリックされた時、広告のランディングページを外部ブラウザで起動します。

    nativeAd.onTrackingClick();
    
  • ListActivity の実装例:

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        ListView listView = (ListView)parent;
        Object cell = listView.getItemAtPosition(position);
        if (cell instanceof GNNativeAd) {
            //SDK: Report click
            ((GNNativeAd)cell).onTrackingClick();
        }
    }
    

クリックのランディングページ画面遷移の制御

広告のランディングページは、デフォルトで外部ブラウザで起動しますが、
GNNativeAdRequestListenerのコールバック関数を実装し、
ランディングページのURLを使ってアプリ内ブラウザで起動することが可能です。
また、関数の戻り値によって、外部ブラウザの起動を制御します。
true を返した場合、アプリ側landingURL をリクエストする必要があります。

  • false 外部ブラウザを起動します。

  • true 外部ブラウザを起動しません。

    public boolean onShouldStartInternalBrowserWithClick(String landingURL)
    

ネイティブ広告の再取得

  • 新しい広告表示には、ネイティブ広告を再取得する必要があります。

    nativeAdRequest.loadAds(this);