Banner Integration For Android - Hiroaki-Shinoda/Geniee-Android-SDK GitHub Wiki

Android バナー広告の実装

バナー広告は、アプリ画面の下部、上部に配置する広告です。
広告枠のサイズ設定より、アイコン型広告、インライン型広告として配置可能です。

実装準備

バナー広告の実装準備は、下記スタートガイドより、
Geniee SDK をプロジェクトにインストール必要です。
スタートガイド

クラスとインタフェース

Android バナー広告配信には、下記クラスを使用します。

  • GNAdView 非同期でバナー広告を取得、表示用クラス
  • GNAdEventListener バナー広告サイクルイベント処理用インタフェース

バナー広告の取得と表示

  1. GNAdViewをインポートします。

    import jp.co.geniee.gnadsdk.banner.GNAdView;
    import jp.co.geniee.gnadsdk.common.GNAdLogger;
    import jp.co.geniee.gnadsdk.banner.GNAdSize;
    import jp.co.geniee.gnadsdk.banner.GNTouchType;
    
  2. GNAdViewの変数を宣言します。

    GNAdView adView;
    
  3. GNAdView のインスタンスを初期化します。

    • 初期化 API
    public GNAdView(Context context, GNAdSize adSize, GNTouchType touchType) throws IllegalArgumentException
    
    • 初期化 API の使用例
    adView = new GNAdView(
            this,
            GNAdSize.W320H50,
            GNTouchType.TAP_AND_FLICK
    );
    adView.setAppId("YOUR_SSP_APP_ID");
    

contextパラメータは、アプリのContextを設定します。
adSizeパラメータは、広告のサイズタイプを設定します。
touchTypeパラメータは、広告のタブタイプを設定します。
YOUR_SSP_APP_IDは、Geniee内での枠の管理IDを設定します。

  1. 広告を画面に追加します。

    final LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
    layout.addView(adView, LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
    
  2. アクティビティ画面を表示時に、広告をロード、表示します。

    adView.startAdLoop();
    

startAdLoop() を呼び出すと、GNAdViewは広告のロードを開始し、
自動的に広告のローテーション表示を開始します。

  1. アクティビティ画面を非表示時に、広告のローテーション表示を停止します。

    adView.stopAdLoop();
    
  2. アクティビティ画面を終了時に、GNAdView のリソースを開放します。

    adView.clearAdView();
    
  • GNAdSampleBanner の実装例:

import jp.co.geniee.gnadsdk.common.GNAdLogger; import jp.co.geniee.gnadsdk.banner.GNAdView; import jp.co.geniee.gnadsdk.banner.GNAdSize; import jp.co.geniee.gnadsdk.banner.GNTouchType;

public class GNAdSampleBanner extends ActionBarActivity { private GNAdView adView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gnad_sample_banner);

    // Initializes a GNAdView
    adView = new GNAdView(
            this,
            GNAdSize.W320H50,
            GNTouchType.TAP_AND_FLICK
    );
    adView.setAppId("YOUR_SSP_APP_ID");
    //adView.setLogPriority(GNAdLogger.INFO);
    //adView.setGeoLocationEnable(true);
    // Add AdView to view layer
    final LinearLayout layout = (LinearLayout)findViewById(R.id.AdviewLayout);
    layout.addView(adView, LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
}

@Override
protected void onResume() {
    super.onResume();
    if(adView != null){
        adView.startAdLoop();
    }
}

@Override
protected void onPause() {
    super.onPause();
    if(adView != null){
        adView.stopAdLoop();
    }
}

@Override
protected void onDestroy() {
    if (null != adView) {
        adView.clearAdView();
    }
    super.onDestroy();
}

} ```

広告のサイズタイプの設定

広告枠のサイズタイプ設定より、アイコン型広告、インライン型広告として配置可能です。

  • バナー型広告 : GNAdSize.W320H50、GNAdSize.W300H250、GNAdSize.W320H100

  • アイコン型広告 : GNAdSize.W57H57、GNAdSize.W76H76

    GNAdSizeの定義 定義の意味
    GNAdSize.W320H50 320x50
    GNAdSize.W300H250 300x250
    GNAdSize.W320H100 320x100
    GNAdSize.W57H57 57x57
    GNAdSize.W76H76 76x76

バナーローテーション(リフレッシュ)

管理画面より、バナーローテーション(リフレッシュ)を設定できます。
設定した場合、広告が指定した間隔秒数(30 ~ 120)で自動的にリフレッシュします。
リフレッシュを停止する場合、下記のいずれか方法で可能です。

  • 管理画面より、「Enable banner rotation」を無効に設定します。

  • stopAdLoop関数を呼び出します。

    @Override
    protected void onPause() {
        super.onPause();
        if(adView != null){
            adView.stopAdLoop();
        }
    }
    

GNAdEventListener インターフェース

  • GNAdEventListenerのインターフェース関数実装し、広告処理サイクルイベントを受け取ります。

public interface GNAdEventListener {

/**
 * Call when GNAdView loaded ad data and first banner is shown.
 * @param adView
 */
void onReceiveAd(GNAdView adView);

/**
 * Call when GNAdView failed to load the ads.
 * @param adView
 */
void onFaildToReceiveAd(GNAdView adView);

/**
 * Call when built-in browser is starting.
 * @param adView
 */
void onStartExternalBrowser(GNAdView adView);

/**
 * Call when in-app browser is starting.
 * @param adView
 */
void onStartInternalBrowser(GNAdView adView);

/**
 * Called when in-app browser is terminating.
 * @param adView
 */
void onTerminateInternalBrowser(GNAdView adView);

/**
 * Call before built-in browser starting.
 * @param landingURL
 */
boolean onShouldStartInternalBrowserWithClick(String landingURL);

} ```

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

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

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

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

    @Override
    public boolean onShouldStartInternalBrowserWithClick(String landingURL) {
        return false;
    }
    

