> ## 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.

# Práticas recomendadas de tratamento de erros do SDK

> Práticas recomendadas para detectar, inspecionar e tratar erros de API do PlayFab retornados pelos SDKs de administrador, servidor e cliente em diferentes linguagens.

Este tutorial mostra como acessar, reconhecer e tratar erros de API usando o SDK do PlayFab.

As práticas descritas aqui se aplicam igualmente aos SDKs de administrador, servidor e cliente, mas os padrões dependem *muito* da linguagem escolhida.

Em resumo, o padrão escolhido será válido para qualquer SDK (administrador/servidor/cliente), mas os detalhes de implementação serão específicos da *sua* linguagem de programação e do seu ambiente.

## Capturar e acessar o erro

Os SDKs do PlayFab geralmente relatam erros retornando um objeto de erro. O trecho a seguir mostra como detectar e acessar o erro.

```csharp theme={null}
PlayFabClientAPI.LoginWithEmailAddress(new LoginWithEmailAddressRequest() {
    Email = "doesnotexist@mail.com",
    Password = "nevercorrect",
}, result => {
    // success
}, error => {
    // 'error' object is our point of access to error data
});
```

Em geral, se um objeto de erro estiver definido (não for nulo), isso indica que ocorreu um erro. Em seguida, podemos inspecionar o erro mais detalhadamente.

## Inspecionar o erro

A forma mais comum de inspecionar um erro é reconhecê-lo pelo código. Conforme descrito em [Códigos de erro de métodos da API global](/pt-BR/services/playfab/api-references/global-api-method-error-codes), cada erro gerado contém códigos de erro legíveis e numéricos.

<Note>
  O código *por si só* é suficiente para reconhecer e processar o erro adequadamente.
</Note>

Vamos usar o método de API [LoginWithEmailAddress](xref:titleid.playfabapi.com.client.authentication.loginwithemailaddress) como exemplo. Conforme indicado na [documentação](xref:titleid.playfabapi.com.client.authentication.loginwithemailaddress) desse método, os seguintes erros internos podem ser gerados durante a execução:

* `InvalidTitleId 1004`
* `AccountNotFound 1001`
* `InvalidEmailOrPassword 1142`
* `RequestViewConstraintParamsNotAllowed 1303`

O método a seguir ilustra como inspecionar e reconhecer esse tipo de erro.

```csharp theme={null}
PlayFabClientAPI.LoginWithEmailAddress(new LoginWithEmailAddressRequest() {
    Email = "doesnotexist@mail.com",
    Password = "nevercorrect",
}, result => {
    // success
}, error => {
    // General purpose logging: GenerateErrorReport gives a bunch of information about the error
    Debug.Log(error.GenerateErrorReport());

    // Recognize and handle the error
    switch (error.Error) {
        case PlayFabErrorCode.InvalidTitleId:
            // Handle invalid title id error
            break;
        case PlayFabErrorCode.AccountNotFound:
            // Handle account not found error
            break;
        case PlayFabErrorCode.InvalidEmailOrPassword:
            // Handle invalid email or password error
            break;
        case PlayFabErrorCode.RequestViewConstraintParamsNotAllowed:
            // Handle not allowed view params error
            break;
        default:
            // Handle unexpected error
            break;
    }
});
```

## Tratar o erro

Depois que o erro for identificado, a estratégia de tratamento/recuperação dependerá do tipo e da natureza do erro. Erros como *argumentos inválidos* nunca terão êxito se forem repetidos. A solicitação precisa ser corrigida para que essa chamada de API tenha êxito.

Há um subconjunto de erros em que uma estratégia de repetição pode ser aplicada. Os tipos de erro *que podem ser repetidos* estão descritos em [Códigos de erro de métodos da API global](/pt-BR/services/playfab/api-references/global-api-method-error-codes).

Verifique se você atende aos seguintes requisitos ao aplicar uma estratégia de repetição:

* A cada nova tentativa, o atraso entre as tentativas deve *aumentar* exponencialmente. Isso *aumenta* suas chances de uma chamada bem-sucedida e impede que seu jogo sobrecarregue o servidor do PlayFab (o que resultará em *mais* chamadas rejeitadas).

* Você deve aplicar essa estratégia de repetição de forma *seletiva*, usando-a apenas para os códigos que valem a pena repetir.

Consulte nosso tutorial [Códigos de erro de métodos da API global](/pt-BR/services/playfab/api-references/global-api-method-error-codes) para obter uma lista de códigos que podem ser repetidos com segurança.


## Related topics

- [Tratamento de erros do marketplace](/pt-BR/services/playfab/economy-monetization/economy-v2/marketplace/marketplace-error-handling.md)
- [Práticas recomendadas para construção de flowgraphs de áudio do SHAPE](/pt-BR/build/console-features/audio/overviews/best-practices-audio-flowgraph-construction.md)
- [Uso dos privilégios de usuário dos serviços do XBOX no lado do cliente](/pt-BR/services/xbox-services/fundamentals/identity/privileges/concepts/live-user-privileges-client.md)
- [Práticas recomendadas de consumo do PlayFab](/pt-BR/services/playfab/pricing/consumption-best-practices.md)
- [Práticas recomendadas de limitação](/pt-BR/services/playfab/live-service-management/service-gateway/throttling/best-practices.md)
