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

# Pacotes de Publisher Content

> Descreve como criar e distribuir pacotes de Publisher Content, um tipo de pacote que permite que editores de jogos hospedem e atualizem conteúdo complementar em suas próprias CDNs.

# Pacotes de Publisher Content

*Publisher Content* é um tipo de pacote que permite hospedar conteúdo complementar do jogo na sua própria rede de distribuição de conteúdo (CDN), enquanto a plataforma continua gerenciando a instalação, o download em segundo plano, a validação de integridade e a experiência do usuário. Os pacotes de Publisher Content têm suporte em consoles da família XBOX One e em consoles XBOX Series X|S a partir do GDK de outubro de 2026 (GDK 2610).

Os pacotes de Publisher Content se comportam como conteúdo para download (DLC) em tempo de execução: eles são instalados junto com um jogo base, são montados no seu processo e desmontados quando o jogo é encerrado. Diferentemente do DLC, eles não são ingeridos pelo Partner Center, não têm ID da loja e não são vendidos nem licenciados pela Microsoft Store. O seu serviço é a fonte da verdade sobre qual conteúdo é distribuído, quando ele é atualizado e quem o recebe.

## Quando usar o Publisher Content

Considere usar o Publisher Content quando quiser fazer qualquer uma das seguintes ações:

* Distribuir pequenas atualizações de serviço ao vivo (dados de configuração, tabelas de ajuste, pequenos pacotes de ativos) sem passar pela ingestão da Store.
* Entregar conteúdo complementar com a marca do editor que todos os jogadores do jogo base recebem automaticamente.
* Reutilizar uma CDN e um pipeline de conteúdo existentes que você já opera para seus jogos em outras plataformas.
* Manter o controle sobre o momento da distribuição, a segmentação regional ou os testes A/B na camada da CDN.

O Publisher Content não substitui o DLC. Continue usando [pacotes de DLC](/pt-BR/build/core-features/common/packaging/packaging-downloadable-content-dlc) padrão quando precisar de direitos de uso por usuário, fluxos de compra ou licenciamento da Microsoft Store.

## Requisitos e restrições

* Um pacote de Publisher Content por jogo base.
* Disponível para qualquer jogador que possua o jogo base. Não há verificação de licenciamento por usuário.
* Com suporte em consoles da família XBOX One e em consoles XBOX Series X|S.
* O jogo base e o pacote de Publisher Content devem usar o mesmo formato de pacote. Por exemplo, se o jogo base for empacotado como MSIXVC2, o pacote de Publisher Content também deverá ser MSIXVC2.
* O pacote de Publisher Content deve ser pequeno, ou seja, ter menos de 1 GB.
* O pacote de Publisher Content é assinado com material de assinatura fornecido pelo editor, e o jogo base incorpora o material público correspondente para que a plataforma possa validar o Publisher Content que alega pertencer a ele. O próprio jogo base é assinado da mesma forma que qualquer outro título. O material de assinatura varia de acordo com o formato do pacote:
  * **XVC e MSIXVC** — Uma chave de assinatura CNG bruta. RSA-4096 é obrigatório.
  * **MSIXVC2** — Um certificado X.509 com uma chave RSA-4096. O certificado deve estar válido no momento, ter uma chave privada RSA acessível e permitir assinaturas digitais.

<Info>
  A plataforma não oferece sigilo de conteúdo para pacotes de Publisher Content. Diferentemente do DLC da Microsoft Store, o Publisher Content não é criptografado para distribuição: qualquer pessoa que baixar o arquivo da sua CDN poderá inspecionar o conteúdo dele. Se você precisar de confidencialidade para partes da sua carga, criptografe essas partes dentro do próprio conteúdo antes do empacotamento.
</Info>

## Como as partes se encaixam

De modo geral:

1. Você declara uma **URL de manifesto** no seu jogo base em *MicrosoftGame.config*. Essa URL aponta para um pequeno arquivo JSON que você hospeda na sua CDN e pode atualizar a qualquer momento.
2. Você cria um **pacote de Publisher Content** que faz referência ao jogo base pelo ID da loja.
3. Você assina o pacote de Publisher Content com o seu material de assinatura de editor. O jogo base incorpora o material público correspondente para que a plataforma possa validar qualquer Publisher Content que alegue pertencer a ele.
4. Quando um jogador instala o jogo base, a plataforma busca o seu manifesto, lê a URL da CDN do pacote de Publisher Content atual e coloca a instalação dele na fila.
5. Em tempo de execução, o seu jogo enumera os pacotes instalados e monta o pacote de Publisher Content da mesma forma que montaria um DLC.

