GS2-SerialKey
ゲーム外の物販などを通じてゲーム内アイテムを配布したい場合に使用できます。
ただし、この機能は一部プラットフォーマーは実装を許していないため、採用にあたってはプラットフォーマーのガイドラインを確認するようにしてください。
シリアルコードは2種類あり、「1回使用すると2度と使用できなくなるコード」「1つのコードを複数人で共有するコード」があります。 前者を「シリアルキー」後者を「キャンペーンコード」と呼びます。
シリアルキー
1回使用すると2度と使用できなくなるコード です。
シリアルキーは「RPCLP-FP7N-NCDMJ-FLVA-IRI4」のような形式で発行され、データ長を変更することはできません。 シリアルキー内にはキャンペーンの種類の情報も含まれており、シリアルキーを使用する際にはネームスペースを指定するだけで使用できます。
シリアルキーの発行
対象のキャンペーンと発行数量を指定してシリアルキーの発行処理を実行することで、シリアルキーが発行されます。 発行されたシリアルキーのリストはCSV形式でダウンロードが可能です。
シリアルキーの状態
シリアルキーは以下の状態を持ちます
- ACTIVE
- USED
- INACTIVE
実際にプレイヤーが利用できる状態が ACTIVE で、使用すると USED になります。 運営サイドでシリアルキーを無効化すると INACTIVE になります。
キャンペーン
「シリアルコード」も「キャンペーンコード」もキャンペーンに属します。
キャンペーンは GS2-Schedule のイベントと関連づけることで有効期間を設定することが可能です。 「キャンペーンコード」は「キャンペーンの名前」としてつけた任意の英数字の文字列を使用でき、キャンペーンコードで引き換えをできるようにするかを設定できます。
コードによる引き換え回数制限
キャンペーンコードでの引き換えは何もしなければ、何回でも引き換えが可能です。
普通は「一度引き換えを行ったら二度と引き換えできなくする」か「一定期間引き換えをできなくしたい」といった要件があるはずですし、 キャンペーンコードにしろ、シリアルキーにしろ「同一キャンペーンでの引き換え可能な総回数に制限を設けたい」など、様々な要件があるはずです。
GS2-SerialKey はそのような制限機能はもたず、純粋に入力されたシリアルキーが有効かだけを判断する機能を提供します。 そのため、GS2-SerialKey 自身は交換を実行した時に得られる報酬も持ちません。
シリアルキーを使用する場合の実装例を以下に示します。
actor Player
participant "GS2-Exchange#Rate"
participant "GS2-SeralKey#SerialKey"
participant "GS2-Limit#Counter"
participant "GS2-Inventory#Item"
Player -> "GS2-Exchange#Rate" : Exchange
"GS2-Exchange#Rate" -[#f00]-> "GS2-SeralKey#SerialKey" : Use
"GS2-Exchange#Rate" -> "GS2-Limit#Counter" : Increase
"GS2-Exchange#Rate" -> "GS2-Inventory#Item" : Acquire
"GS2-Exchange#Rate" -> Player
GS2-Exchange によってシリアルキーを使用した際に得られる報酬が定義され、 GS2-Limit によって回数制限が適用され、何度もアイテムを入手できないことになります。
実装例
シリアルキーを使用する
このAPIでシリアルキーを使用する処理を行うことは推奨していません。
GS2-Exchange といったサービスを通してシリアルキーの使用を行う代わりに 何らかの処理を実行することを推奨します。
var result = await gs2.SerialKey.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).SerialKey(
code: "code-0001"
).UseSerialCodeAsync(
);
var item = await result.ModelAsync();
const auto Future = Gs2->SerialKey->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
)->SerialKey(
"code-0001" // code
)->UseSerialCode(
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError()) return false;