PlayFab パーティーの招待とセキュリティモデル

PlayFab パーティーは、セキュリティで保護された通信環境を既定で提供するように設計されています。 これにより、ゲームやプレーヤーを保護することはできますが、セキュリティの制限により、開発者に対して API の使用に関する質問が発生する このページでは、PlayFab パーティーのセキュリティ機能について説明します。主に招待状と、それらを使用するための効果的なパターンに重点を置いています。

PlayFab パーティーは、業界標準の暗号化および認証を使用して、すべての通信 (管理データ、ゲームデータ、リアルタイム通信) を行います。 これには、すべてのピアツーピアの伝送と Azure サービスへのすべてのトランザクションが含まれます。これらは、web サービス (HTTPS を使用する) か、または透過クラウドリレーサービス (DTLS を使用) です。

ネットワークへのアクセスを制限することは、ネットワークの整合性を保護するための中核となる部分です。 ネットワークへの参加機能は、次の4つの項目で区切られています。

招待

招待状 ( PartyInvitation ) は、ネットワーク内のユーザーにネットワークへのアクセスを許可するオブジェクトです。 招待状の作成失効は、ネットワークの有効期間を通じて行うことができます。 招待状には、作成者、一意の識別子Revocability 設定、およびエンティティ id として指定されたオプションのユーザーセットがあります。 ネットワークには、どのような数のアクティブな招待状を含めることができます。何もありません。 ネットワークは、常に最初の招待状を使って作成されます。

招待の有効期限

招待状は、作成された時点から失効するまで有効です。

作成

招待状を作成するには2つの方法があります。 最初の方法は、通話 PartyManager::CreateNewNetwork() です。 ネットワークに参加するには招待が必要であるため、ネットワークを作成するときに1つの招待状が存在している必要があります。 この招待状は最初の招待状として知られており、以下で説明する特別なプロパティがいくつかあります。 2つ目の方法は、通話 PartyNetwork::CreateInvitation() です。

招待状の作成者は、通話時に指定されたユーザーです PartyNetwork::CreateInvitation() 。 最初の招待状には作成者がいません。

招待状が作成された場合 (またはアクティブな最初の招待を使ってネットワークに参加した場合) には、a PartyInvitationCreatedStateChange が生成されます。

重要

最初の招待状では、ネットワークの作成者が参加することは暗黙的に許可されません。 開かれた招待が使用されている場合を除き、ユーザーリストに作成者のエンティティ ID を含めるようにしてください。

列挙値

アクティブな招待状の列挙は、を使って実行され PartyNetwork::GetInvitations() ます。 ローカルデバイスで作成された招待と、最初の招待がアクティブであれば、その招待は列挙できます。

無効化

招待状は、通話によって無効にされてい PartyNetwork::RevokeInvitation() ます。 招待状を取り消すことができるのは、招待状の作成者だけです。最初の招待状は、どのユーザーによっても失効されている可能性があります。 また、招待状は、作成したユーザーがネットワークから削除された場合に、自動的に無効になります。

招待状が失効すると、 PartyInvitationRevokedStateChange 招待を表示できるすべてのデバイスで a が生成されます。

最初の招待状が失効したら、もう一度作成することはできません。 この識別子は新しい招待状に再利用されることがありますが、新しい招待状には最初の招待状の特別なプロパティはありません。

重要

招待を取り消しても、既にネットワークに参加しているデバイスとユーザーには影響しません。 ネットワークからユーザーまたはデバイスを削除するに PartyNetwork::KickUser() は、またはを使用 PartyNetwork::KickDevice() します。 これらのメソッドはまだ実装されていないことに注意してください。

招待状の構成

招待状の構成は、作成時に構造体を使って指定し PartyInvitationConfiguration ます。

識別子

各招待状には、ネットワーク内で一意に識別する識別子が含まれています。 招待状を作成するときに識別子が指定されていない場合は、パーティーによって割り当てられます。 の呼び出しについて PartyManager::CreateNewNetwork() は、割り当てられた識別子が out パラメーターとして返され、 PartyCreateNewNetworkCompletedStateChange ネットワークの作成が完了したときにも報告されます。 呼び出しの場合 PartyManager::CreateInvitation() 、割り当てられた識別子は、 invitation invitation 招待の作成が完了したときに、out パラメーターまたはフィールドから取得でき PartyCreateInvitationCompletedStateChange ます。

招待状は一意である必要がありますが、招待状が失効した後は、その識別子が新しい招待状を作成するときに再利用されることがあります。

最初の招待状とその他の招待状

招待状は1種類しかありませんが、通話によって作成された最初の招待状 PartyManager::CreateNewNetwork() は、後で作成された招待状とは少し異なり PartyNetwork::CreateInvitation() ます。 相違点については、次の表で説明します。

