> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# トレードのクイックスタート

> OpenTrade、AcceptTrade などの関連 API を使用して、2 人のプレイヤー間でインベントリ アイテムを交換する PlayFab プレイヤー間トレードのクイックスタート。

<Note>
  このクイックスタートでは、カタログとインベントリ アイテムの両方に既に精通していることを前提としています。例のプレイヤーは、トレードで譲渡したいインベントリ アイテムを既に所有している必要があります。
</Note>

最初のステップは、`OpenTrade` API を呼び出して、別のプレイヤーがトレードを利用できるようにすることです。ギフトの受取人を識別するための `playfabId` と、現在アイテムをインベントリに保有しているプレイヤーの `ItemInstanceID` が必要です。

`secondPlayerId`: ギフトの受取人 (`PlayFabId`) を識別する一意の文字列です。

`myItemInstanceId`: 現在のプレイヤーが所有するアイテム インスタンス (`InstanceID`) を識別する一意の文字列です。

```csharp theme={null}
void GiveItemTo(string secondPlayerId, string myItemInstanceId) {
    PlayFabClientAPI.OpenTrade(new OpenTradeRequest {
        AllowedPlayerIds = new List<string> { secondPlayerId }, // PlayFab ID for the friend who will receive your gift
        OfferedInventoryInstanceIds = new List<string> { myItemInstanceId } // The item instanceId fetched from GetUserInventory()
    }, LogSuccess, LogFailure);
}
```

<Note>
  すべてのトレードは公開情報です。どのプレイヤーも、他のプレイヤーのオープン トレードや、そのプレイヤーの取引履歴を閲覧できます (そのプレイヤーの `playFabId` を知っている場合)。
</Note>

このスニペットでは、`LogSuccess` コールバックが `result.Trade.TradeId` も評価し、`firstPlayFabId` と `tradeId` の両方を 2 番目のプレイヤーに転送する必要があります。これらが保存されていないと、2 番目のプレイヤーはトレードを評価または受諾できません。

<Note>
  現在のプレビューでは、トレードが同時実行アクションからスレッド セーフであることを確認する必要があります。スレッド セーフなオプションには、カスタム ゲーム サーバーや、CloudScript から外部データベース/システムへの Webhook 呼び出しがあります。スレッド セーフではないオプションは、プレイヤー データ キーを直接変更する CloudScript で構築できます。後者のオプションでは、同時発生するトレード リストの更新が正しく処理されない可能性があるという同時実行性の問題があります。
</Note>

最初のプレイヤーがトレードを作成し、`playFabId` と `tradeId` を 2 番目のプレイヤーに転送したら、2 番目のプレイヤーは `GetTradeStatus` リクエストを行うことで、トレードの要件を確認できます (ギフトであることを確認するため)。

<Note>
  最も関連性の高い **TradeStatus** 値は、**Open**、**Filled**、および **Canceled** です。それ以外のすべての状態は中間状態です。呼び出しの間、トレードはそれらの中間状態に目立った期間留まる場合があります。最近変更されたトレードはすぐには利用できない場合があります。
</Note>

```csharp theme={null}
void ExamineTrade(string firstPlayFabId, string tradeId) {
    PlayFabClientAPI.GetTradeStatus(new GetTradeStatusRequest {
        OfferingPlayerId = firstPlayFabId,
        TradeId = tradeId
    }, LogSuccess, LogFailure);
}

If the requirements of that trade are acceptable, the gift can be accepted using AcceptTrade
C# snip
void AcceptGiftFrom(string firstPlayFabId, string tradeId) {
    PlayFabClientAPI.AcceptTrade(new AcceptTradeRequest {
        OfferingPlayerId = firstPlayFabId,
        TradeId = tradeId
    }, LogSuccess, LogFailure);
}
```

完了すると、上記の `AcceptGiftFrom` 関数によって、贈られたアイテムが最初のプレイヤーのインベントリから 2 番目のプレイヤーへ転送されます。


## Related topics

- [リーダーボードのクイックスタート](/ja-jp/services/playfab/community/leaderboards/quickstart-leaderboards.md)
- [Game Saves クイックスタート](/ja-jp/services/playfab/player-progression/game-saves/quickstart.md)
- [トーナメントとリーダーボードのクイックスタート](/ja-jp/services/playfab/community/leaderboards/tournaments-leaderboards/quickstart.md)
- [実験のクイックスタート](/ja-jp/services/playfab/live-service-management/game-configuration/experiments/quickstart.md)
- [Lobby SDK クイックスタート](/ja-jp/services/playfab/multiplayer/lobby/lobby-getting-started.md)