Para distribuir uma nova revisão do conteúdo, carregue um novo pacote na sua CDN e atualize o seu manifesto para apontar para ele. A plataforma detecta a alteração na próxima verificação de atualizações.

## Configurar o seu jogo base

No arquivo *MicrosoftGame.config* do seu jogo base, adicione um elemento `PublisherContent` com um filho `ManifestUrl`. A URL deve estar acessível a todos os dispositivos que executam o seu jogo.

```xml theme={null}
<?xml version="1.0" encoding="utf-8"?>
<Game configVersion="1">
    <!-- Existing Identity, ShellVisuals, ExecutableList, StoreId, etc. -->

    <StoreId>9NZTKMP36L8J</StoreId>

    <PublisherContent>
        <ManifestUrl>https://example.com/space-raiders/pubxvc/console/manifest.json</ManifestUrl>
    </PublisherContent>
</Game>
```

Para obter mais informações sobre esses elementos, consulte [Elemento PublisherContent (MicrosoftGame.config)](/pt-BR/reference/system/microsoftgameconfig/elements/microsoftgameconfig-element-publishercontent) e [Elemento ManifestUrl (MicrosoftGame.config)](/pt-BR/reference/system/microsoftgameconfig/elements/microsoftgameconfig-element-manifesturl).

## Criar o pacote de Publisher Content

Crie um *MicrosoftGame.config* junto com a carga do seu Publisher Content. Faça referência ao jogo base pelo ID da loja com o elemento `PublisherContentBaseProduct`.

```xml theme={null}
<?xml version="1.0" encoding="utf-8"?>
<Game configVersion="1">
    <Identity Name="ContosoStudios.SpaceRaiders.PublisherContent"
              Publisher="CN=REPLACE_WITH_YOUR_PUBLISHER"
              Version="1.0.0.0"/>

    <ShellVisuals DefaultDisplayName="Space Raiders Publisher Content"
                  PublisherDisplayName="Contoso Studios"
                  StoreLogo="StoreLogo.png"
                  Square150x150Logo="Logo.png"
                  Square44x44Logo="SmallLogo.png"
                  Description="Publisher-hosted content for Space Raiders."
                  BackgroundColor="#000040"
                  SplashScreenImage="SplashScreen.png"/>

    <PublisherContentBaseProduct>9NZTKMP36L8J</PublisherContentBaseProduct>
</Game>
```

Para obter mais informações, consulte [Elemento PublisherContentBaseProduct (MicrosoftGame.config)](/pt-BR/reference/system/microsoftgameconfig/elements/microsoftgameconfig-element-publishercontentbaseproduct).

<Note>
  Não inclua um elemento `AllowedProducts` em um pacote de Publisher Content. Esse elemento identifica um pacote como DLC padrão e é mutuamente exclusivo com `PublisherContentBaseProduct`.
</Note>

## Criar o manifesto

Hospede um pequeno manifesto JSON na `ManifestUrl` que você declarou no jogo base. O manifesto contém um único campo `url` que aponta para o pacote de Publisher Content atual na sua CDN. Não altere o Publisher Content na URL depois de publicado; em vez disso, publique cada nova versão do pacote de Publisher Content em uma nova URL e atualize o manifesto de acordo.

```json theme={null}
{
    "url": "https://example.com/space-raiders/pubxvc/console/space-raiders-pubxvc-v2.30.1.xvc"
}
```

## Gerar o material de assinatura do editor

O material de assinatura do editor fica no seu computador de build e é referenciado pelo nome (ou impressão digital) quando o `makepkg` empacota o jogo base e o pacote de Publisher Content. A forma exata depende do formato de pacote de destino.

<Info>
  Trate a chave de assinatura do editor ou a chave privada do certificado como um segredo de produção. Qualquer pessoa com acesso ao material privado pode produzir pacotes de Publisher Content que a plataforma aceitará como vindos de você.
</Info>

### Para pacotes XVC e MSIXVC

Crie uma chave de assinatura RSA-4096 em um provedor de armazenamento de chaves CNG do Windows no computador de build.

O exemplo do PowerShell a seguir cria uma chave de assinatura RSA-4096 exportável chamada `MyTestPubXvcSigningKey` no Microsoft Software Key Storage Provider.

