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

# Início rápido de Java para Native e Android Studio

> Baixe os arquivos JAR do SDK de cliente do PlayFab para Java, configure o classpath e faça sua primeira chamada à API LoginWithCustomID em Java nativo ou Android.

Este início rápido permite que você comece a usar o PlayFab JavaSDK com um programa Java simples.

Antes de chamar qualquer API do PlayFab, você precisa ter uma [conta de desenvolvedor do PlayFab](https://developer.playfab.com).

Os objetivos deste tutorial são:

* Obter os arquivos JAR necessários.

* Adicionar os arquivos JAR ao classpath.

* Criar um aplicativo de console Java mínimo que execute a [chamada à API de logon com Custom ID](xref:titleid.playfabapi.com.client.authentication.loginwithcustomid).

## Obter os arquivos JAR necessários

Para utilizar o PlayFab JavaSDK, precisamos do PlayFab Client JavaSDK e de sua dependência, o Google GSON.

Baixe a biblioteca JAR do PlayFab Client JavaSDK [aqui](https://github.com/PlayFab/JavaSDK/tree/versioned/builds). Procure **client-sdk-\*.jar** e o Java Doc correspondente \[opcional, mas útil].

Você pode baixar a versão mais recente do Google GSON [aqui](https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.0/). Procure **gson-\*.jar**.

## Configuração do projeto com o Intellij Idea

Depois de inicializar um projeto Java simples no Intellij Idea, coloque os arquivos JAR necessários conforme mostrado no exemplo a seguir.

![Intellij - Configuração do projeto](https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/java/intellij-proj-setup.png?fit=max\&auto=format\&n=N3T1ucKV7zIMBudj\&q=85\&s=85dc548792dd8ba7c4dffd3eaddd3d43)

A próxima etapa é adicionar os arquivos JAR ao classpath. Navegue até **File** -> **,** conforme mostrado no exemplo abaixo.

![Intellij - Adicionar arquivos JAR ao classpath](https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/java/intellij-add-jar-files-to-classpath.png?fit=max\&auto=format\&n=N3T1ucKV7zIMBudj\&q=85\&s=167ce0cbbce7cefb93979d2ccfa8b896)

Navegue até **Libraries** e adicione uma nova biblioteca Java, conforme ilustrado na imagem abaixo.

![Intellij - Adicionar nova biblioteca Java](https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/java/intellij-add-new-java-library.png?fit=max\&auto=format\&n=N3T1ucKV7zIMBudj\&q=85\&s=db7b46a3ccb01057f0d1e66474ab828c)

Selecione os arquivos JAR que você adicionou à pasta libs e selecione **OK**, conforme mostrado abaixo.

![Intellij - Selecionar arquivos JAR](https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/java/intellij-select-jar-files.png?fit=max\&auto=format\&n=N3T1ucKV7zIMBudj\&q=85\&s=e60d7b28a9a1880a0ddd32661d6c7765)

Se for solicitado o **Module**, selecione o primeiro da lista. Verifique se todos os arquivos JAR foram adicionados à lista de bibliotecas.

![Intellij - Verificar se os arquivos JAR foram adicionados](https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/java/intellij-ensure-jar-files-added.png?fit=max\&auto=format\&n=N3T1ucKV7zIMBudj\&q=85\&s=6dc524df20ee6c2b4a2cb3a894fd83c2)

## Configuração do projeto com qualquer IDE

O principal requisito é ter os arquivos JAR adicionados ao classpath. Consulte o guia do seu IDE para saber como adicionar arquivos JAR ao classpath.

## Configurar sua primeira chamada à API

Use o código mostrado abaixo como código da sua classe principal.

```java theme={null}
import java.util.concurrent.*;
import java.util.*;

import com.playfab.PlayFabErrors.*;
import com.playfab.PlayFabSettings;
import com.playfab.PlayFabClientModels;
import com.playfab.PlayFabClientAPI;

public class Main
{
    private static boolean _running = true;

    public static void main(String[] args) {
        PlayFabSettings.TitleId = "144";

        PlayFabClientModels.LoginWithCustomIDRequest request = new PlayFabClientModels.LoginWithCustomIDRequest();
        request.CustomId = "GettingStartedGuide";
        request.CreateAccount = true;

        FutureTask<PlayFabResult<com.playfab.PlayFabClientModels.LoginResult>> loginTask = PlayFabClientAPI.LoginWithCustomIDAsync(request);
        loginTask.run();

        while (_running) {
            if (loginTask.isDone()) { // You would probably want a more sophisticated way of tracking pending async API calls in a real game
                OnLoginComplete(loginTask);
            }

            // Presumably this would be your main game loop, doing other things
            try {
                Thread.sleep(1);
            } catch(Exception e) {
                System.out.println("Critical error in the example main loop: " + e);
            }
        }
    }

    private static void OnLoginComplete(FutureTask<PlayFabResult<com.playfab.PlayFabClientModels.LoginResult>> loginTask) {
        PlayFabResult<com.playfab.PlayFabClientModels.LoginResult> result = null;
        try {
            result = loginTask.get(); // Wait for the result from the async call
        } catch(Exception e) {
            System.out.println("Exception in PlayFab api call: " + e); // Did you assign your PlayFabSettings.TitleId correctly?
        }

        if (result != null && result.Result != null) {
            System.out.println("Congratulations, you made your first successful API call!");
        } else if (result != null && result.Error != null) {
            System.out.println("Something went wrong with your first API call.");
            System.out.println("Here's some debug information:");
            System.out.println(CompileErrorsFromResult(result));
        }

        _running = false; // Because this is just an example, successful login triggers the end of the program
    }

    // This is a utility function we haven't put into the core SDK yet. Feel free to use it.
    private static <RT> String CompileErrorsFromResult(PlayFabResult<RT> result) {
        if (result == null || result.Error == null)
            return null;

        String errorMessage = "";
        if (result.Error.errorMessage != null)
            errorMessage += result.Error.errorMessage;
        if (result.Error.errorDetails != null)
            for (Map.Entry<String, List<String>> pair : result.Error.errorDetails.entrySet() )
                for (String msg : pair.getValue())
                    errorMessage += "\n" + pair.getKey() + ": " + msg;
        return errorMessage;
    }
}
```

## Concluir e executar

Para executar o aplicativo:

1. Selecione a **seta de reprodução >** no canto superior direito. Isso iniciará a execução do programa, e o painel de saída será exibido.
2. Localize a **mensagem de depuração**. Ela indica que a chamada à API foi bem-sucedida.

![Intellij - Executar o programa](https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/java/intellij-run-program.png?fit=max\&auto=format\&n=N3T1ucKV7zIMBudj\&q=85\&s=04ce4add6100b9b56db869bf97baadbb)

Agora você pode começar a fazer outras chamadas à API e a criar seu jogo.

Para obter uma lista de todas as chamadas disponíveis da API de cliente, consulte nossa documentação de [Referências de API do PlayFab](/pt-BR/services/playfab/api-references).

## Desconstruir o código

Esta última seção opcional descreve em detalhes cada linha de `GettingStarted.java`.

* Imports
  * Este é o conjunto mínimo de imports usado para fazer chamadas à API do PlayFab.

* public static void `main(String[] args) {`
  * Apenas um loop básico que inicia uma chamada à API e aguarda sua conclusão.

  * `PlayFabSettings.TitleId = "xxxx"`;
    * Todo desenvolvedor do PlayFab cria um título no Game Manager. Ao publicar seu jogo, você precisa codificar esse titleId no jogo. Isso permite que o cliente saiba como acessar os dados corretos no PlayFab. Para a maioria dos usuários, basta considerar isso uma etapa obrigatória para que o PlayFab funcione.

  * `PlayFabClientModels.LoginWithCustomIDRequest request = new PlayFabClientModels.LoginWithCustomIDRequest();`
    * A maioria dos métodos da API do PlayFab exige parâmetros de entrada, e esses parâmetros são empacotados em um objeto de requisição.

    * Cada método da API exige um objeto de requisição exclusivo, com uma combinação de parâmetros opcionais e obrigatórios.
      * Para `LoginWithCustomIDRequest`, há um parâmetro obrigatório `CustomId`, que identifica um jogador de forma exclusiva, e `CreateAccount`, que permite a criação de uma nova conta com essa chamada.

    * Para o logon, a maioria dos desenvolvedores vai querer usar um método de logon mais adequado.
      * Consulte a documentação de logon do PlayFab para obter uma lista de todos os métodos de logon e parâmetros de entrada. As opções comuns são:
        * `LoginWithAndroidDeviceID`
        * `LoginWithIOSDeviceID`
        * `LoginWithEmailAddress`

  * `FutureTask<PlayFabResult<com.playfab.PlayFabClientModels.LoginResult>> loginTask = PlayFabClientAPI.LoginWithCustomIDAsync(request)`;
    * Isso inicia a requisição assíncrona para `LoginWithCustomID`, usando o framework FutureTask do Java.

  * While (running) `{ if (loginTask.isDone()) { OnLoginComplete(loginTask); } }`
    * Executa um loop principal trivial e aguarda de forma assíncrona a conclusão do loginTask.
    * Ao terminar, chama `OnLoginComplete`.

* `OnLoginComplete (loginTask)`
  * `result = loginTask.get()`;
    * Busca o resultado assíncrono (isso não causará bloqueio, porque confirmamos que o FutureTask já foi concluído).

  * Se (`result.Result != null`), a chamada à API foi bem-sucedida.
    * Em caso de sucesso, o objeto `result.Result` de muitos callbacks de API conterá as informações solicitadas.

    * `LoginResult` contém especificamente algumas informações básicas sobre o jogador. Mas, para a maioria dos usuários, o logon é simplesmente uma etapa obrigatória antes de chamar outras APIs.

  * Se (`result.Error != null`), a chamada à API falhou.
    * As chamadas à API podem falhar por vários motivos, e você deve sempre tentar tratar a falha.
    * Por que as chamadas à API falham (em ordem de probabilidade)
      * `PlayFabSettings.TitleId` não está definido. Se você se esquecer de definir `TitleId` para o seu título, nada funcionará.
      * Parâmetros da requisição. Se você não tiver fornecido as informações corretas ou obrigatórias para uma determinada chamada à API, ela falhará. Consulte `error.errorMessage`, `error.errorDetails` ou `error.GenerateErrorReport()` para obter mais informações.
      * Problema de conectividade do dispositivo. Celulares perdem e recuperam a conectividade constantemente, portanto qualquer chamada à API pode falhar aleatoriamente a qualquer momento e funcionar logo em seguida. Entrar em um túnel pode desconectar você completamente.
      * Problema no servidor do PlayFab. Como em qualquer software, podem ocorrer problemas. Consulte nossas [notas de versão](/pt-BR/services/playfab/release-notes) para obter atualizações.
      * A internet não é 100% confiável. Às vezes, a mensagem é corrompida ou não chega ao servidor do PlayFab.

  * Se você estiver com dificuldades para depurar um problema e as informações do erro não forem suficientes, visite nossos [fóruns](https://community.playfab.com/index.html).


## Related topics

- [Início rápido de JavaScript para Native e Phaser](/pt-BR/services/playfab/sdks/javascript/quickstart.md)
- [Início rápido Android](/pt-BR/services/playfab/sdks/c/quickstart-android.md)
- [PlayFab Services para Android](/pt-BR/services/playfab/sdks/platforms/android.md)
- [Início rápido de notificações por push](/pt-BR/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/quickstart.md)
- [SDK do PlayFab para C++ herdado](/pt-BR/services/playfab/sdks/playfab-cpp/index.md)
