インフィード広告実装方法 - glossom-dev/AdfurikunSDK-Android GitHub Wiki
アドフリくんでは、次の3種類の広告を総称して「インフィード広告」と呼んでいます。
- ネイティブ広告
- モバイルバナー広告
- レクタングル広告
このページでは、「ネイティブ広告」を基に、実装方法を説明します。
広告タイプによって使用するオブジェクト名やリスナー名は異なりますが、実装手順は概ね同じです。
以下のテーブルを参考に、用語を読み替えて実装してください。
広告種類 | クラス名 | リスナー名 | 広告情報クラス名 |
---|---|---|---|
ネイティブ | AdfurikunNativeAd | AdfurikunNativeAdLoadListener(読込専用) AdfurikunNativeAdVideoListener(再生専用) |
AdfurikunNativeAdInfo |
モバイルバナー | AdfurikunBanner | AdfurikunBannerLoadListener(読込専用) AdfurikunBannerVideoListener(再生専用) |
AdfurikunBannerAdInfo |
レクタングル | AdfurikunRectangle | AdfurikunRectangleLoadListener(読込専用) AdfurikunRectangleVideoListener(再生専用) |
AdfurikunRectangleAdInfo |
AdfurikunNativeAd
クラスのインスタンスを生成します。
広告枠ID
には、アドフリくん管理画面で発行された広告枠IDをセットします。
その後setAdfurikunAppOpenAdListener
を呼び出し、引数として後述のリスナーを渡します。
さらにgetNativeAdView
で広告ビューを取得し、画面に貼り付けます。
Kotlin
//AdfurikunNativeAd インスタンス変数を定義
private var mNativeAd: AdfurikunNativeAd? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 広告枠ID・Activityを指定し、インフィード広告のインスタンスを生成
mNativeAd = AdfurikunNativeAd(this, "広告枠ID", 320, 180)
// 読み込み通知リスナーをセット
mNativeAd.setAdfurikunNativeAdLoadListener(mLoadListener)
// 再生通知リスナーをセット
mNativeAd.setAdfurikunNativeAdVideoListener(mVideoListener)
// ネイティブ広告ビューを貼る
containerView.addView(mNativeAd.getNativeAdView())
}
Java
//AdfurikunNativeAd インスタンス変数を定義
AdfurikunNativeAd mNativeAd;
@Override
protected void onCreate(Bundle bundle) {
// 広告枠ID・Activityを指定し、インフィード広告のインスタンスを生成
mNativeAd = new AdfurikunNativeAd(this, "広告枠ID", 320, 180);
// 読み込み通知リスナーをセット
mNativeAd.setAdfurikunNativeAdLoadListener(mLoadListener);
// 再生通知リスナーをセット
mNativeAd.setAdfurikunNativeAdVideoListener(mVideoListener);
// ネイティブ広告ビューを貼る
containerView.addView(mNativeAd.getNativeAdView());
}
Kotlin
//ロードリスナーを定義
private val mLoadListener = object : AdfurikunNativeAdLoadListener {
override fun onNativeAdLoadFinish(adInfo: AdfurikunNativeAdInfo?, appId: String?) {
//ロード成功時に呼ばれます
}
override fun onNativeAdLoadError(error: AdfurikunMovieError?, appId: String?) {
//ロード失敗時に呼ばれます
}
}
//広告リスナーを定義
private val mVideoListener = object : AdfurikunNativeAdVideoListener {
override fun onNativeAdViewPlayStart(appId: String?) {
//広告の再生が開始された場合にメインスレッドでコールバックされます
}
override fun onNativeAdViewPlayFinish(appId: String?, isVideoAd: Boolean) {
// 広告の再生が完了した場合にメインスレッドでコールバックされます
}
override fun onNativeAdViewPlayFail(appId: String?, error: AdfurikunMovieError?) {
// 広告の再生に失敗した場合にメインスレッドでコールバックされます
}
override fun onNativeAdViewClicked(appId: String?) {
// 広告がクリックされた場合にメインスレッドでコールバックされます
}
}
Java
//ロードリスナーを定義
AdfurikunNativeAdLoadListener mListener = new AdfurikunNativeAdLoadListener() {
@Override
public void onNativeAdLoadFinish(AdfurikunNativeAdInfo adInfo, String appId) {
//ロード成功時に呼ばれます
}
@Override
public void onNativeAdLoadError(AdfurikunMovieError errorObject, String appId) {
//ロード失敗時に呼ばれます
}
}
//広告リスナーを定義
AdfurikunNativeAdVideoListener mVideoListener = new AdfurikunNativeAdVideoListener() {
@Override
public void onNativeAdViewPlayStart(String appId) {
//広告の再生が開始された場合にメインスレッドでコールバックされます
}
@Override
public void onNativeAdViewPlayFinish(String appId, boolean isVideoAd) {
// 広告の再生が完了した場合にメインスレッドでコールバックされます
}
@Override
public void onNativeAdViewPlayFail(String appId, AdfurikunMovieError error) {
// 広告の再生に失敗した場合にメインスレッドでコールバックされます
}
@Override
public void onNativeAdViewClicked(String appId) {
// 広告がクリックされた場合にメインスレッドでコールバックされます
}
}
load
メソッドを呼ぶことで各アドネットワークへの表示準備を開始します。
Kotlin
mNativeAd.load()
Java
mNativeAd.load();
isPrepared
メソッドで広告準備が完了したかを確認し、play
メソッドで広告を表示します。
再生準備が完了したアドネットワークの中から、1つ広告が選択されます。
再生が完了(あるいは失敗)したアドネットワークは、自動的に次の広告の準備が行われます。
Kotlin
if ( mNativeAd.isPrepared ) {
// 再生開始
mNativeAd.play()
}
Java
if ( mNativeAd.isPrepared ) {
// 再生開始。
mNativeAd.play();
}
Kotlin
override fun onDestroy() {
mNativeAd?.remove()
super.onDestory()
}
Java
@Override
protected void onDestroy() {
mNativeAd.remove();
super.onDestroy();
}
広告の視認性確保のため、以下を目安に実装をお願いします。
- 縦画面: 動画広告の横幅が画面横幅の50%以上であること
- 横画面: 動画広告の横幅が画面横幅の25%以上であること
※上記基準を下回る場合は、広告の配信が停止される可能性がございますので、ご了承ください。
広告であるということを必ず明記してください。 以下の例を参考の上記載をお願いいたします。
例:「PR」「スポンサー広告」「Sponsored」「広告」「AD」
広告種類によって、広告情報クラスAdfurikunNativeAdInfo
から取得できる広告情報が決まっています。
プロパティ | 変数タイプ | ネイティブ | モバイルバナー | レクタングル | 説明 | サポートしているアドネットワーク |
---|---|---|---|---|---|---|
adnetworkKey |
String | ○ | ○ | ○ | アドネットワークキー | すべて |
adNetwork |
enum class AdNetwork | ○ | ○ | ○ | アドネットワーク種別 | すべて |
mediaType |
enum class MediaType | ○ | ○ | ○ | メディア種別 ・Movie(動画) ・Image(静止画) |
すべて |
title |
String | ○ | ☓ | ☓ | 広告タイトル | AfiO AdMob |
desc |
String | ○ | ☓ | ☓ | 広告説明文 | AfiO |
mediaView |
MediaView | ○ | ○ | ○ | 広告画面 | すべて |
広告が表示されるMediaView以外でも、アプリで作成したテキスト、ボタンなどのViewに対しても
Clickした時に広告へ遷移させることが出来ます。
@Override
public void onNativeAdLoadFinish(AdfurikunNativeAdInfo adInfo, String appId) {
titleView.setText(adInfo.getTitle());
ArrayList<View> clickableViews = new ArrayList<>();
clickableViews.add(titleView);
adInfo.registerClickableView(clickableViews);
}
上記のようにAdfurikunNativeAdInfo
のregisterClickableView()
関数を呼び出すことで、
アプリケーションで作成したViewでもClickして遷移するような設定ができます。
AdMob(GAM)のネイティブ広告では、上記の標準的な表示方法に加えて、
AdMobが提供するUIコンポーネントを使用することで、
アプリケーションのデザインに合わせた柔軟な広告表示が可能です。
詳しくは、AdMob(GAM)のネイティブ広告のカスタマイズ表示をご確認ください。
広告の表示内容を一定時間おきに更新するには、アプリケーション側での実装が必要です。
以下に記載したサンプルアプリのバナー広告における実装例を参考にしてください。
private lateinit var mAdContainer: FrameLayout
private var mBanner: AdfurikunBanner? = null
private val mLoadListener = object : AdfurikunBannerLoadListener {
override fun onBannerLoadFinish(adInfo: AdfurikunBannerAdInfo?, appId: String?) {
Utils.log("onBannerLoadFinish appId = $appId")
Toast.makeText(this@SimpleBannerAutoRefresh, "広告を切り替え", Toast.LENGTH_SHORT).show()
mBanner?.play()
mAdContainer.visibility = View.VISIBLE
Handler(Looper.getMainLooper()).postDelayed({
mBanner?.load() // AUTO_REFRESH_INTERVAL の秒数後に広告の再読み込み
}, AUTO_REFRESH_INTERVAL)
}
}
companion object {
private const val AUTO_REFRESH_INTERVAL = 60 * 1000L // 60秒
}
1回目の広告を表示して一定時間経過後、再度広告の読み込みを行います。
読み込みが完了すると、自動で表示を切り替えます。
1回目の広告読み込み
↓
広告読み込み完了 & 表示
↓
一定時間後、2回目の広告読み込み
↓
広告読み込み完了 & 表示
↓
一定時間後、3回目の広告読み込み
↓
...