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

# Início rápido do PlayFab Online Subsystem (OSS)

> Início rápido do PlayFab Online Subsystem no Unreal Engine, abrangendo a configuração do chat de voz do Party, dos lobbies e do matchmaking com o Multiplayer SDK.

# Início rápido: PlayFab Online Subsystem

Este artigo ajuda você a configurar e usar recursos do PlayFab Multiplayer, como Lobby, Matchmaking e Party, em jogos criados com o Unreal Engine 4 ou o Unreal Engine 5. Para obter a lista completa de plataformas e versões com suporte no Unreal Engine 4 ou no Unreal Engine 5, confira [Plataformas com suporte](https://docs.xbox.com/pt-BR/services/playfab/multiplayer/networking/party-unreal-engine-oss-overview.md).

Depois de seguir as etapas relevantes descritas nesta página para suas plataformas de destino, você estará pronto para começar a usar o PlayFab Online Subsystem (PF OSS). A autenticação, a rede, o VOIP, o agrupamento em lobbies e o matchmaking são tratados em seu nome, sem que nenhuma outra alteração seja necessária.

## Baixar e instalar o PlayFab Online Subsystem

Acesse o [PlayFab Online Subsystem](https://github.com/PlayFab/PlayFabMultiplayerUnreal) para baixar ou clonar o código-fonte do PF OSS. O nome do repositório baixado ou clonado é PlayFabMultiplayerUnreal. O repositório precisa ser renomeado para OnlineSubsystemPlayFab.

## O que você precisa

* **TitleID do PlayFab:** Se você não tiver uma TitleID configurada para os SDKs (kits de desenvolvimento de software) do PlayFab Party e do Multiplayer, confira [Habilitando o PlayFab Party](https://docs.xbox.com/pt-BR/services/playfab/multiplayer/networking/enable-party.md).

### Microsoft Game Development Kit (GDK), PC, Switch, PlayStation®5 e PlayStation®4

* **Bibliotecas do PlayFab Party, do Lobby e do Matchmaking específicas da plataforma:** Confira [Obtendo as bibliotecas do PlayFab Party e do Multiplayer](https://docs.xbox.com/pt-BR/services/playfab/multiplayer/networking/party-unreal-engine-oss-obtaining-playfab-party-libraries.md).

## Configuração inicial

### Base de código do Unreal Engine

* Copie a pasta OnlineSubsystemPlayFab e seu conteúdo para o diretório do Unreal Engine em **Engine\Plugins\Online**.
* Execute `GenerateProjectFiles.bat` para criar os arquivos de projeto do mecanismo.
* Carregue o projeto no Visual Studio selecionando o novo arquivo `UE5.sln`.
* Defina a configuração da solução como **Development Editor** e a plataforma da solução como **Win64**. Selecione o destino **Unreal Engine 5** e, em seguida, selecione **Build**.

### Base de código do jogo

* Para adicionar o OnlineSubsystemPlayFab à sua lista de plug-ins, aplique as seguintes alterações à seção Plugins do arquivo de projeto.
  * Remova as plataformas nas quais você não vai lançar o jogo
  * Use XboxOneGDK em vez de XB1 se estiver usando o Unreal Engine 4. O Unreal Engine 5 substitui o XboxOneGDK

```json theme={null}
{
    "Name": "OnlineSubsystemPlayFab",
    "Enabled": true,
    "PlatformAllowList": [
    "XB1",
    "WinGDK",
    "XSX",
    "Win64",
    "Switch",
    "PS4",
    "PS5"
    ],
    "SupportedTargetPlatforms": [
    "XB1",
    "WinGDK",
    "XSX",
    "Win64",
    "Switch",
    "PS4",
    "PS5"
    ]
}
```

* Gere o arquivo de solução do jogo selecionando o arquivo `{ProjectName}.uproject` e, em seguida, selecione **Switch Unreal Engine Version** para o caminho do código do Unreal Engine.

## Configuração do jogo

* Independentemente da plataforma de destino, seu jogo precisa configurar determinados valores específicos do PlayFab no arquivo INI da plataforma de destino pretendida (localizado em \[yourGameDirectory]/Platforms/\[yourPlatform]/Config).
  * **XBOX Series X GDK:** XSXEngine.ini
  * **PC GDK:** WinGDKEngine.ini
  * **XBOX One GDK:** XB1Engine.ini (ou XboxOneGDKEngine.ini se estiver usando o Unreal Engine 4)
  * **PC Steam:** WindowsEngine.ini (ou encontre-o em \[yourGameDirectory]/Config/Windows)
  * **Nintendo Switch** SwitchEngine.ini
  * **PS4™** PS4Engine.ini
  * **PS5™** PS5Engine.ini
* Substitua as seções INI na configuração, se já existirem (por exemplo, Engine.GameEngine), pelas apresentadas nas seções a seguir.
* Certifique-se de substituir todos os campos *\<REPLACE ME>* pelos seus dados:
* No UE 5.6 e posteriores, o parâmetro `DriverClassName` requer o prefixo "/Script/". Por exemplo, use `"/Script/OnlineSubsystemPlayFab.PlayFabNetDriver"` em vez de `"OnlineSubsystemPlayFab.PlayFabNetDriver"`.

```ini theme={null}
[OnlineSubsystemPlayFab]
bEnabled=true
PlayFabTitleID=<REPLACE ME with your PlayFab title ID>
MaxDeviceCount=<REPLACE ME with your max player count (note: split screen is still 1 device). In the example of an 8 player game, this would be 8.>
MaxDevicesPerUserCount=<REPLACE ME with your max player count per box (note: split screen is still 1 device) In the example of an 8 player game, this would be 1.>
MaxEndpointsPerDeviceCount=<REPLACE ME with your max player count per box (note: split screen is still 1 device)  In the example of an 8 player game, this would be 1.>
MaxUserCount=<REPLACE ME with your max player count (note: split screen is still 1 device)  In the example of an 8 player game, this would be 8.>
MaxUsersPerDeviceCount=<REPLACE ME with your max player count per box (note: split screen is still 1 device)  In the example of an 8 player game, this would be 1.>
DirectPeerConnectivityOptions=<REPLACE ME with your connectivity options, in the form of an array of strings. The default case corresponds to the following:
+DirectPeerConnectivityOptions=AnyPlatformType
+DirectPeerConnectivityOptions=AnyEntityLoginProvider.
If you want to disable P2P and use cloud relay instead, set DirectPeerConnectivityOptions=None>
bHasPlayFabVoiceEnabled=<REPLACE ME with true/false>

[/Script/OnlineSubsystemPlayFab.PlayFabNetDriver]
NetConnectionClassName="OnlineSubsystemPlayFab.PlayFabNetConnection"
ReplicationDriverClassName="<REPLACE ME with your existing replication driver class name>" . Skip if the game doesn't have a replication driver class (https://docs.unrealengine.com/5.2/en-US/replication-graph-in-unreal-engine/).
ConnectionTimeout=15.0
InitialConnectTimeout=30.0

[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/OnlineSubsystemPlayFab.PlayFabNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
```

## Considerações específicas da plataforma

Com tudo isso feito, estamos quase terminando. Restam apenas alguns parâmetros importantes específicos da plataforma que precisam ser definidos.

### GDK

Ao desenvolver jogos com o GDK, configure os serviços da plataforma.

```ini theme={null}
[OnlineSubsystem]
DefaultPlatformService=PlayFab
NativePlatformService=GDK
```

### Steam

Se estiver desenvolvendo jogos para Win64 com o Steam, defina os serviços da plataforma.

```ini theme={null}
[OnlineSubsystem]
DefaultPlatformService=PlayFab
NativePlatformService=Steam
```

### Switch

Para obter mais informações sobre o Switch, confira o arquivo [ReadMe.md](https://dev.azure.com/PlayFabPrivate/Switch/_git/PlayFabMultiplayerUnrealSwitch?path=/README.md) que acompanha o PlayFab OSS para Switch. Se não tiver acesso, você pode [solicitar acesso](https://docs.xbox.com/pt-BR/services/playfab/sdks/request-access-for-sdks-samples.md) aos nossos repositórios privados.

### PS5™ e PS4™

Para obter mais informações sobre o PS5™ e o PS4™, confira o arquivo [ReadMe.md](https://dev.azure.com/PlayFabPrivate/PS5/_git/PlayFabMultiplayerUnrealPlayStation?path=/README.md) que acompanha o PlayFab OSS para PS5™ e PS4™. Se não tiver acesso, você pode [solicitar acesso](https://docs.xbox.com/pt-BR/services/playfab/sdks/request-access-for-sdks-samples.md) aos nossos repositórios privados.

### Multiplataforma

Se o seu jogo usar o suporte à rede multiplataforma do PlayFab, defina quais plataformas você permite que se conectem.

```ini theme={null}
[/Script/OnlineSubsystemUtils.OnlineEngineInterfaceImpl]
!CompatibleUniqueNetIdTypes=ClearArray
+CompatibleUniqueNetIdTypes=STEAM
+CompatibleUniqueNetIdTypes=GDK
+CompatibleUniqueNetIdTypes=SWITCH
+CompatibleUniqueNetIdTypes=PS4
+CompatibleUniqueNetIdTypes=PS5
```

Todas as plataformas permitem VoIP por padrão. Para desabilitar o VoIP em uma plataforma específica, adicione o nome do modelo da plataforma ao arquivo de configuração do Unreal Engine, conforme mostrado no exemplo a seguir.

```ini theme={null}
[OnlineSubsystemPlayFabVoiceChatDisabledPlatforms]
!Platforms=ClearArray
+Platforms=WIN64
+Platforms=STEAM
+Platforms=SWITCH
+Platforms=PS4
+Platforms=PS5
```

Essas etapas concluem a configuração do OSS necessária para usá-lo no seu jogo.

## Uso no código do jogo

> [!NOTE]
>
> O PlayFab Online Subsystem só dá suporte à nomenclatura de sessão de jogo como `NAME_GameSession`

Assim como no uso de outros plug-ins do Online Subsystem:

Adicione `PublicDependencyModuleNames.AddRange(new string[] { "OnlineSubsystem", "OnlineSubsystemUtils" });` em Game.Build.cs e, em seguida, use-o da mesma forma que outros plug-ins do jogo.

Código de exemplo em GameSession.cpp:

```cpp theme={null}
#include "OnlineSubsystem.h"
#include "OnlineSubsystemUtils.h"

...

bool Game::JoinSession(const FUniqueNetIdPtr UserId, FName SessionName, const FOnlineSessionSearchResult& SearchResult)
{

    IOnlineSubsystem* OnlineSub = Online::GetSubsystem(GetWorld()); // Using OnlineSubsystemPlayFab plugin
    if (OnlineSub)
    {
        IOnlineSessionPtr Sessions = OnlineSub->GetSessionInterface(); // Using OnlineSessionInterfacePlayFab.h
        if (Sessions.IsValid() && UserId.IsValid())
        {
            // ...
        }
    }
    // ...
}
```

Código de exemplo em GameFriends.cpp:

```cpp theme={null}
#include "OnlineSubsystem.h"
#include "OnlineSubsystemUtils.h"

...

void Game::ViewFriendProfile()
{
    IOnlineSubsystem* OnlineSub = Online::GetSubsystem(GetWorld()); // Using OnlineSubsystemPlayFab plugin
    if (OnlineSub)
    {
        IOnlineIdentityPtr Identity = OnlineSub->GetIdentityInterface(); // Using OnlineIdentityInterfacePlayFab.h
        if (Identity.IsValid() && Friends.IsValidIndex(FriendIndex))
        {
            // ....
        }
    }
}
```

## Solução de problemas

Formas de ajudar você a solucionar problemas.

### Builds instalados do Unreal Engine

Os usuários podem enfrentar problemas ao tentar criar um build instalado do Unreal Engine com o OnlineSubsystemPlayFab nas variantes de build do GDK. Fornecemos as orientações a seguir para superar esse problema com êxito até que haja uma solução mais completa.

**Se você estiver usando o Unreal Engine 5.4, 5.5, 5.6 ou 5.7:**

* Você pode encontrar o seguinte erro de tempo de execução: `Runtime dependency Party.dll is configured to be staged from C:\Program Files (x86)\Microsoft GDK\<version>\Party.dll and Engine\Plugins\Online\OnlineSubsystemPlayFab\Platforms\GDK\Redist\Party.dll`
* Navegue até Engine\Platforms\GDK\Plugins\Online\OnlineSubsystemGDK\\
* Abra OnlineSubsystemGDK.uplugin e defina `PlayFabParty` como desabilitado:

```json theme={null}
{
    "Name": "PlayFabParty",
    "Enabled": false
}
```

* Navegue até Engine\Platforms\GDK\Plugins\Online\OnlineSubsystemGDK\Source\\
* Abra OnlineSubsystemGDK.Build.cs e comente a inclusão de `PlayFabParty`:

```csharp theme={null}
if (Target.bCompileAgainstEngine)
{
    //PublicDependencyModuleNames.Add("PlayFabParty");
}
```

**Se você estiver usando o Unreal Engine 5.0 - 5.3:**

* Localize o diretório em que o Unreal Engine está instalado na máquina.
* Navegue até Engine\Platforms\GDK\Plugins\Online\PlayFabParty
* Abra PlayFabParty.uplugin e atualize a configuração de Modules com **PlatformDenyList**:

```ini theme={null}
"Modules": [
        {
            "Name": "PlayFabParty",
            "Type": "Runtime",
            "LoadingPhase": "Default",
            "HasExplicitPlatforms": true,
            "PlatformDenyList": [ "WinGDK", "Win64" ]
        }
    ],
```

* Repita esse processo para XB1 (PlayFabParty\_XB1.uplugin) e XSX (PlayFabParty\_XSX.uplugin) se essas plataformas forem necessárias para o build instalado. Se Win64 também for uma plataforma necessária para o build instalado, adicione Win64 na matriz de **PlatformDenyList**.

**Se você estiver usando o Unreal Engine 4.27+:**

* Localize o diretório em que o Unreal Engine está instalado na máquina.
* Navegue até Engine\Platforms\GDK\Plugins\Online\PlayFabParty
* Abra PlayFabParty.uplugin
* Substitua a chave **WhitelistPlatforms** por **BlacklistPlatforms**
* Repita o processo para XboxOneGDK (PlayFabParty\_XboxOneGDK.uplugin) e XSX (PlayFabParty\_XSX.uplugin) se essas plataformas forem necessárias para o build instalado. Se Win64 também for uma plataforma necessária para o build instalado, adicione Win64 na matriz de **BlacklistPlatforms**.

Exemplo de configuração de Modules em PlayFabParty.uplugin para o Unreal Engine 4.27+:

```ini theme={null}
"Modules": [
       {
            "Name": "PlayFabParty",
            "Type": "Runtime",
            "LoadingPhase": "Default",
            "BlacklistPlatforms": ["WinGDK", "Win64"]
        }
    ],
```

### Falha de handshake no Steam

Se você estiver vendo uma falha de handshake (como `LogHandshake: IncomingConnectionless: Error reading handshake packet`), consulte esta [publicação no fórum do Unreal Engine](https://forums.unrealengine.com/t/ue-5-1-steam-sockets-problem/696726) para verificar as configurações.

## Fluxo de trabalho do OnlineSubsystemPlayFab

As etapas descritas na seção [Considerações específicas da plataforma](#considerações-específicas-da-plataforma) pedem que você inclua:

```ini theme={null}
[OnlineSubsystem]
DefaultPlatformService=PlayFab
```

O OnlineSubsystemModule do Unreal Engine cria uma instância de subsistema online para o PlayFab e começa a criar o PlayFabSingleton. Nesse ponto, o SDK é inicializado em `FOnlineSubsystemPlayFab::Init()`,
onde inicializa os SDKs do Party e do Multiplayer com a TitleID do PlayFab (essa titleID é definida no arquivo de [Configuração do jogo](#configuração-do-jogo)). Durante a inicialização, chamamos `⁠CreatePlayFabSocketSubsystem()` como o subsistema online principal.

Fluxo de trabalho do SDK do Multiplayer: `FOnlineSubsystemPlayFab::Init()` inicializa o singleton do SDK multijogador `InitializeMultiplayer()` para o seu título. Em `PlayFabLobby.cpp`, `FPlayFabLobby::DoWork()` processa as
alterações de estado disparadas pelas APIs do Multiplayer (confira `Platforms/GDK/Include/PFLobby.h` para ver as APIs).

Fluxo de trabalho do SDK do Party: `FOnlineSubsystemPlayFab::Init()` inicializa o singleton do SDK multijogador `InitializeParty()` para o seu título. Em `OnlineSubsystemPlayFab.cpp`, `FOnlineSubsystemPlayFab::DoWork()` processa as
alterações de estado disparadas pelas APIs do Party (confira `Platforms/GDK/Include/Party.h` para ver as APIs).

"PlayStation" é uma marca registrada ou marca comercial da Sony Interactive Entertainment Inc.

"PS4" é uma marca registrada ou marca comercial da Sony Interactive Entertainment Inc.

"PS5" é uma marca registrada ou marca comercial da Sony Interactive Entertainment Inc.


## Related topics

- [Notas de versão do PlayFab OnlineSubsystem para Unreal Engine 4 e 5](https://docs.xbox.com/pt-BR/services/playfab/multiplayer/networking/unreal-release-notes.md)
- [Configuração de servidor dedicado do PlayFab Online Subsystem (OSS)](https://docs.xbox.com/pt-BR/services/playfab/multiplayer/networking/party-unreal-engine-oss-dedicated-servers.md)
- [Guia de integração do plug-in do PlayFab SDK do Unreal Engine Marketplace](https://docs.xbox.com/pt-BR/services/playfab/multiplayer/networking/party-unreal-engine-oss-playfab-plugin-integration.md)
- [PlayFab Party Online Subsystem para Unreal](https://docs.xbox.com/pt-BR/build/console-features/networking/game-mesh/party-unreal-online-subsystem.md)
- [PlayFab Online Subsystem (OSS)](https://docs.xbox.com/pt-BR/services/playfab/multiplayer/networking/party-unreal-engine-oss-overview.md)