広告表示領域の変更とセンタリング

端末で広告の表示領域を変更、センタリングすることができます。

  • 例:320x50の広告をセンタリングします。(layout/activity_gnad_sample_banner.xml)

    <LinearLayout
        android:id="@+id/AdviewLayout"
        android:layout_width="320dp"
        android:layout_height="50dp"
        android:layout_gravity="center_horizontal"
        android:orientation="vertical">
    </LinearLayout>
    

複数枠広告の同時取得の実装

複数広告の同時取得は、以下の実装方法で実装します。

  • 複数枠の広告を同時に取得には、複数枠の APPID を指定してインスタンスを初期化します。

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

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

    multiAdViewRequest = new GNAdViewRequest(this, "APPID1,APPID2,APPID3,...,APPID10");
    
  • 複数枠同時取得の広告重複除外には、管理画面で各枠の「バナーローテーションを使用するか」のチェックを外してください。

クラスとインターフェース

Android 複数枠の広告同時取得には、下記クラスを使用します。

  • GNAdViewRequest 非同期で複数枠の広告を取得用クラス
  • GNAdView 表示する広告クラス
  • GNAdViewRequestListener 広告のロード結果を受け取る用インターフェース

複数枠の広告の取得

  1. GNAdViewRequestGNAdViewをインポートします。

    import jp.co.geniee.gnadsdk.banner.GNAdView;
    import jp.co.geniee.gnadsdk.banner.GNAdViewRequest;
    import jp.co.geniee.gnadsdk.banner.GNAdViewRequestListener;
    import jp.co.geniee.gnadsdk.common.GNAdLogger;
    
  2. GNAdViewRequestListenerインターフェースを実装します。

    public class MultipleBannerSampleActivity extends ListActivity implements GNAdViewRequestListener {
    }
    
  3. GNAdViewRequestの変数を宣言します。

    GNAdViewRequest multiAdViewRequest;
    
  4. GNAdViewRequest のインスタンスを初期化します。

    multiAdViewRequest = new GNAdViewRequest(this, "APPID1,APPID2,APPID3,...,APPID10");
    

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

  5. GNAdViewRequestListenerのlistenerを設定します。
    複数広告ロードイベントの結果は、listener経由で通知されます。
    GNAdViewRequestListenerインターフェースを実装したインスタンス変数を設定します。

    multiAdViewRequest.setAdListener(this);
    
  6. 複数広告をロードします。

    multiAdViewRequest.loadAds(this);
    

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

  7. GNAdViewRequestListenerインターフェースの実装
    GNAdViewRequestListenerのコールバック関数実装し、
    広告のロードイベントの結果を受け取ります。

    public abstract void onGNAdViewsLoaded(GNAdView[] adViews);
    public abstract void onGNAdViewsFailedToLoad();
    public abstract boolean onShouldStartInternalBrowserWithClick(String landingURL);
    