```powershell theme={null}
Add-Type -AssemblyName System.Security

$keyName = "MyTestPubXvcSigningKey"
$providerName = "Microsoft Software Key Storage Provider"

$cngParams = [System.Security.Cryptography.CngKeyCreationParameters]::new()
$cngParams.Provider     = [System.Security.Cryptography.CngProvider]::new($providerName)
$cngParams.KeyUsage     = [System.Security.Cryptography.CngKeyUsages]::Signing
$cngParams.ExportPolicy = [System.Security.Cryptography.CngExportPolicies]::AllowExport

<# Use an RSA-4096 key. #>
$len = [System.Security.Cryptography.CngProperty]::new(
    "Length", [BitConverter]::GetBytes([int]4096),
    [System.Security.Cryptography.CngPropertyOptions]::None)
$cngParams.Parameters.Add($len)

$key = [System.Security.Cryptography.CngKey]::Create(
    [System.Security.Cryptography.CngAlgorithm]::Rsa, $keyName, $cngParams)

Write-Host "Created CNG key '$keyName' in the $providerName."
```

Passe o nome da chave resultante para `makepkg pack` por meio de `/usepublisherkey`. Se você usar um provedor de armazenamento de chaves CNG diferente do padrão, passe também o nome dele por meio de `/publisherkeyprovider`.

### Para pacotes MSIXVC2

Crie um certificado X.509 cuja chave de entidade seja uma chave RSA-4096 e instale o certificado e a chave privada dele no repositório de certificados `CurrentUser\My`.

O exemplo do PowerShell a seguir cria um certificado RSA-4096 autoassinado em `CurrentUser\My` e exporta o arquivo `.cer` dele.

```powershell theme={null}
$subject = "CN=MyTestPubXvcSigningCertificate"
$certificatePath = Join-Path $PWD "MyTestPubXvcSigningCertificate.cer"

$certificate = New-SelfSignedCertificate `
    -Subject $subject `
    -CertStoreLocation "Cert:\CurrentUser\My" `
    -Provider "Microsoft Software Key Storage Provider" `
    -KeyAlgorithm RSA `
    -KeyLength 4096 `
    -HashAlgorithm SHA256 `
    -KeyUsage DigitalSignature `
    -NotAfter (Get-Date).AddYears(5)

Export-Certificate `
    -Cert $certificate `
    -FilePath $certificatePath `
    -Type CERT
```

Passe o caminho do `.cer` exportado ou a impressão digital do certificado para `makepkg pack` por meio de `/usepublishercert`. Se o certificado estiver instalado em um repositório diferente de `My`, passe também o nome dele por meio de `/publishercertstore`.

## Empacotar o jogo base e o Publisher Content

As duas invocações de `pack` devem fazer referência à mesma chave ou ao mesmo certificado.

### Para pacotes XVC e MSIXVC

Empacote o jogo base:

```console theme={null}
makepkg pack /f layout.xml /d <base_game_folder> /pd <output_folder> /usepublisherkey <publisherkeyname>
```

Empacote o Publisher Content:

```console theme={null}
makepkg pack /f layout.xml /d <publisher_content_folder> /pd <output_folder> /usepublisherkey <publisherkeyname>
```

Se você usar um provedor de armazenamento de chaves CNG diferente do Microsoft Software Key Storage Provider, adicione `/publisherkeyprovider <providername>` aos dois comandos.

### Para pacotes MSIXVC2

Empacote o jogo base:

```console theme={null}
makepkg pack /msixvc2 /d <base_game_folder> /pd <output_folder> /usepublishercert <thumbprint|certificate.cer>
```

Empacote o Publisher Content:

```console theme={null}
makepkg pack /msixvc2 /d <publisher_content_folder> /pd <output_folder> /usepublishercert <thumbprint|certificate.cer>
```

Se o certificado estiver instalado em um repositório diferente de `CurrentUser\My`, adicione `/publishercertstore <store>` aos dois comandos.

Para obter detalhes, consulte [Criar pacote (makepkg.exe)](/pt-BR/build/core-features/common/packaging/deployment/makepkg).

## Publicar e atualizar

<Note>
  Os pacotes de Publisher Content são hospedados na sua CDN e não podem ser carregados no Partner Center. O `makepkg upload` rejeita pacotes de Publisher Content tanto na forma solta quanto empacotada. O pacote do jogo base é carregado normalmente pelo fluxo padrão do Partner Center.
</Note>

1. Carregue o XVC de Publisher Content empacotado na sua CDN, na URL que você referenciou no seu manifesto.
2. Carregue o JSON do seu manifesto na URL que você declarou no elemento `ManifestUrl` do jogo base.
3. Envie e distribua o jogo base pelo Partner Center normalmente.

Para distribuir uma atualização:

1. Carregue o novo pacote de Publisher Content na sua CDN em uma nova URL. Não substitua o pacote de Publisher Content antigo.
2. Atualize o valor de `url` no manifesto para apontar para o novo pacote.
3. Carregue o arquivo JSON atualizado na URL que você declarou no elemento `ManifestUrl` do jogo base.

Os dispositivos instalados detectam a alteração na próxima verificação de atualizações e baixam o novo pacote de Publisher Content em segundo plano.

## Acessar o Publisher Content em tempo de execução

Em tempo de execução, descubra o Publisher Content instalado da mesma forma que você descobre o DLC: usando [XPackageEnumeratePackages](/pt-BR/reference/system/xpackage/functions/xpackageenumeratepackages) e, em seguida, montando o pacote retornado com [XPackageMountWithUiAsync](/pt-BR/reference/system/xpackage/functions/xpackagemountwithuiasync).

Passe [XPackageKind::PublisherContent](/pt-BR/reference/system/xpackage/enums/xpackagekind) para filtrar a enumeração somente para Publisher Content:

```cpp theme={null}
HRESULT hr = XPackageEnumeratePackages(
    XPackageKind::PublisherContent,
    XPackageEnumerationScope::ThisOnly,
    nullptr,
    [](void*, const XPackageDetails* details) -> bool
    {
        // details->packageIdentifier can be passed to XPackageMountWithUiAsync.
        // details->kind is XPackageKind::PublisherContent.
        return true;
    });
