GS2-Showcase SDK for Game Engine API リファレンス
モデル
EzSalesItem
商品
商品を購入するために必要となる対価と商品を購入したときに得られる報酬を設定します。
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
name | string | ✓ | ~ 128文字 | 商品名 | |
metadata | string | ~ 2048文字 | メタデータ | ||
verifyActions | List<EzVerifyAction> | ~ 10 items | 検証アクションリスト | ||
consumeActions | List<EzConsumeAction> | ~ 10 items | 消費アクションリスト | ||
acquireActions | List<EzAcquireAction> | ✓ | 1 ~ 100 items | 入手アクションリスト |
EzSalesItemGroup
商品グループ
商品グループは陳列棚に陳列するためのエンティティです。
商品グループには複数の商品を所属させることができ、所属している商品の先頭から順番に購入可能かを判定し、一番最初に購入可能だと判定された商品が実際に陳列されます。
初回のみ割引する商品や、ステップアップガチャのように購入回数によって商品の内容が変化する仕組みに使用できます。
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
name | string | ✓ | ~ 128文字 | 商品グループ名 | |
metadata | string | ~ 2048文字 | メタデータ | ||
salesItems | List<EzSalesItem> | ✓ | 2 ~ 10 items | 商品グループに含める商品 |
EzShowcase
陳列棚
陳列棚には販売期間を設定できます。
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
name | string | ✓ | ~ 128文字 | 陳列棚名 | |
metadata | string | ~ 2048文字 | メタデータ | ||
displayItems | List<EzDisplayItem> | ✓ | 1 ~ 1000 items | 陳列された商品リスト |
EzDisplayItem
陳列する商品
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
displayItemId | string | ✓ | UUID | ~ 128文字 | 陳列商品ID |
type | enum { “salesItem”, “salesItemGroup” } | ✓ | ~ 128文字 | 種類 | |
salesItem | EzSalesItem | {type} == “salesItem” | 陳列する商品 | ||
salesItemGroup | EzSalesItemGroup | {type} == “salesItemGroup” | 陳列する商品グループ |
type に指定する列挙型の定義
定義 | 説明 |
---|---|
salesItem | 商品 |
salesItemGroup | 商品グループ |
EzRandomDisplayItem
ランダム陳列棚に陳列された商品
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
name | string | ✓ | UUID | ~ 128文字 | ランダム陳列商品ID |
metadata | string | ~ 2048文字 | メタデータ | ||
verifyActions | List<EzVerifyAction> | ~ 10 items | 検証アクションリスト | ||
consumeActions | List<EzConsumeAction> | ~ 10 items | 消費アクションリスト | ||
acquireActions | List<EzAcquireAction> | ✓ | 1 ~ 100 items | 入手アクションリスト | |
currentPurchaseCount | int | ✓ | 1 ~ 2147483646 | 現在の購入回数 | |
maximumPurchaseCount | int | ✓ | 1 ~ 2147483646 | 最大購入回数 |
EzConfig
コンフィグ設定
トランザクションの変数に適用する設定値
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
key | string | ✓ | ~ 64文字 | 名前 | |
value | string | ~ 51200文字 | 値 |
EzConsumeAction
消費アクション
EzVerifyAction
検証アクション
EzAcquireAction
入手アクション
EzVerifyActionResult
検証アクションの実行結果
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
action | enum { } | ✓ | ~ 128文字 | 検証アクションで実行するアクションの種類 | |
verifyRequest | string | ✓ | ~ 1048576文字 | リクエストのJSON | |
statusCode | int | ~ 999 | ステータスコード | ||
verifyResult | string | ~ 1048576文字 | 結果内容 |
action に指定する列挙型の定義
定義 | 説明 |
---|
EzConsumeActionResult
消費アクションの実行結果
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
action | enum { } | ✓ | ~ 128文字 | 消費アクションで実行するアクションの種類 | |
consumeRequest | string | ✓ | ~ 1048576文字 | リクエストのJSON | |
statusCode | int | ~ 999 | ステータスコード | ||
consumeResult | string | ~ 1048576文字 | 結果内容 |
action に指定する列挙型の定義
定義 | 説明 |
---|
EzAcquireActionResult
入手アクションの実行結果
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
action | enum { } | ✓ | ~ 128文字 | 入手アクションで実行するアクションの種類 | |
acquireRequest | string | ✓ | ~ 1048576文字 | リクエストのJSON | |
statusCode | int | ~ 999 | ステータスコード | ||
acquireResult | string | ~ 1048576文字 | 結果内容 |
action に指定する列挙型の定義
定義 | 説明 |
---|
EzTransactionResult
トランザクション実行結果
サーバーサイドでのトランザクションの自動実行機能を利用して実行されたトランザクションの実行結果
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
transactionId | string | ✓ | 36 ~ 36文字 | トランザクションID | |
verifyResults | List<EzVerifyActionResult> | ~ 10 items | 検証アクションの実行結果リスト | ||
consumeResults | List<EzConsumeActionResult> | ~ 10 items | 消費アクションの実行結果リスト | ||
acquireResults | List<EzAcquireActionResult> | ~ 100 items | 入手アクションの実行結果リスト |
メソッド
buy
商品を購入します
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
showcaseName | string | ✓ | ~ 128文字 | 陳列棚名 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID | |
displayItemId | string | ✓ | UUID | ~ 128文字 | 陳列商品ID |
quantity | int | ✓ | 1 | 1 ~ 1000 | 購入数量 |
config | List<EzConfig> | [] | ~ 32 items | トランザクションの変数に適用する設定値 |
Result
型 | 説明 | |
---|---|---|
item | EzSalesItem | 商品 |
transactionId | string | 発行されたトランザクションID |
stampSheet | string | 購入処理の実行に使用するスタンプシート |
stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN |
autoRunStampSheet | bool | トランザクションの自動実行が有効か |
atomicCommit | bool | トランザクションをアトミックにコミットするか |
transaction | string | 発行されたトランザクション |
transactionResult | EzTransactionResult | トランザクション実行結果 |
実装例
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
).DisplayItem(
displayItemId: "display-item-0001"
);
var result = await domain.BuyAsync(
quantity: null,
config: null
);
// New Experience ではスタンプシートはSDKレベルで自動的に実行されます。
// エラーが発生すると TransactionException がスローされます。
// TransactionException::Retry() でリトライが可能です。
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
).DisplayItem(
displayItemId: "display-item-0001"
);
var future = domain.BuyFuture(
quantity: null,
config: null
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
// New Experience ではスタンプシートはSDKレベルで自動的に実行されます。
// エラーが発生すると TransactionException がスローされます。
// TransactionException::Retry() でリトライが可能です。
const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Showcase(
"showcase-0001" // showcaseName
)->DisplayItem(
"display-item-0001" // displayItemId
);
const auto Future = Domain->Buy(
// quantity
// config
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
getShowcase
商品棚を取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID | |
showcaseName | string | ✓ | ~ 128文字 | 陳列棚名 |
Result
型 | 説明 | |
---|---|---|
item | EzShowcase | 陳列棚 |
実装例
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
);
var item = await domain.ModelAsync();
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Showcase(
"showcase-0001" // showcaseName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
値の変更イベントハンドリング
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId);
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Showcase(
showcaseName: "showcase-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Showcase(
"showcase-0001" // showcaseName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Showcase::Model::FShowcase> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
getRandomShowcaseDisplayItem
ランダム陳列棚の商品を取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID | |
showcaseName | string | ✓ | ~ 128文字 | ランダム陳列棚名 | |
displayItemName | string | ✓ | UUID | ~ 128文字 | ランダム陳列商品ID |
Result
型 | 説明 | |
---|---|---|
item | EzRandomDisplayItem | 商品 |
実装例
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
);
var item = await domain.ModelAsync();
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->RandomShowcase(
"showcase-0001" // showcaseName
)->RandomDisplayItem(
"display-item-0001" // displayItemName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
値の変更イベントハンドリング
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId);
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->RandomShowcase(
"showcase-0001" // showcaseName
)->RandomDisplayItem(
"display-item-0001" // displayItemName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Showcase::Model::FRandomDisplayItem> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
listRandomShowcaseDisplayItems
ランダム陳列棚の商品一覧を取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID | |
showcaseName | string | ✓ | ~ 128文字 | ランダム陳列棚名 |
Result
型 | 説明 | |
---|---|---|
items | List<EzRandomDisplayItem> | 商品一覧 |
実装例
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
);
var items = await domain.RandomDisplayItemsAsync(
).ToListAsync();
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
);
var it = domain.RandomDisplayItems(
);
List<EzRandomDisplayItem> items = new List<EzRandomDisplayItem>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
}
const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->RandomShowcase(
"showcase-0001" // showcaseName
);
const auto It = Domain->RandomDisplayItems(
);
TArray<Gs2::UE5::Showcase::Model::FEzRandomDisplayItemPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}
値の変更イベントハンドリング
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
);
// イベントハンドリングを開始
var callbackId = domain.SubscribeRandomDisplayItems(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribeRandomDisplayItems(callbackId);
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
);
var it = domain.RandomDisplayItems(
);
List<EzRandomDisplayItem> items = new List<EzRandomDisplayItem>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
}
const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->RandomShowcase(
"showcase-0001" // showcaseName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->SubscribeRandomDisplayItems(
[]() {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
Domain->UnsubscribeRandomDisplayItems(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
randomShowcaseBuy
ランダム陳列棚の商品を購入します
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
showcaseName | string | ✓ | ~ 128文字 | ランダム陳列棚名 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID | |
displayItemName | string | ✓ | UUID | ~ 128文字 | ランダム陳列商品ID |
quantity | int | ✓ | 1 | 1 ~ 1000 | 購入数量 |
config | List<EzConfig> | [] | ~ 32 items | トランザクションの変数に適用する設定値 |
Result
型 | 説明 | |
---|---|---|
item | EzRandomDisplayItem | 購入した商品 |
transactionId | string | 発行されたトランザクションID |
stampSheet | string | 購入処理の実行に使用するスタンプシート |
stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN |
autoRunStampSheet | bool | トランザクションの自動実行が有効か |
atomicCommit | bool | トランザクションをアトミックにコミットするか |
transaction | string | 発行されたトランザクション |
transactionResult | EzTransactionResult | トランザクション実行結果 |
実装例
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
);
var result = await domain.RandomShowcaseBuyAsync(
quantity: 1,
config: null
);
// New Experience ではスタンプシートはSDKレベルで自動的に実行されます。
// エラーが発生すると TransactionException がスローされます。
// TransactionException::Retry() でリトライが可能です。
var domain = gs2.Showcase.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).RandomShowcase(
showcaseName: "showcase-0001"
).RandomDisplayItem(
displayItemName: "display-item-0001"
);
var future = domain.RandomShowcaseBuyFuture(
quantity: 1,
config: null
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
// New Experience ではスタンプシートはSDKレベルで自動的に実行されます。
// エラーが発生すると TransactionException がスローされます。
// TransactionException::Retry() でリトライが可能です。
const auto Domain = Gs2->Showcase->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->RandomShowcase(
"showcase-0001" // showcaseName
)->RandomDisplayItem(
"display-item-0001" // displayItemName
);
const auto Future = Domain->RandomShowcaseBuy(
1 // quantity
// config
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}