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

# Usar dados do publicador

> Compartilhe dados de configuração e de chave-valor do jogador entre vários títulos em um estúdio do PlayFab usando SetPublisherData, GetPublisherData e APIs relacionadas.

Este tutorial descreve como criar e usar dados com escopo de namespace por meio das APIs de dados do publicador.

Os dados do publicador são dados estáticos que abrangem mais de um título em um namespace do PlayFab, como quando vários jogos precisam compartilhar informações comuns. **Publisher** é o termo de API mais antigo para o escopo de namespace, e a Publisher ID identifica o namespace. Um namespace é diferente de um estúdio, que é o agrupamento administrativo de títulos, usuários, permissões e cobrança. Para obter mais informações, consulte [Conceitos do PlayFab](/pt-BR/services/playfab/get-started/concepts#studios-namespaces-and-titles).

<Note>
  Esta categoria também inclui dados de jogadores que abrangem vários jogos. O PlayFab armazena os dados como pares chave/valor (KVPs).
</Note>

A maioria dessas APIs são APIs de servidor que seu programa deve chamar a partir de um servidor dedicado ou por meio de uma função do CloudScript no serviço PlayFab.

* Use as APIs de servidor **[SetPublisherData](xref:titleid.playfabapi.com.server.title-widedatamanagement.setpublisherdata)** para atualizar e **[GetPublisherData](xref:titleid.playfabapi.com.server.title-widedatamanagement.getpublisherdata)** para recuperar KVPs personalizados específicos do publicador.
* Use **[UpdateUserPublisherData](xref:titleid.playfabapi.com.client.playerdatamanagement.updateuserpublisherdata)** para criar ou atualizar e **[GetUserPublisherData](xref:titleid.playfabapi.com.client.playerdatamanagement.getuserpublisherdata)** para recuperar KVPs personalizados específicos do publicador para o jogador.
* Use a API de servidor **[UpdateUserPublisherReadOnlyData](xref:titleid.playfabapi.com.server.playerdatamanagement.updateuserpublisherreadonlydata)** para atualizar e a API de cliente **[GetUserPublisherReadOnlyData](xref:titleid.playfabapi.com.client.playerdatamanagement.getuserpublisherreadonlydata)** para recuperar os KVPs personalizados somente leitura específicos do publicador para o usuário.
* Use as APIs de servidor **[UpdateUserPublisherInternalData](xref:titleid.playfabapi.com.server.playerdatamanagement.updateuserpublisherinternaldata)** para atualizar e **[GetUserPublisherInternalData](xref:titleid.playfabapi.com.server.playerdatamanagement.getuserpublisherinternaldata)** para recuperar os KVPs personalizados internos específicos do publicador para o usuário.

Você deve chamar as APIs de servidor a partir de um servidor dedicado ou por meio de uma função do CloudScript no serviço PlayFab. Isso é intencional, pois as APIs de servidor do PlayFab exigem que você forneça sua chave secreta.

<Tip>
  *Não recomendamos* usar APIs de servidor em um cliente de jogo. Se precisar usar uma API de servidor, use o CloudScript para esse tipo de funcionalidade.
</Tip>

Os valores dos dados do publicador são copiados e distribuídos para potencialmente *centenas* de máquinas no cluster de servidores do PlayFab. Como parte desse processo, esses dados são armazenados em cache, e as alterações podem levar até *quinze minutos* para serem atualizadas nesses caches.

<Note>
  Os dados do publicador são mais adequados para *dados globais constantes/estáticos* e *não* são adequados nem confiáveis como *variáveis globais*.
</Note>

## Dados do publicador

Os dados do publicador são usados para armazenar dados estáticos dos títulos de um namespace. Cada entrada *não está vinculada* a uma entidade de jogador (ao contrário dos [dados do publicador do usuário](#user-publisher-data)).

### Definir dados do publicador

O trecho a seguir demonstra como definir dados do publicador usando a Server API.

<Note>
  Há uma contraparte na Admin API para esta operação.
</Note>

```csharp theme={null}
public void ServerSetPublisherData() {
    PlayFabServerAPI.SetPublisherData(new SetPublisherDataRequest() {
            Key = "SomeKey",
            Value = "SomeValue"
        },
        result => Debug.Log("Complete setting publisher data"),
        error => {
            Debug.Log("Got error setting publisher data");
            Debug.Log(error.GenerateErrorReport());
        }
    );
}
```

### Obter dados do publicador

O trecho a seguir demonstra como obter dados do publicador usando a Client API.

<Note>
  Há contrapartes na Server API e na Admin API para esta operação.
</Note>

```csharp theme={null}
public void ClientGetPublisherData() {
    PlayFabClientAPI.GetPublisherData(new GetPublisherDataRequest(),
    result => {
        if (result.Data == null || !result.Data.ContainsKey("SomeKey")) Debug.Log("No SomeKey");
        else Debug.Log("SomeKey: " + result.Data["SomeKey"]);
    },
    error => {
        Debug.Log("Got error getting publisher data");
        Debug.Log(error.GenerateErrorReport());
    });
}
```

<a id="user-publisher-data" />

## Dados do publicador do usuário

Os dados do publicador do usuário podem ser usados para introduzir dados do publicador vinculados a um usuário (jogador) do PlayFab.

Ao contrário dos dados do publicador normais, um aplicativo cliente pode alterar os dados do publicador do usuário.

O PlayFab expõe 3 níveis de proteção para os dados do publicador do usuário do ponto de vista da Client API:

1. Os dados do publicador do usuário normais expõem acesso de leitura e gravação para aplicativos cliente.

   * Definidos pela Client API, Server API e Admin API.
   * Obtidos pela Client API, Server API e Admin API.
   * A Client API só pode definir dados do publicador para um jogador que esteja conectado no momento.

2. Os dados do publicador do usuário somente leitura expõem acesso de leitura para aplicativos cliente.

   * Definidos pela Server API e Admin API.
   * Obtidos pela Client API, Server API e Admin API.

3. Os dados do publicador do usuário internos não expõem nenhum acesso para aplicativos cliente e são usados para armazenar a parte secreta dos dados do usuário.

   * Definidos pela Server API e Admin API.
   * Obtidos pela Server API e Admin API.

### Definir dados do publicador do usuário

O trecho a seguir demonstra como definir os 3 tipos de dados do publicador usando as Client APIs e Server APIs.

```csharp theme={null}
// Use Client API to set User Publisher Data for current user
public void ClientSetUserPublisherData() {
    PlayFabClientAPI.UpdateUserPublisherData(new UpdateUserDataRequest() {
         Data  = new Dictionary<string, string>() {
             { "SomeKey", "SomeValue" }
         }
    },
    result => Debug.Log("Complete setting Regular User Publisher Data"),
    error =>
    {
        Debug.Log("Error setting Regular User Publisher Data");
        Debug.Log(error.GenerateErrorReport());
    });
}

// Use Server API to set Read-Only User Publisher Data for selected user
public void ServerSetUserPublisherReadOnlyData() {
    PlayFabServerAPI.UpdateUserPublisherReadOnlyData(new UpdateUserDataRequest() {
         PlayFabId = "< PlayFab Player Id >",
         Data  = new Dictionary<string, string>() {
             { "SomeKey", "SomeValue" }
         }
    },
    result => Debug.Log("Complete setting Read-Only User Publisher Data"),
    error =>
    {
        Debug.Log("Error setting Read-Only User Publisher Data");
        Debug.Log(error.GenerateErrorReport());
    });
}

// Use Server API to set Internal User Publisher Data for selected user
public void ServerSetUserPublisherInternalData() {
    PlayFabServerAPI.UpdateUserPublisherInternalData(new UpdateUserInternalDataRequest() {
         PlayFabId = "< PlayFab Player Id >",
         Data  = new Dictionary<string, string>() {
             { "SomeKey", "SomeValue" }
         }
    },
    result => Debug.Log("Complete setting Internal User Publisher Data"),
    error =>
    {
        Debug.Log("Error setting Internal User Publisher Data");
        Debug.Log(error.GenerateErrorReport());
    });
}
```

### Obter dados do publicador do usuário

O trecho a seguir demonstra como obter os 3 tipos de dados do publicador usando as Client APIs e Server APIs.

```csharp theme={null}
// Use Client API to get Regular User Publisher Data for selected user
public void ClientGetUserPublisherData() {
    PlayFabClientAPI.GetUserPublisherData(new GetUserDataRequest() {
        PlayFabId = "<PlayFab Player Id>"
    }, result => {
        if (result.Data == null || !result.Data.ContainsKey("SomeKey")) Debug.Log("No SomeKey");
        else Debug.Log("SomeKey: " + result.Data["SomeKey"]);
    },
    error => {
        Debug.Log("Got error getting Regular Publisher Data:");
        Debug.Log(error.GenerateErrorReport());
    });
}

// Use Client API to get Read-Only User Publisher Data for selected user
public void ClientGetUserPublisherReadOnlyData() {
    PlayFabClientAPI.GetUserPublisherReadOnlyData(new GetUserDataRequest() {
        PlayFabId = "<PlayFab Player Id>"
    }, result => {
        if (result.Data == null || !result.Data.ContainsKey("SomeKey")) Debug.Log("No SomeKey");
        else Debug.Log("SomeKey: " + result.Data["SomeKey"]);
    },
    error => {
        Debug.Log("Got error getting Read-Only Publisher Data:");
        Debug.Log(error.GenerateErrorReport());
    });
}

// Use Server API to get Internal User Publisher Data for selected user
public void ServerGetUserPublisherInternalData() {
    PlayFabServerAPI.GetUserPublisherInternalData(new GetUserDataRequest() {
        PlayFabId = "<PlayFab Player Id>"
    }, result => {
        if (result.Data == null || !result.Data.ContainsKey("SomeKey")) Debug.Log("No SomeKey");
        else Debug.Log("SomeKey: " + result.Data["SomeKey"]);
    },
    error => {
        Debug.Log("Got error getting Internal Publisher Data:");
        Debug.Log(error.GenerateErrorReport());
    });
}
```

## Confira também

* [Início rápido de dados do título](/pt-BR/services/playfab/live-service-management/game-configuration/titledata/quickstart)
* [Início rápido do CloudScript](/pt-BR/services/playfab/live-service-management/service-gateway/automation/cloudscript/quickstart)


## Related topics

- [Dados do título](/pt-BR/services/playfab/live-service-management/game-configuration/titledata/index.md)
- [Início rápido de dados do título](/pt-BR/services/playfab/live-service-management/game-configuration/titledata/quickstart.md)
- [Usar os dados de publicador do jogador para recompensar o jogo em vários títulos](/pt-BR/services/playfab/player-progression/player-data/using-player-publisher-data.md)
- [Dados do jogador](/pt-BR/services/playfab/player-progression/player-data/index.md)
- [Usar objetos de entidade para armazenar dados do jogador](/pt-BR/services/playfab/live-service-management/game-configuration/entities/entity-objects.md)
