インフィード広告実装方法 - 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」 Nativead

広告を組み立てる

広告情報取得

広告種類によって、広告情報クラスAdfurikunNativeAdInfoから取得できる広告情報が決まっています。

プロパティ 変数タイプ ネイティブ モバイルバナー レクタングル 説明 サポートしているアドネットワーク
adnetworkKey String アドネットワークキー すべて
adNetwork enum class AdNetwork アドネットワーク種別 すべて
mediaType enum class MediaType メディア種別
・Movie(動画)
・Image(静止画)
すべて
title String 広告タイトル AfiO
AdMob
desc String 広告説明文 AfiO
mediaView MediaView 広告画面 すべて

広告View以外の画面でもClickできるようにする

広告が表示される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);
}

上記のようにAdfurikunNativeAdInforegisterClickableView()関数を呼び出すことで、
アプリケーションで作成したViewでもClickして遷移するような設定ができます。

AdMob(GAM)のネイティブ広告のカスタマイズ表示

AdMob(GAM)のネイティブ広告では、上記の標準的な表示方法に加えて、
AdMobが提供するUIコンポーネントを使用することで、
アプリケーションのデザインに合わせた柔軟な広告表示が可能です。
詳しくは、AdMob(GAM)のネイティブ広告のカスタマイズ表示をご確認ください。

広告の自動Refresh

広告の表示内容を一定時間おきに更新するには、アプリケーション側での実装が必要です。
以下に記載したサンプルアプリのバナー広告における実装例を参考にしてください。

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回目の広告読み込み
↓
...
⚠️ **GitHub.com Fallback** ⚠️