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

動画リワード広告実装方法

実装準備

SDKの導入がまだの場合は、以下の手順で導入頂く必要があります。

アドフリくん動画リワード広告のインポート

import { 
  AdfurikunReward, 
  AdfurikunRewardCallbackResult, 
  AdfurikunRewardCallbackType } from 'react-native-adfurikunsdk';

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

AdfurikunRewardクラスのインスタンスを生成します。 引数には、アドフリくん管理画面で発行された広告枠IDを設定して下さい。

// リワード広告のプロパティを宣言します。
var reward: AdfurikunReward = null;

export const RewardScreen: React.FC = () => {

  React.useEffect(
    () => {
      // リワード広告のインスタンスを生成します。
      reward = new AdfurikunReward(appId);
    }, []);

動画リワード広告のリスナー設定

アドフリくんからのコールバックを設定します。

export const RewardScreen: React.FC = () => {

  React.useEffect(
    () => {
      // コールバックを設定します
      reward.setCallback((item) => notifyCallback(item));
    }, []);
  
  function notifyCallback(item: AdfurikunRewardCallbackResult): void {
    if (AdfurikunRewardCallbackType.onPrepareSuccess == item.type) {
      // 広告のロードが成功しました。
    } else if (AdfurikunRewardCallbackType.onPrepareFailure == item.type) {
      // 広告のロードが失敗しました。
    } else if (AdfurikunRewardCallbackType.onStartPlaying == item.type) {
      // 広告の再生を開始しました。
    } else if (AdfurikunRewardCallbackType.onFinishedPlaying == item.type) {
      // 広告の再生が完了しました。
    } else if (AdfurikunRewardCallbackType.onFailedPlaying == item.type) {
      // 広告の再生中にエラーが発生しました。
    } else if (AdfurikunRewardCallbackType.onAdClose == item.type) {
      // 広告を閉じました。
    }
  }

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

load関数で広告をロードします。 ロード成功すると、コールバックのtype引数にAdfurikunRewardCallbackType.onPrepareSuccessが送られます。 失敗するとAdfurikunRewardCallbackType.onPrepareFailureが送られます。

if (reward != null) {
  reward.load();
}

動画リワード広告の表示

isPrepared関数の戻り値がtrueになる事を確認し、play関数で広告を再生します。

async function play() {
  if (reward != null) {
    var isPrepared = await reward.isPrepared();
    if (isPrepared) {
      reward.play();
    }
  }
}

・再生準備が完了したアドネットワークの中から、1つアドネットワークが選択されます。

動画リワード広告の破棄

AdfurikunRewardインスタンスを使わなくなった場合、destroy関数を呼び出して下さい。

React.useEffect(
  () => {
    return () => {
      if (reward != null) {
        reward.destroy();
        reward = null;
      }
    }
  }, []);

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

報酬の付与は、onCloseAd関数が呼ばれた際にユーザーへ報酬を付与する事を推奨します。 isRewarded が true の場合のみ、報酬を付与するよう追記してください。

function notifyCallback(item: AdfurikunRewardCallbackResult): void {
  ・・・
  if (AdfurikunRewardCallbackType.onAdClose == item.type) {
    if (item.isRewarded) {
      // 報酬の付与
    }
  }
  ・・・
}  

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

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

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

  • onFinishedPlayingが発生したかどうかをフラグで管理する。
  • onAdCloseでフラグをチェックし、onFinishedPlayingが発生済の場合のみ報酬を付与する。
function notifyCallback(item: AdfurikunRewardCallbackResult): void {
  ・・・
  if (AdfurikunRewardCallbackType.onStartPlaying == item.type) {
    isInvokedFinishCallback = false; // 広告再生時にフラグを初期化する
  } else if (AdfurikunRewardCallbackType.onFinishedPlaying == item.type) {
    isInvokedFinishCallback = true; // onFinishedPlaying コールバックが発生したことを記録する
 } else if (AdfurikunRewardCallbackType.onAdClose == item.type) {
    if (isInvokedFinishCallback) { // onFinishedPlaying コールバックが発生したケースのみ報酬を付与する
      // 報酬の付与
    }
  }
  ・・・
}