イベントパイプライン
イベントパイプラインは PlayFab Services SDK に含まれる機能で、その主な目的はゲーム開発者が PlayFab Insights に保存されるイベントを送信できるようにすることです。開発者はバッチサイズ、送信頻度、および適切なテレメトリソリューションの他の側面を指定できます。 これはゲーム開発者の負担を軽減し、これらの側面をすべて代行するのに役立ちます。構成可能なイベントパイプラインがサポートされています。タイトルには 1 つまたは複数のこれらのパイプラインを含めることができ、それぞれに独自のプロパティを構成できます。 パイプラインの基本的な概念について説明していきましょう。パイプラインタイプ
パイプラインタイプは、パイプラインが発行するイベントの種類に直接関連しています。開発者がインスタンス化できるパイプラインには 2 つの異なるタイプがあります:- テレメトリイベントパイプライン: テレメトリイベントのみを発行でき、Write Telemetry Events REST API を使用します。
- PlayStream イベントパイプライン: PlayStream イベントのみを発行でき、Write Events REST API を使用します。
認証タイプ
パイプライン作成のもう 1 つの重要な要素は認証タイプです。PlayFab イベントでは、エンティティ認証とテレメトリキー認証の 2 つの認証メカニズムがサポートされています。 エンティティ認証は、ゲーム開発者がイベントを特定のエンティティに紐付けて、さらなる集計や分析を行いたい場合に使用されます。たとえば、ゲーム開発者はプレイヤーのアクションに関連するイベントをログに記録して、セグメンテーションを可能にするタイトルプレイヤーのさらなる行動分析を行うことができます。 テレメトリキー認証は、ゲーム開発者がエンティティに必ずしも紐付ける必要のないイベントをログに記録したい場合に使用されます。たとえば、ログインしたプレイヤーが存在する前に、タイトルはパフォーマンスに関連するイベントや、さらなる分析のために収集したい特定のメトリックの送信を開始できます。これは、通常のエンティティ認証プロセスを経ることなく実行できます。 サポートされる認証タイプ / イベントタイプの組み合わせエンティティ認証
この認証タイプは、通常かつ最も一般的な PlayFab 認証方法です。特定のエンティティに密接に関連しており、後続の呼び出しで使用されるエンティティトークンを取得するために、対応する PlayFab ログイン API を呼び出す必要があります。次のリストは、エンティティ認証で使用できる異なるタイプのエンティティを表しています。- namespace: namespace エンティティは、スタジオ内のすべてのタイトルのすべてのグローバル情報を指します。
- title: title エンティティは、そのタイトルのすべてのグローバル情報を指します。
- master_player_account: master_player_account は、スタジオ内のすべてのタイトルで共有されるプレイヤーエンティティです。
- title_player_account: 多くの開発者にとって、title_player_account は最も伝統的な方法でプレイヤーを表します。
- character: character エンティティは title_player_account のサブエンティティです。
- group: group エンティティは、他のエンティティのコンテナーです。現在、プレイヤーとキャラクターに限定されています。
テレメトリキー認証
テレメトリキー認証はエンティティトークンを必要としないため、特定のエンティティに紐付けられません。 テレメトリキー認証が使用される場合、パイプライン作成時に PFEventPipelineTelemetryKeyConfig 構造体が必要です。この構造体には 2 つの主な部分があります:- PlayFab Game Manager 経由で作成および管理される文字列で構成されるテレメトリキー。
- SDK にイベントのアップロードに使用すべき適切なサービス構成を知らせる PFServiceConfigHandle。サービス構成ハンドルは、SDK 初期化中に PFServiceConfigCreateHandle を呼び出すことで作成されます。
イベントパイプラインの構成
前述したように、イベントパイプラインには、PFEventPipelineConfig 構造体パラメーターを介してパイプライン作成後に提供できる構成可能なプロパティがいくつかあります。 構成可能なプロパティは次のとおりです:- maxEventsPerBatch: PlayFab に書き込む前にバッチ処理されるイベントの最大数。
- maxWaitTimeInSeconds: パイプラインが不完全なバッチを送信するまで待機する最大時間。
- pollDelayInMs: パイプラインがイベントバッファーを空にした後、再度読み込むまでに待機する時間。
- compressionLevel: 圧縮アルゴリズムで使用される圧縮レベルを定義します。圧縮の詳細については、GZIP 圧縮 を参照してください。
- retryOnDisconnect: イベントパイプラインは、接続の切断により失敗したイベントの送信を再試行します。テレメトリイベントパイプラインでのみ利用可能です。
- bufferSize: パイプラインのバッファー内のイベント量の上限。
デフォルト値
PFEventPipelineConfig に一部のプロパティのみが指定されている場合、空のものは上書きされ、デフォルト値が使用されます。
これらのプロパティのいずれかをイベントパイプライン用に更新する方法の例については、パイプライン構成の更新 を参照してください。
GZIP 圧縮
イベントパイプラインは、GZIP 圧縮標準を使用して本文ペイロードを圧縮するオプションを提供します。 必要な圧縮レベルは、PFEventPipelineUpdateConfiguration API パラメーターの一部である PFEventPipelineConfig 構造体内で指定できます。 低い圧縮レベルは、圧縮率は低いですが最高速度を実現し、高い圧縮レベルはより良い圧縮率を実現しますが、圧縮速度は最も遅くなります。圧縮率の違いは、送信されるデータのタイプにすべて依存します。データのサイズとランダム性によっては、異なるレベルでも圧縮率が同じになる場合があります。 トレードオフ: 圧縮を使用すると、圧縮アルゴリズムの実行という複雑さが追加されるため CPU 時間が増加しますが、一方でネットワークの本文ペイロードは大幅に減少します。したがって、ゲームのニーズとリソースに応じて、圧縮を使用するかどうかはゲーム開発者次第です。 内部検証に基づくと、CPU 時間は平均 20% 増加し、ペイロード本文サイズは平均 91% 減少します。これらのパーセンテージは、圧縮されるデータのペイロードサイズと複雑さによって大きく変わる可能性があります。イベントハンドラー
パイプライン作成の一環として、ゲーム開発者は、イベントがアップロードされたときに呼び出される 2 つのオプションのイベントハンドラーを提供できます。 ただし、ゲーム開発者が “fire and forget” (投げっぱなし) のエクスペリエンスを希望する場合は、イベントハンドラーの提供を省略できます。 提供できるイベントハンドラーは次のとおりです:- PFEventPipelineBatchUploadSucceededEventHandler: 名前の通り、PlayFab に正常にアップロードされたすべてのイベントを受け取ります。
- PFEventPipelineBatchUploadFailedEventHandler: パイプラインの再試行ロジックを経て失敗したすべてのイベントを受け取ります。
パイプライン作成の例
以下では、前述のトピックに基づいてイベントパイプラインをインスタンス化する方法の異なる例を見ることができます。-
エンティティ認証を使用したテレメトリイベントパイプラインの作成
開発者がテレメトリイベントを送信したいが、テレメトリキー認証を使用する必要がない場合、次の例に示すように PFEventPipelineCreateTelemetryPipelineHandleWithEntity API がこの目的に役立ちます:
この例は、エンティティ認証を使用し、ハンドラーがないテレメトリイベントパイプラインを作成する方法を示しています。これは、パイプラインがイベントを発行し、結果を気にしないことを意味します。
-
テレメトリキー認証を使用したテレメトリイベントパイプラインの作成
開発者がテレメトリイベントを送信したいが、テレメトリキー認証を使用する必要がある場合、次の例に示すように PFEventPipelineCreateTelemetryPipelineHandleWithKey API がこの目的に役立ちます:
この例は、エンティティ認証を使用しないテレメトリイベントパイプラインを作成する方法を示しています。 イベントパイプラインは、後でエンティティを追加する可能性を持って、テレメトリキーを使用してイベントのアップロードを開始します。エンティティ認証への切り替えまたはエンティティの更新を参照してください。
-
PlayStream イベントパイプラインの作成
開発者が PlayStream イベントを送信したい場合、次の例に示すように PFEventPipelineCreatePlayStreamPipelineHandle API がこの目的に役立ちます:
この例は、エンティティ認証を使用し、ハンドラーがない PlayStream イベントパイプラインの作成方法を示しています。これは、パイプラインがイベントを発行し、結果を気にしないことを意味します。
-
イベントハンドラーを使用するイベントパイプライン
この例は、パイプライン作成 API にイベントハンドラーを提供する方法を示しています。
イベントの発行
イベントパイプラインが既に作成されていれば、イベントの発行は簡単な操作です。ゲーム開発者は、既存のイベントパイプラインハンドルと送信したいイベントを受け取る PFEventPipelineEmitEvent API を呼び出す必要があります。E_PF_API_CLIENT_REQUEST_RATE_LIMIT_EXCEEDED (0x892354dd)
エンティティ認証への切り替えまたはエンティティの更新
パイプラインがテレメトリキー構成のみを使用して作成されている場合、エンティティ認証に切り替える方法や、パイプラインを別のエンティティを使用するように更新する方法があります。 PFEventPipelineAddUploadingEntity を使用することで、実行中のパイプラインを再初期化することなくエンティティを追加できます。既存のエンティティがある場合、それを置き換えます。 例: タイトル実行の開始時にテレメトリキー構成でテレメトリイベントパイプラインが作成されます。この理由として考えられるのは、まだプレイヤーの ID がないか、単にまだプレイヤーに関連するものをログに記録したくない場合です。テレメトリキー認証への切り替え
前のシナリオを拡張して、開発者がテレメトリ認証に戻り、エンティティからのイベントログを切り離したい場合、PFEventPipelineRemoveUploadingEntity を呼び出して、次のようにイベントパイプラインハンドルを渡すことができます:パイプライン構成の更新
パイプラインは、既存のイベントパイプラインハンドルと新しい構成構造体を受け取る PFEventPipelineUpdateConfiguration API を使用して次のように簡単に更新できます:無効化された/非アクティブなテレメトリキー
テレメトリキーが非アクティブ化された場合、またはパイプライン作成時に無効なキーが提供された場合、そのテレメトリキーを使用して実行中のイベントパイプラインは、キーが無効または非アクティブであることを検出するとすぐに失敗し始めます。 顧客がキーを再アクティブ化する場合、パイプラインはそれを認識せず、失敗したイベントハンドラーを介して失敗を返送し続けます。この動作はセッションベースであることに注意してください。つまり、タイトルが再起動されると、新しいパイプラインが作成され、再びイベントをアップロードできるようになります。パイプラインハンドルのライフサイクル
他の PlayFab ハンドルと同様に、イベントパイプラインハンドルは複製/クローズパターンを使用します:- PFEventPipelineCloseHandle: パイプラインハンドルを閉じます。パイプラインへの最後のハンドルが閉じられると、パイプラインは破棄され、残りのバッファされたイベントはフラッシュされます。
- PFEventPipelineDuplicateHandle: パイプラインハンドルを複製します。元のハンドルと複製されたハンドルの両方は、PFEventPipelineCloseHandle で独立して閉じる必要があります。
