リワード広告実装方法 - glossom-dev/AdfurikunSDK-Android GitHub Wiki

動画リワード広告

動画リワード広告の初期化

AdfurikunMovieRewardクラスのインスタンスを生成します。
広告枠IDには、アドフリくん管理画面で発行された広告枠IDをセットします。
その後setAdfurikunMovieRewardListenerを呼び出し、引数として後述のリスナーを渡します。

Kotlin
//AdfurikunMovieReward インスタンス変数を定義
private var mReward: AdfurikunMovieReward? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // 広告枠ID・Activityを指定し、動画リワードのインスタンスを生成
    mReward = AdfurikunMovieReward("広告枠ID", this, false)
    mReward.setAdfurikunMovieRewardListener(mListener)
}
Java
//AdfurikunMovieReward インスタンス変数を定義
AdfurikunMovieReward mReward;

@Override
protected void onCreate(Bundle bundle) {
    // 広告枠ID・Activityを指定し、動画リワードのインスタンスを生成
    mReward = new AdfurikunMovieReward("広告枠ID", this, false);
    mReward.setAdfurikunMovieRewardListener(mListener);
}

リスナーの実装

Kotlin
private val mListener = object : AdfurikunMovieRewardListener {
    override fun onPrepareSuccess(isManualMode: Boolean) {
        // 広告の準備完了直後に実行する処理を記述してください
    }

    override fun onPrepareFailure(error: AdfurikunMovieError?) {
        // 広告の準備失敗直後に実行する処理を記述してください
    }

    override fun onStartPlaying(data: MovieRewardData) {
        // 動画の再生開始直後に実行する処理を記述してください        
    }

    override fun onFinishedPlaying(data: MovieRewardData) {
        // 広告の再生が完了した時に実行する処理を記述してください
    }

    override fun onFailedPlaying(data: MovieRewardData, error: AdfurikunMovieError?) {
        // 動画の再生に失敗した時に実行する処理を記述してください
    }

    override fun onAdClose(data: MovieRewardData) {
        // 動画の画面を閉じた時に実行する処理を記述してください
    }
}
Java
AdfurikunMovieRewardListener mListener = new AdfurikunMovieRewardListener() {
    @Override
    public void onPrepareSuccess(boolean isManualMode) {
        // 動画の再生が可能になりました。
        // 状態をフラグなどで管理してください
    }
    
    @Override
    public void onPrepareFailure(AdfurikunMovieError error) {
        // 広告の読み込みが失敗になりました。
        // もう一度広告の読み込みしてください。
    }
    
    @Override
    public void onStartPlaying(MovieRewardData data) {
        // 動画の再生を開始します。
        // 各アドネットワークが用意したActivityが起動して、動画再生が始まります。
    }
    
    @Override
    public void onFinishedPlaying(MovieRewardData data) {
        // 動画の再生が完了しました。
        // リワード 付与など、ユーザへの対応を行ってください。
    }
    
    @Override
    public void onFailedPlaying(MovieRewardData data, AdfurikunMovieError error) {
        // 動画の再生が失敗しました。
        // 再生開始時にネットワークへ接続していない場合も、失敗として通知します。
    }
    
    @Override
    public void onAdClose(MovieRewardData data) {
        // 動画広告のActivityが終了しました。
        // アプリのActivityが復帰します。
    }
}

動画リワード広告のロード

loadメソッドを呼ぶことで各アドネットワークへの表示準備を開始します。

Kotlin
mReward.load()
Java
mReward.load();

動画リワード広告の表示

isPreparedメソッドで広告準備が完了したかを確認し、playメソッドで広告を表示します。
再生準備が完了したアドネットワークの中から、1つ広告が選択されます。

Kotlin
if ( mReward.isPrepared() ) {
    // 再生開始
    mReward.play()
}
Java
if ( mReward.isPrepared() ) {
    // 再生開始
    mReward.play();
}

生成したインスタンスの破棄

Kotlin
override fun onDestroy() {
    mReward?.onDestroy()
    super.onDestroy()
}
Java
@Override
protected void onDestroy() {
    mReward.onDestroy();
    super.onDestroy();
}

広告を視聴したユーザーへの報酬の付与タイミングについて

ユーザーへの報酬の付与は、onAdCloseコールバックが呼ばれた際に行うことを推奨します。

Kotlin
private val mListener = object : AdfurikunMovieRewardListener {
    // ...
    override fun onAdClose(data: MovieRewardData) {
        // このタイミングで報酬の付与を推奨
    }
}
Java
AdfurikunMovieRewardListener mListener = new AdfurikunMovieRewardListener() {
    // ...
    @Override
    public void onAdClose(MovieRewardData data){
        // このタイミングで報酬の付与を推奨
    }
}

広告再生中にホーム画面復帰した場合の報酬付与の問題

AndroidManifest.xml にてlaunchModesingleTaskに設定されている場合、広告再生中にホーム画面に戻り、アプリアイコンから復帰すると、広告画面が自動的に閉じます。この際、広告を最後まで視聴していないためonFinishedPlayingコールバックは発生せず、onAdCloseコールバックのみが発生します。その結果、onAdCloseで報酬を付与している場合、ユーザーが広告を最後まで見なくても報酬が付与される可能性があります。

同様のケースで報酬を付与したくない場合、以下の実装で対応できます。

  • onFinishedPlayingが発生したかどうかをフラグで管理する。
  • onAdCloseでフラグをチェックし、onFinishedPlayingが発生済の場合のみ報酬を付与する。
private val mListener = object : AdfurikunMovieRewardListener {
    // ...
    override fun onStartPlaying(data: MovieRewardData) {
        isInvokedFinishCallback = false // 広告再生時にフラグを初期化する        
    }
    override fun onFinishedPlaying(data: MovieRewardData) {
        isInvokedFinishCallback = true // onFinishedPlaying コールバックが発生したことを記録する
    }
    override fun onAdClose(data: MovieRewardData) {
        if (isInvokedFinishCallback) { // onFinishedPlaying コールバックが発生したケースのみ報酬を付与する
            // 報酬の付与
        }
    }
}
Java
AdfurikunMovieRewardListener mListener = new AdfurikunMovieRewardListener() {
    // ...
    @Override
    public void onStartPlaying(MovieRewardData data) {
        isInvokedFinishCallback = false; // 広告再生時にフラグを初期化する
    }

    @Override
    public void onFinishedPlaying(MovieRewardData data) {
        isInvokedFinishCallback = true; // onFinishedPlaying コールバックが発生したことを記録する
    }

    @Override
    public void onAdClose(MovieRewardData data) {
        if (isInvokedFinishCallback) { // onFinishedPlaying コールバックが発生したケースのみ報酬を付与する
            // 報酬の付与
        }
    }
}
⚠️ **GitHub.com Fallback** ⚠️