GS2-AdReward

広告リワード機能

モバイルゲームのマネタイズ手法としてプレイヤーに広告を視聴してもらい、広告プラットフォームから報酬を得ることも一般的になりました。 広告が正しく視聴された時に広告プラットフォームからサーバー間連携で通知をもらい、GS2に報酬を付与することでチート行為を防ぐことができます。

視聴ポイント

一般的に GS2 では対価と報酬を設定してリソースの交換を行っていますが、サーバー間通信の仕様が広告プラットフォームごとに異なり、データの粒度も異なるため GS2-Reward では広告の視聴が確認できた際に《視聴ポイント》を1ポイント加算するようになっています。

獲得した《視聴ポイント》は GS2-Exchange や GS2-Showcase などで使用可能な消費アクションとして消費できます。

graph TD
  InGame["ゲーム"] -- 広告を視聴 --> ViewAd["広告"]
  ViewAd -- 広告の視聴が完了 --> AdPlatform2["広告プラットフォーム"]
  ViewAd -- 広告の視聴が完了 --> InGame2["ゲーム"]
  AdPlatform2 -- 広告の視聴完了を通知 --> AdReward["GS2-AdReward"]
  AdReward --> AddPoint["ポイントを付与"]
  AdReward -- ポイント付与を通知 --> InGame2
  InGame2 -- 視聴ポイントとアイテムを交換 --> Exchange["GS2-Exchange"]

対応している広告プラットフォーム

現在 GS2-AdReward は以下の広告プラットフォームに対応しています。 追加で対応を希望される場合はサポートにご連絡ください。

  • AdMob(Google Mobile Ads)
  • Unity Ads

AdMob の設定

《広告ユニット》の設定で《サーバーサイドの検証》を有効化し、GS2が発行したURLを設定する必要があります。 設定手順は以下を確認ください。

https://support.google.com/admob/answer/9603226

ネームスペースの設定に、報酬付与の対象とする広告ユニットIDを設定してください。

コールバックURLの例

https://ad-reward.{region}.gen2.gs2io.com/callback/{ownerId}/{namespaceName}/admob

Unity Ads の設定

Unity Ads から発行された Game ID と GS2が発行したURLを指定して、秘密鍵を発行してもらってください。 設定手順は以下を確認ください。

https://docs.unity.com/ads/en-us/manual/ImplementingS2SRedeemCallbacks

ネームスペースの設定に、秘密鍵を設定してください。

コールバックURLの例

https://ad-reward.{region}.gen2.gs2io.com/callback/{ownerId}/{namespaceName}/unityad

AppLovin MAX の設定

Namespace に AppLovin MAX 用の設定を追加することで、視聴完了 WebHook からポイントを付与できるようになります。

許可する広告ユニット ID (allowAdUnitId) を登録しておくと、コールバックに含まれる adUnitId を照合し、不正なリクエストを遮断できます。 イベントキー (eventKey) を設定することで、WebHook が正規の発信元から送信されたことを検証します。

コールバック URL 例:

https://ad-reward.{region}.gen2.gs2io.com/callback/{ownerId}/{namespaceName}/applovinmax

プッシュ通知

設定できる主なプッシュ通知と設定名は以下の通りです。

  • changePointNotification: 広告視聴でポイントが変動したときに通知

実装例

動画の視聴を開始

各広告プラットフォームのSDKを直接利用して動画を視聴しても問題ありません。 ここでの実装例は GS2-SDK で提供しているユーティリティクラスを使用した実装例を示します。

AdMob

    await AdMobUtil.InitializeAsync(
        new RequestConfiguration() {
            TestDeviceIds = new List<string> {
                "4cd8a25ecc6250e3c140e365e5a543ff", // テストデバイスID
            },
        }
    );
    await AdMobUtil.ViewFuture(
        "ca-app-pub-8090851552121537/9708453802", // 広告ユニットID
        GameSession // ログインセッション
    );

Unity Ads

    await UnityAdUtil.InitializeAsync(
        "5416096" // Unity Ads のゲームID
    );
    await UnityAdUtil.ViewAsync(
        "test", // Placement ID
        GameSession // ログインセッション
    );

現在の広告ポイントを取得

    var domain = gs2.AdReward.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Point(
    );
    var item = await domain.ModelAsync();
    const auto Domain = Gs2->AdReward->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        AccessToken
    )->Point(
    );
    const auto Future = Domain.Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

視聴ポイントの加算コールバック

    gs2.AdReward.OnChangePointNotification += notification =>
    {
        var namespaceName = notification.NamespaceName;
    };
    Gs2->AdReward->OnChangePointNotification().AddLambda([](const auto Notification)
    {
        const auto NamespaceName = Notification->NamespaceNameValue;
    });

その他の機能

カスタムスクリプトトリガー

ポイント処理の前後に GS2-Script を呼び出すイベントトリガーを設定できます。ゲーム固有の検証や監査を行う際に活用できます。トリガーは同期・非同期の実行方式を選択でき、非同期処理では GS2-Script や Amazon EventBridge を利用した外部連携も可能です。

設定できる主なイベントトリガーとスクリプト設定名は以下の通りです。

  • acquirePointScript(完了通知: acquirePointDone): 広告視聴などでポイントを加算の前後
  • consumePointScript(完了通知: consumePointDone): 視聴ポイントをアイテム交換などで消費する前後

詳細なリファレンス