プロパティ 最初の招待状 その他の招待状
Visibility すべてのデバイスで最初の招待状を表示できます。 最初の招待状は失効していない限り、への着信によって返され PartyNetwork::GetInvitations() ます。 ネットワークに参加すると、各デバイスは、 PartyInvitationCreatedStateChange 以前に失効していない場合は、最初の招待状のを受け取ります。 招待状を作成したデバイスだけが表示できます。 最初の招待状は、その PartyNetwork::GetInvitations() デバイスで作成された場合にのみ返され PartyInvitationCreatedStateChange ます。これは、作成中のデバイスでのみ生成されます。
Revocability お客様は最初の招待を取り消すことができます。 招待状の構成を明示的に指定するときは、revocability をに設定する必要があり PartyInvitationRevocability::Anyone ます。 作成者だけが招待を取り消すことができます。 招待状を作成する場合は、revocability をに設定する必要があり PartyInvitationRevocability::Creator ます。
有効期間 最初の招待状は、明示的に失効されるまでアクティブになります。 最初の招待状は、明示的に無効になるまで、または作成したユーザーがネットワークから削除されるまでアクティブになります。 ユーザーがネットワークから削除されると、作成したすべての招待が自動的に失効されます。
作成者 最初の招待状には作成者がいません。 PartyInvitation::GetCreatorEntityId() null を返します。 通話を発信するときに指定したユーザー PartyNetwork::CreateInvitation が作成者になります。 PartyInvitation::GetCreatorEntityId() そのユーザーのエンティティ ID が返されます。

(最初の招待を除く) 招待は、プライバシー上の理由により、他のデバイスでは表示されません。 これが重要である理由の例については、「友達リストの使用パターン」をご覧ください。

ユーザと招待を開く

招待状には、エンティティ Id として指定された0人以上のユーザーが含まれてい title_player_account entity IDsます。 招待状にユーザーが含まれている場合、その招待は、ネットワークに参加するユーザーにのみアクセスを許可します。 ただし、招待状にユーザーが含まれていない場合は、開かれている招待状になります。 すべてのユーザーは、開いている招待状の id を使ってネットワークに参加できます。

注意

ゲームコンソールなどのマルチユーザーデバイスでは、適切なユーザーとの適切な招待を必ず使用してください。 各招待状に指定されているユーザーによっては、PartyNetwork:: AuthenticateLocalUser () を使ってユーザーをネットワークに認証するときに、デバイス上の複数のユーザーが異なる招待を使用することが必要になる可能性があります。

不可

招待状を作成した後は、その構成を変更することはできません。 ただし、招待状が失効した後は、同じ識別子で別の設定を作成することができます。 動的な単一の招待状の使用パターンを参照してください。

使用パターン

PlayFab パーティーの招待はシンプルですが、柔軟です。 これらを使ってネットワークのさまざまなアクセスモデルを実現するには、さまざまな方法があります。 次に、一般的なパターンをいくつか示します。

ネットワークを開く

開いているネットワークは、理解して実装するのが最も簡単です。 これにより、ネットワーク記述子と招待識別子を持つすべての人が参加することができます。

呼び出し時にパラメーターに null を渡すことによって、開いているネットワークを作成 initialInvitationConfiguration PartyManager::CreateNewNetwork() します。 開いている招待状の識別子は、out パラメーターとして返されます。 ネットワークの作成が完了したら、ネットワーク記述子と招待の識別子を共有して、ユーザーが参加できるようにします。

必要に応じて、最初の招待状を取り消すことで、今後任意の時点でネットワークを閉じることができます。

警告

ネットワークは、それに参加するデバイスとユーザーと同じように保護されているため、開いているネットワークのネットワーク記述子と招待識別子を共有する場合は注意が必要です。

静的なユーザーリスト

対戦相手によって作成されたゲームなど、すべてのプレイヤーが事前にわかっているゲームの場合は、簡単で効果的なパターンになります。 これにより、ゲームを開始する前に特定されたユーザーのみがネットワークに参加することができます。

PartyInvitationConfiguration構造体を作成し、既知のユーザーをそのフィールドに追加し entityIds ます。 この構造体をに渡し PartyManager::CreateNewNetwork() ます。 ネットワークの作成が完了したら、ネットワーク記述子と招待の識別子を共有して、ユーザーが参加できるようにします。

1対1の招待

ユーザーが既存のユーザーに対して個別に招待しているゲームでは、1対1の招待のパターンが効果的で簡単になります。

PartyInvitationConfiguration構造体を作成し、そのフィールドに作成者のみを追加し entityIds ます。 この構造体をに渡し PartyManager::CreateNewNetwork() ます。 作成者がネットワークに接続すると、必要に応じて最初の招待を取り消すことができます。 または、ネットワークの作成者は、開いているネットワークを作成してから、接続したらすぐに最初の招待を取り消すことができます。