受信した広告GNAdViewは、配列のadViews引数で渡されます。
複数広告の振り分け処理には、GNAdViewgetAppId()情報で行います。
配列adViewsの要素数:
- 1個 GNAdViewRequest 初期化時、APP_IDを1つ指定した場合 - 複数個 GNAdViewRequest 初期化時、APP_IDを複数指定した場合

  • ListActivity の実装例:

import jp.co.geniee.gnadsdk.banner.GNAdView; import jp.co.geniee.gnadsdk.banner.GNAdViewRequest; import jp.co.geniee.gnadsdk.banner.GNAdViewRequestListener; import jp.co.geniee.gnadsdk.common.GNAdLogger;

public class MultipleBannerSampleActivity extends ListActivity implements GNAdViewRequestListener { GNAdViewRequest multiAdViewRequest;

@Override
public void onCreate(Bundle savedInstanceState) {
    multiAdViewRequest = new GNAdViewRequest(this, "YOUR_SSP_APP_IDS");
    multiAdViewRequest.setAdListener(this);
    //multiAdViewRequest.setGeoLocationEnable(true);
    //multiAdViewRequest.setLogPriority(GNAdLogger.INFO);
    multiAdViewRequest.loadAds(this);
}

@Override
public void onGNAdViewsLoaded(GNAdView[] adViews) {
    for(int i=0; i<adViews.length; i++) {
        queueAds.enqueue(adViews[i]);
    }
}

@Override
public void onGNAdViewsFailedToLoad() {

}

@Override
public boolean onShouldStartInternalBrowserWithClick(String landingURL) {
    return false;
}

} ```

広告のレンダリング

取得した複数広告のレンダリング

  • 広告のレンダリングは、広告サイズを指定して行います。

    adLayout.addView(adView, LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
    adView.showBannerWithSize(width, height);
    adView.startAdLoop();
    
  • width 広告の幅、管理画面で枠登録際に指定した広告の幅

  • height 広告の高さ、管理画面で枠登録際に指定した広告の高さ

広告表示領域を指定して行います。

  • 例:広告を300x100の領域でセンタリングします。(layout/ad_item.xml)

    <LinearLayout
        android:id="@+id/ad_layout"
        android:layout_width="300dp"
        android:layout_height="100dp"
        android:layout_gravity="center_horizontal"
        android:orientation="vertical">
    </LinearLayout>
    

レンダリング実装例

  • ArrayAdapter の実装例:
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        int type = getItemViewType(position);
        if (convertView == null) {
            holder = new ViewHolder();
            switch (type) {
                case TYPE_AD:
                    convertView = inflater.inflate(R.layout.ad_item, null);
                    holder.adLayout = (LinearLayout)convertView.findViewById(R.id.ad_layout);
                    break;
                case TYPE_ITEM:
                    convertView = inflater.inflate(R.layout.list_item, null);
                    holder.textView = (TextView) convertView.findViewById(R.id.textView);
                    holder.imageView = (ImageView) convertView.findViewById(R.id.imageView);
                    break;
            }
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
    
        Object cell = getItem(position);
        // Rendering SDK GNAdView content
        if (cell instanceof GNAdView) {
            holder.adLayout.removeAllViews();
            GNAdView adView = (GNAdView)cell;
            if (adView.getParent() == null) {
                holder.adLayout.addView(adView, LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
                adView.showBannerWithSize(300, 100);
                adView.startAdLoop();
            }
        } else {
            // GNAdView 以外セルの表示処理
        }
        return convertView;
    }
    

広告のインプレッション報告

インプレッションの発生タイミング

  • 広告のレンダリング共に、自動的にインプレッションが発生して報告されます。
  • インプレッション報告済みの広告に対して、再度報告ができません。
  • 新しい広告表示には、広告を再取得(或いは、リフレッシュ)必要です。

広告のクリックトラッキング

  • 広告がクリックされた時、広告のランディングページを外部ブラウザで起動します。
  • 広告クリックされた回数を自動的にカウントされます。

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

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

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

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

    @Override
    public boolean onShouldStartInternalBrowserWithClick(String landingURL) {
        return false;
    }
    

複数広告の同時再取得

  • 新しい広告表示には、広告を再取得必要です。

    multiAdViewRequest.loadAds(this);
    

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