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;
});