PartyInvitationConfigurationネットワークに参加するユーザーごとに、追加の構造を作成します。 これらの構造体をに渡して招待状を作成 PartyNetwork::CreateInvitation() します。 各ユーザーとネットワーク記述子を、特定の招待状の招待識別子と共に共有します。 ユーザーが参加すると、このパターンを繰り返して他のユーザーを招待することができます。

ユーザーが参加した後は、特定の招待状を取り消すことができます。

フレンド リスト

1 対1の招待状を作成しなくても、各ユーザーの友達が簡単に参加できるようにするゲームでは、ユーザーの友人リスト全体を含む招待状を作成できます。

ネットワークに接続すると、各ユーザーは構造体を作成し、それぞれ PartyInvitationConfiguration のソーシャルプラットフォームの友人をそのフィールドに追加し entityIds ます。 この構造体に渡し PartyNetwork::CreateInvitation() て、ネットワーク記述子と招待の識別子を友人と共有します。 ユーザーの友達リストが変更されると、招待状は取り消され、新しい友達リストで作成された新しい招待状が作成されます。

動的な単一の招待状

多くのゲームには、特定のネットワークに参加するユーザーを制御するロビーなどの外部サービスがあります。 ネットワークと外部サービスとの同期を維持するために、動的な単一招待のパターンを使用できます。 このパターンでは、既知の識別子を持つ単一の招待状を使用します。

このパターンには2つのバリアントがあります。 外部サービスは、ネットワークの招待を管理する1人のユーザーを選ぶことができます。または、すべてのユーザーに招待の管理を試みることができます。 どちらの場合も、ネットワークの変更が必要な一連のユーザーは、外部サービスからユーザーに通知され、ユーザーは現在の招待を取り消し、新しい完全なユーザーのセットを含む、既知の既知の識別子を使って新しい招待を作成しようとします。

シングルユーザー管理

現在の招待の取り消しと新しい招待状の作成を担当する1人のユーザーが、招待状の所有権を予測できるようにします。 ただし、外部サービスには次のものが必要です。

  • 招待状を管理するユーザーを選択します。
  • 以前のユーザーがネットワークを離れるときに、新しいユーザーを選択します。

すべてのユーザー管理

すべてのユーザーが招待を管理しようとしても、予期せずに招待を行う必要はありませんが、外部サービスが1人のユーザーを選ぶ必要はありません。 代わりに、各デバイスのユーザーは次の操作を実行します。

  • 現在の招待を取り消そうとしています。 最初の招待状の場合、すべてのユーザーがこれを実行しますが、1つだけが成功します。 その他の招待状の場合、招待状は、他のユーザーには表示されないため、最後の招待状を作成したユーザーのみがその招待を取り消すことができます。
  • 新しい招待状を作成しようとしています。 招待状には一意の識別子が必要であるため、1人のユーザーのみが成功します。 他のデバイスで招待状が表示されないため、そのユーザーは、新しい招待の所有者であることを他のユーザーに通知する必要があります。
  • 現在の招待状の作成者が作成したデバイスを残した場合、すべてのユーザーは、上記のように、もう一度新しい招待状を作成しようとする必要があります。

重要

招待を取り消し、同じ識別子で新しい招待状を作成すると、招待の識別子が無効な時間の小さなウィンドウが表示されます。 この方法を使用している場合は、 PartyNetwork::AuthenticateLocalUser() 妥当な待機期間後に通話に失敗した場合は、通話を再試行する必要があります。

開いている招待状のロール

特定のネットワークに参加する必要がある、ロビーまたは他の外部サービスが制御するゲームの場合、動的な単一の招待のパターンの代わりとして、ロールアウトされた招待状のパターンがあります。 このパターンでは、常に開いている招待が1つあります。 参加を許可されていたユーザーが外部サービスのユーザーリストから削除されるたびに、招待状は失効し、新しい識別子で再作成されます。 招待識別子は、パスワードのような働きをするため、同様に保護する必要があります。 このパターンは、次の手順で実装できます。

  • 外部サービスは、ネットワークを作成するデバイスを選択し、使用する招待識別子を指定します。
  • 外部サービスは、ネットワークに参加する必要がある他のすべてのユーザーに招待識別子を送信します。
  • 新しいユーザーがネットワークに参加する必要がある場合、外部サービスは現在の招待識別子をそのユーザーと共有します。
  • 現在の招待を指定したユーザーが参加できないようにするには、次の操作を行って、外部サービスで "パスワードの変更" を行う必要があります。
    • 新しい招待の識別子を選択します。
    • 1人またはすべてのユーザーに対して現在の招待を取り消し、選択した招待識別子で新しい招待状を作成するように依頼します。 シングルユーザー管理とすべてのユーザー管理については、「動的な単一の招待」をご覧ください。
    • ネットワークへの参加を許可する必要があるすべてのユーザーと、新しい招待の識別子を共有します。

次の手順