Banner Integration For Android - Hiroaki-Shinoda/Geniee-Android-SDK GitHub Wiki
Android バナー広告の実装
バナー広告は、アプリ画面の下部、上部に配置する広告です。
広告枠のサイズ設定より、アイコン型広告、インライン型広告として配置可能です。
実装準備
バナー広告の実装準備は、下記スタートガイドより、
Geniee SDK をプロジェクトにインストール必要です。
スタートガイド
クラスとインタフェース
Android バナー広告配信には、下記クラスを使用します。
- GNAdView 非同期でバナー広告を取得、表示用クラス
- GNAdEventListener バナー広告サイクルイベント処理用インタフェース
バナー広告の取得と表示
-
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;
-
GNAdView
の変数を宣言します。GNAdView adView;
-
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を設定します。
-
広告を画面に追加します。
final LinearLayout layout = (LinearLayout)findViewById(R.id.layout); layout.addView(adView, LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
-
アクティビティ画面を表示時に、広告をロード、表示します。
adView.startAdLoop();
startAdLoop() を呼び出すと、GNAdViewは広告のロードを開始し、
自動的に広告のローテーション表示を開始します。
-
アクティビティ画面を非表示時に、広告のローテーション表示を停止します。
adView.stopAdLoop();
-
アクティビティ画面を終了時に、
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 広告のロード結果を受け取る用インターフェース
複数枠の広告の取得
-
GNAdViewRequest
とGNAdView
をインポートします。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;
-
GNAdViewRequestListener
インターフェースを実装します。public class MultipleBannerSampleActivity extends ListActivity implements GNAdViewRequestListener { }
-
GNAdViewRequest
の変数を宣言します。GNAdViewRequest multiAdViewRequest;
-
GNAdViewRequest
のインスタンスを初期化します。multiAdViewRequest = new GNAdViewRequest(this, "APPID1,APPID2,APPID3,...,APPID10");
thisパラメータは、アプリのContextを設定します。
-
GNAdViewRequestListener
のlistenerを設定します。
複数広告ロードイベントの結果は、listener経由で通知されます。
GNAdViewRequestListener
インターフェースを実装したインスタンス変数を設定します。multiAdViewRequest.setAdListener(this);
-
複数広告をロードします。
multiAdViewRequest.loadAds(this);
thisパラメータは、アプリのContextを設定します。
-
GNAdViewRequestListener
インターフェースの実装
GNAdViewRequestListener
のコールバック関数実装し、
広告のロードイベントの結果を受け取ります。public abstract void onGNAdViewsLoaded(GNAdView[] adViews); public abstract void onGNAdViewsFailedToLoad(); public abstract boolean onShouldStartInternalBrowserWithClick(String landingURL);
受信した広告GNAdView
は、配列のadViews
引数で渡されます。
複数広告の振り分け処理には、GNAdView
のgetAppId()
情報で行います。
配列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を設定します。