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

実装例

動画の視聴を開始

各広告プラットフォームの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;
    });

詳細なリファレンス