```

Se você já tiver um identificador de pacote de outra origem, use [XPackageGetPackageKind](/pt-BR/reference/system/xpackage/functions/xpackagegetpackagekind) para determinar se ele se refere a um pacote de Publisher Content:

```cpp theme={null}
XPackageKind kind;
HRESULT hr = XPackageGetPackageKind(packageIdentifier, &kind);
if (SUCCEEDED(hr) && kind == XPackageKind::PublisherContent)
{
    // Handle Publisher Content.
}
```

Como o Publisher Content não é licenciado pela Microsoft Store, você não precisa chamar [XStoreQueryPackageIdByKind](/pt-BR/gdk-docs/docs/reference/system/xstore/xstore_members) nem executar uma verificação de licença da loja antes da montagem.

## Comportamento de desinstalação

Quando um jogador desinstala o jogo base, a plataforma desinstala automaticamente o pacote de Publisher Content associado. Você não precisa removê-lo explicitamente no código do seu jogo.

## Confira também

* [Elemento PublisherContent (MicrosoftGame.config)](/pt-BR/reference/system/microsoftgameconfig/elements/microsoftgameconfig-element-publishercontent)
* [Elemento ManifestUrl (MicrosoftGame.config)](/pt-BR/reference/system/microsoftgameconfig/elements/microsoftgameconfig-element-manifesturl)
* [Elemento PublisherContentBaseProduct (MicrosoftGame.config)](/pt-BR/reference/system/microsoftgameconfig/elements/microsoftgameconfig-element-publishercontentbaseproduct)
* [Criar pacote (makepkg.exe)](/pt-BR/build/core-features/common/packaging/deployment/makepkg)
* [XPackageKind](/pt-BR/reference/system/xpackage/enums/xpackagekind)
* [XPackageGetPackageKind](/pt-BR/reference/system/xpackage/functions/xpackagegetpackagekind)
* [XPackageEnumeratePackages](/pt-BR/reference/system/xpackage/functions/xpackageenumeratepackages)
* [Pacotes de conteúdo para download (DLC) do GDK](/pt-BR/build/core-features/common/packaging/packaging-downloadable-content-dlc)


## Related topics

- [Paquetes de Publisher Content](/es/build/core-features/common/packaging/packaging-publisher-content.md)
- [Elemento de MicrosoftGame.config: PublisherContent](/es/reference/system/microsoftgameconfig/elements/microsoftgameconfig-element-publishercontent.md)
- [Elemento de MicrosoftGame.config: PublisherContentBaseProduct](/es/reference/system/microsoftgameconfig/elements/microsoftgameconfig-element-publishercontentbaseproduct.md)
- [XR-037 Dependências de pacotes de conteúdo](/pt-BR/publishing/certification/xr/xr-037.md)
- [Compile e execute seu primeiro título de console com o GDKX](/pt-BR/home/build-first-title/first-console-title-walkthrough.md)
