共有グループ データ (Shared Group Data) は、プレイヤーが厳しく制限された他のプレイヤーのリストと情報を共有するためのシンプルな手段です。
共有グループ データは、ほとんどのケースでサーバー権限型で運用されることを想定して設計されており、以前のガイダンスでは、プレイヤーに読み取り/書き込み権限を与えることになる (不正行為の余地が生まれる) ため、プレイヤーを直接共有グループ データに追加しないことが推奨されていました。しかし、新しい API アクセス ポリシー により、元の設計と比べて機能とセキュリティに大幅な柔軟性が生まれています。詳細については、このドキュメントの詳細セクションを参照してください。
共有グループ データは、多くとも 10 数人程度より大きなグループでは使用しないでください。1 つの問題として、多数のプレイヤーが同時に同じデータを読み取ろうとすると、データの読み取りに遅延が生じます (共有グループ データは、タイトル データのように多数のプレイヤーが同時に読み取ることを想定したデータのようにシャーディングもキャッシュもされません)。また、プレイヤーが互いのデータを上書きしないように特に注意が必要です。複数のプレイヤーが同時に同じキーに書き込もうとした場合、そのうちの 1 つの書き込みのみが「勝ち」となり、他のユーザーのデータは失われます。
例: ターン制マルチプレイヤーの非同期ゲーム
共有グループ データの元来の、そして今でも最良の使用例は、オンライン ボード ゲームの状態を保存するものとして最もよく表現できます。プレイヤーは明確なターン順序で、CloudScript 経由でデータを変更する形で交代しながらプレイします。
プレイヤーはログオフして後でプレイを再開でき、ゲーム状態はクラウドに保存されます。
以下の CloudScript 例は、一般的なボード ゲーム向けのターン制構造です。ボード ゲーム自体は疑似コードとしてスタブ化されています。
このゲームを表す共有グループ データはすでに開始されており、そのメンバーシップもすでに定義されているものとします。
高レベルでは、前述のとおりグループ サイズが比較的小さい限り、共有グループ データを使用してパーティ/レイド、あるいは他の半永久的なプレイヤー グループを実装できます。
現在のところ厳密に強制される制限はありませんが、多数のプレイヤーでの利用はサポートされておらず、極端な場合には、サービス内の他ユーザーへの影響を防ぐために当該タイトル機能がスロットリングされる可能性があります。
重要な制限
- 共有グループ データ:
- 単純なキー/値ペア データ (文字列) のみを含みます。他のデータ型 (インベントリ アイテム、統計、仮想通貨など) として使用する場合、必要な変換はすべてタイトル側で行う必要があります。
- シャーディングもキャッシュもされないため、複数のプレイヤーから同時にアクセスされた場合、応答性は良くありません。共有グループ データを使う機能は、小規模なプレイヤー グループを想定して設計し、同時書き込みが発生しないようにする必要があります。
クライアントの権限に関する注意点
グループ内にはロール/ランクのシステムがありません。つまり、グループ内のどのメンバーもグループ内で絶対的な権限を持ちます (定義されたリーダーは存在しません)。
はっきり言えば、これはつまり、API アクセス ポリシー を使ってクライアント側の共有グループ データ メソッドを無効化しない限り、クライアントがデータを完全に制御できるため、データが悪用される可能性があるということです。
ベスト プラクティスは、共有グループ データをゲームプレイに影響を与えるデータには使用しない、もしくはクライアント API 側の共有グループ データ メソッドを無効化することです。