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

動画リワード

実装準備

プロジェクトにSDKを追加していない場合、以下のいずれかの方法でSDKを追加してください。

実装

実装手順より、SerializeFieldを利用して、AdfurikunMovieRewardUtilityを定義した状態だとします。

デリゲートコールバック実装、初期化

public class RewardScene : MonoBehaviour
{
    [SerializeField] private AdfurikunMovieRewardUtility rewardUtility;

    void Start()
    {
        //デリゲートコールバックを設定する。
        rewardUtility.onPrepareSuccess = HandlePrepareSuccess;
        rewardUtility.onPrepareFailure = HandlePrepareFailure;
        rewardUtility.onStartPlaying = HandleStartPlaying;
        rewardUtility.onFinishPlaying = HandleFinishPlaying;
        rewardUtility.onFailedPlaying = HandleFailedPlaying;
        rewardUtility.onCloseAd = HandleCloseAd;

        //初期化
        var configAppID = rewardUtility.GetConfigAppID();
        if (configAppID != "") 
        {
            rewardUtility.InitializeMovieReward(configAppID);
        }
        else
        {
            rewardUtility.InitializeMovieReward(広告枠ID);
        }
    }

    //以下、Start()で設定したデリゲートコールバック
    void HandlePrepareSuccess(string appId, bool isManualMode)
    {
         //広告準備完了
    }

    void HandlePrepareFailure(string appId, int errorCode, List<AdNetworkError> adNetworkErrorList)
    {
        //広告準備失敗
    }

    void HandleStartPlaying(string appId, string adNetworkKey)
    {
        //動画再生開始
    }

    void HandleFinishPlaying(string appId, string adNetworkKey)
    {
        //動画再生完了
    }

    void HandleFailedPlaying(string appId, string adNetworkKey, List<AdNetworkError> adNetworkErrorList)
    {
        //動画再生失敗
    }

    void HandleCloseAd(string appId, string adNetworkKey, bool isRewarded)
    {
        //広告終了
    }
}

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

LoadMovieReward()関数で広告をロードします。 ロード成功すると、onPrepareSuccessのコールバックが呼ばれます。 失敗すると、onPrepareFailureのコールバックが呼ばれます。

public void Load()
{
    rewardUtility.LoadMovieReward();
}

動画リワード広告の表示

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

public void Show()
{
    if (rewardUtility != null && rewardUtility.IsPreparedMovieReward())
    {
        rewardUtility.PlayMovieReward();
    }
}

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

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

void onCloseAd(string appId , string adnetworkKey, bool isRewarded)
{
    if (isRewarded)
    {
        // 報酬の付与
    }
}

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

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

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

  • onFinishPlaying が発生したかどうかをフラグで管理する。
  • onCloseAd でフラグをチェックし、onFinishPlayingが発生済の場合のみ報酬を付与する。
/**
 動画再生開始時
 */
void HandleStartPlaying(string appId, string adNetworkKey)
{
    isInvokedFinishCallback = false; // 広告再生時にフラグを初期化する
}

/*
 動画再生完了時
 */
void HandleFinishPlaying(string appId, string adNetworkKey)
{
    isInvokedFinishCallback = true; // onFinishPlaying コールバックが発生したことを記録する
}

/*
 広告終了時
 */
void HandleCloseAd(string appId, string adNetworkKey)
{
    if (isInvokedFinishCallback) { // onFinishPlaying コールバックが発生したケースのみ報酬を付与する
        // 報酬を付与する
    }
}