Pular para o conteúdo principal

Incorporar um mapa publicado

Ao terminar este guia, um mapa criado no Kaleidr Studio estará ativo na sua página, restrito aos sites escolhidos, e sua página saberá se ele carregou. Funciona em todos os planos, inclusive o Free. É necessária uma conta Kaleidr para publicar, mas não uma chave de API.

Antes de começar​

  • Um mapa no Kaleidr Studio pronto para exibição pública.
  • Uma página que você possa editar. O elemento do SDK precisa de uma tag <script>; o iframe comum precisa apenas de HTML.
  • Se houver uma Política de Segurança de Conteúdo, permissão para incorporar https://map-embed.kaleidr.com e, no caso do SDK, carregar scripts de https://cdn.kaleidr.com. Veja Content Security Policy.
  • Um modo de servir a página por HTTP para os testes, por exemplo npx serve . na pasta.

Etapa 1: publique o mapa​

  1. Abra o mapa no Studio e selecione Publish. A página Publish & embed será aberta.
  2. Em Project status, aparece Draft. Selecione Go Live.

Resultado esperado: o status muda para Live, o botão vira Re-publish, surge Unpublish ao lado e aparece a seção Embed code com uma visualização ao vivo abaixo.

Um mapa publicado exibe o estado salvo atualmente no Studio, não uma cópia do momento em que você clicou em Go Live. O Studio salva as edições durante o trabalho; por isso, alterações posteriores, inclusive conjuntos de dados adicionados, ficam públicas na próxima carga da incorporação. Não é preciso clicar em Re-publish. Esse botão registra uma nova versão publicada mantendo o mesmo ID, link e código de incorporação; o visitante vê o mesmo mapa antes e depois.

Para alterar um mapa publicado sem expor o trabalho em andamento, use Unpublish antes de editar e publique novamente depois, ou edite uma cópia separada. Despublicar interrompe todas as incorporações desse mapa até sua republicação.

A publicação inclui os dados enviados. Os conjuntos de dados e as sobreposições de imagens adicionados no painel Data aparecem para os visitantes como camadas com a formatação definida. Leia Dados enviados em um mapa publicado antes de publicar informações que não devem ser públicas.

Etapa 2: copie o código de incorporação​

A seção Embed code oferece dois formatos.

Formato no StudioO que você recebeQuando usar
iFrameUm <iframe> comum apontando para o mapa publicado.A página não executa scripts próprios (criador de sites, bloco de CMS ou wiki), ou você só precisa mostrar o mapa.
DeveloperO carregador do SDK e um elemento <kaleidr-map product="viewer">.Você controla a página e deseja definir ou mover a câmera pelo código, colocar um chat sobre o mapa ou gerenciar seu ciclo de vida em um aplicativo de página única.

Escolha um formato e clique em Copy.

Formato iFrame:

<iframe
src="https://map-embed.kaleidr.com/embed/YOUR_MAP_ID"
width="100%"
height="480"
style="border:0;"
loading="lazy"
referrerpolicy="no-referrer-when-downgrade"
allow="geolocation; microphone; fullscreen; clipboard-write"
title="Kaleidr map"
></iframe>

Formato Developer:

<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js" async></script>
<kaleidr-map product="viewer" share-id="YOUR_MAP_ID"
style="display:block;width:100%;height:480px;"></kaleidr-map>

YOUR_MAP_ID representa o ID inserido pelo Studio no trecho de código. Ele contém letras, números e os caracteres ., _, ~ e -, com até 100 caracteres. O mesmo ID funciona nos dois formatos.

Os dois formatos trazem o Kaleidr AI do mapa: o painel Ask Kaleidr quando Control Tower está ativo e o chat com IA nos pop-ups quando Popup Window está ativo. Consulte Kaleidr AI em um mapa publicado.

Etapa 3: adicione à página e ajuste as dimensões​

Cole o trecho onde o mapa deve aparecer.

Resultado esperado: o indicador “Loading map…” e depois o mapa na visualização salva no Studio.

Regras de dimensionamento:

  • Iframe comum: defina width e height como faria com qualquer iframe.

  • Elemento do SDK: defina uma altura. <kaleidr-map> usa display:block por padrão, permitindo aplicar a altura. Os exemplos usam style="display:block; height:480px", sem efeitos adversos, inclusive para Safari anterior à versão 16.4, no qual o elemento permanece inline e ignora height. Também é possível definir ambos em uma folha de estilo:

    kaleidr-map { display: block; height: 480px; }
  • O mapa ocupa toda a largura do elemento. Se não houver altura quando ele for montado, usará 500 pixels fixos, mesmo que a altura seja definida posteriormente. Em uma aba oculta ou painel recolhido, monte o elemento quando ficar visível ou dê uma altura explícita.

  • Para altura responsiva, use qualquer CSS que resulte em uma altura: height:60vh, aspect-ratio:16/9 ou uma célula de flex/grid.

Etapa 4: defina a câmera inicial (opcional)​

O mapa abre na visualização salva pelo autor. Ele pode ter configurações diferentes para telas de computador, tablet e celular, ou enquadrar automaticamente seu conteúdo conforme a largura e reajustar ao redimensionar. Para abrir em outra posição, informe a câmera. Em center, a longitude vem antes da latitude.

No elemento:

<kaleidr-map product="viewer" share-id="YOUR_MAP_ID"
center="-0.1276,51.5072" zoom="12" pitch="45" bearing="-20"
style="display:block; height:480px"></kaleidr-map>

No iframe comum, acrescente a câmera ao URL como camera=longitude,latitude,zoom:

<iframe
src="https://map-embed.kaleidr.com/embed/YOUR_MAP_ID?camera=-0.1276,51.5072,12&pitch=45&bearing=-20"
width="100%" height="480" style="border:0;" loading="lazy"
referrerpolicy="no-referrer-when-downgrade" allow="geolocation; microphone; fullscreen; clipboard-write"
title="Kaleidr map"></iframe>

A câmera informada tem precedência sobre a visualização salva pelo autor, inclusive configurações para diferentes tamanhos de tela e enquadramento do conteúdo. Cada campo informado substitui apenas aquele valor; os omitidos permanecem como estavam. Depois de definir uma câmera, o mapa deixa de ajustar automaticamente o enquadramento ao redimensionar. Regra importante: zoom é ignorado quando center não é fornecido. pitch e bearing funcionam sozinhos.

Resultado esperado: o mapa abre com a câmera definida, mantendo marcadores, camadas e dados enviados.

Para mover a câmera após o carregamento, monte o mapa por JavaScript e guarde o handle:

<div id="map" style="height:480px"></div>
<button id="paris">Paris</button>

<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
<script>
const handle = Kaleidr.mount('#map', {
product: 'viewer',
shareId: 'YOUR_MAP_ID',
});

document.getElementById('paris').addEventListener('click', () => {
// duration is in milliseconds. Leave it out to jump with no animation.
handle.setCamera({ center: [2.3522, 48.8566], zoom: 12, duration: 800 });
});
</script>

Dois pontos sobre setCamera:

  • O método pertence ao handle retornado por Kaleidr.mount, não ao elemento. document.querySelector('kaleidr-map').setCamera é undefined. Para mover um mapa montado como elemento, altere seus atributos center, zoom, pitch ou bearing; o mapa muda sem animação.
  • Você pode chamar o método a qualquer momento após Kaleidr.mount. Chamadas feitas antes de o iframe estar pronto são guardadas e aplicadas quando chegar o sinal de pronto, sem esperar a mensagem kaleidr-embed:ready da Etapa 6. Para escolher a visualização inicial, use as opções de montagem.
  • Assim como uma câmera inicial, a configuração manual prevalece sobre a visualização salva e interrompe o reenquadramento automático ao redimensionar. Os campos omitidos mantêm seus valores atuais.

Etapa 5: restrinja os sites que exibem o mapa (opcional)​

Por padrão, qualquer site que tenha o ID pode incorporar um mapa publicado. Para restringir:

  1. Abra o mapa no Studio e selecione Share. Isso publica o mapa caso ainda seja rascunho e cria um novo link de compartilhamento a cada abertura.

  2. Abra a aba Embed.

  3. Altere a permissão de Any domain para Specific domains.

  4. Digite um domínio por linha, por exemplo:

    example.com
    blog.example.org
  5. Clique fora do campo. O Studio salva a lista e mostra Saved.

Resultado esperado: o mapa continua visível nos sites listados. Em outros sites, o iframe informa “This map isn't allowed to render on this site. Please contact the map owner.”

Como a lista é interpretada:

  • Informe apenas nomes de host. O prefixo https:// é ignorado. Não inclua caminho nem porta.
  • Um domínio também autoriza seus subdomínios. example.com abrange example.com, www.example.com e shop.eu.example.com.
  • Para testar localmente com a lista ativa, adicione localhost.
A verificação depende do referenciador

O mapa lê o referenciador enviado pelo navegador quando o iframe carrega. Sem esse valor, um mapa restrito por domínio não é exibido. Isso acontece quando:

  • a página envia Referrer-Policy: no-referrer ou same-origin por cabeçalho ou <meta name="referrer">;
  • o iframe contém referrerpolicy="no-referrer";
  • a página foi aberta do disco com um URL file://;
  • alguém abre diretamente o URL do iframe em outra aba.

A política padrão dos navegadores, strict-origin-when-cross-origin, envia a origem e funciona. Se a política do seu site for mais rigorosa, mantenha referrerpolicy="no-referrer-when-downgrade" no iframe comum, ou flexibilize a política da página que o contém.

Se seu mapa estiver dentro de outro iframe, o referenciador será o endereço desse iframe externo. O domínio dele deve constar na lista.

Os domínios permitidos controlam onde o mapa aparece, mas não tornam seu conteúdo confidencial, inclusive os conjuntos de dados desenhados: veja Dados enviados em um mapa publicado. Não publique dados que precisam permanecer privados.

Etapa 6: detecte o carregamento ou erro (opcional)​

O SDK não oferece uma promise ready, e o elemento não emite eventos. O iframe envia uma mensagem à página em dois casos:

MensagemQuandoCampos
kaleidr-embed:readyO mapa foi desenhado pela primeira vez.type, id (ID do mapa), source ("publish" ou "share")
kaleidr-embed:errorO mapa não carregou ou parte não pôde ser desenhada.type, id, code, message

Escute no window e confira a origem da mensagem e qual iframe a enviou:

const el = document.getElementById('locations'); // the <kaleidr-map> element

window.addEventListener('message', (event) => {
if (event.origin !== 'https://map-embed.kaleidr.com') return;
const frame = el.querySelector('iframe');
if (!frame || event.source !== frame.contentWindow) return;

const msg = event.data;
if (!msg || typeof msg.type !== 'string') return;

if (msg.type === 'kaleidr-embed:ready') {
console.log('map loaded', msg.id);
} else if (msg.type === 'kaleidr-embed:error') {
console.warn('map problem', msg.code, msg.message);
}
});

No iframe comum, compare event.source com o contentWindow desse iframe.

O code de uma mensagem de erro pode ser:

codeSignificadoO que aparece no iframe
no_idO URL do iframe não contém ID.“Couldn't find a map id in the URL.”
not_foundO mapa não foi publicado, foi despublicado ou tem um ID incorreto.“This map isn't available — it may have been unpublished, paused, or the link is incorrect.”
domain_not_allowedO domínio não está autorizado ou não enviou referenciador.“This map isn't allowed to render on this site. Please contact the map owner.”
map_loads_exhaustedA organização esgotou suas cargas de mapa no período.“This map has reached its map load limit. It will be available again when the owner's allowance resets.”
fetch_failedNão foi possível buscar o mapa, por exemplo, por problema de rede.“Could not load the map. Please try again in a moment.”
maplibre_errorO mapa iniciou, mas parte dele não pôde ser desenhada. message fornece detalhes.O mapa, talvez com elementos faltando.

Observações sobre os sinais:

  • Com todos os códigos exceto maplibre_error, o mapa não aparece e ready nunca chega.
  • maplibre_error pode ocorrer antes ou depois de ready, várias vezes. É um aviso, não prova de que o mapa está inutilizável.
  • O SDK carrega o iframe sob demanda. Um mapa muito abaixo na página só começa a carregar quando o visitante se aproxima ao rolar; nenhuma mensagem chega até então. Não considere alguns segundos de silêncio um erro.
  • O iframe também envia outras mensagens kaleidr-embed: de uso interno do SDK. Reconheça apenas os dois tipos acima.

Uma página completa​

Salve como index.html, substitua YOUR_MAP_ID e sirva a pasta por HTTP.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Our locations</title>
<style>
body { font-family: system-ui, sans-serif; margin: 2rem; }
#map { height: 480px; }
</style>
</head>
<body>
<h1>Our locations</h1>
<p id="status">Loading the map…</p>

<div id="map"></div>
<p>
<button id="london">London</button>
<button id="paris">Paris</button>
</p>

<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
<script>
const target = document.getElementById('map');
const status = document.getElementById('status');

const handle = Kaleidr.mount(target, {
product: 'viewer',
shareId: 'YOUR_MAP_ID',
});

window.addEventListener('message', (event) => {
if (event.origin !== 'https://map-embed.kaleidr.com') return;
const frame = target.querySelector('iframe');
if (!frame || event.source !== frame.contentWindow) return;
const msg = event.data;
if (!msg || typeof msg.type !== 'string') return;

if (msg.type === 'kaleidr-embed:ready') {
status.textContent = 'Map loaded.';
} else if (msg.type === 'kaleidr-embed:error' && msg.code !== 'maplibre_error') {
status.textContent = 'The map could not load (' + msg.code + ').';
}
});

document.getElementById('london').addEventListener('click', () => {
handle.setCamera({ center: [-0.1276, 51.5072], zoom: 12, duration: 800 });
});
document.getElementById('paris').addEventListener('click', () => {
handle.setCamera({ center: [2.3522, 48.8566], zoom: 12, duration: 800 });
});
</script>
</body>
</html>

Funcionamento​

TemaComportamento
Visualização inicialA salva pelo autor, a menos que você forneça uma câmera, que prevalece campo a campo.
RolagemRolar com o ponteiro sobre o mapa aproxima o mapa, como no Studio. Com o ponteiro fora do mapa, a rolagem move a página. Em telas sensíveis ao toque, arrastar move o mapa e o gesto de pinça altera o zoom.
AtualizaçõesA incorporação mostra o estado atualmente salvo no Studio. Uma edição salva aparece na próxima carga, sem republicar.
Dados enviadosConjuntos de dados e sobreposições de imagem aparecem nas camadas configuradas: veja Dados enviados em um mapa publicado.
DespublicaçãoUm mapa não publicado mostra a mensagem de indisponibilidade; ao republicar, os mesmos URLs voltam a funcionar. Veja Despublicar um mapa.
Pop-upsAo clicar, os detalhes de locais aparecem apenas se o autor habilitou pop-ups.
AlturaUsa a altura do elemento no momento da montagem; caso contrário, 500 pixels fixos.
CarregamentoO iframe do SDK carrega sob demanda, próximo da área visível.
ChaveNenhuma. Não forneça chave publicável a um viewer: isso gera uma solicitação de sessão desnecessária e, caso recusada, impede a exibição.

Dados enviados em um mapa publicado​

Os conjuntos de dados do painel Data do Studio integram o mapa publicado. Cada conjunto e sobreposição de imagem aparece na camada configurada, tanto no iframe comum quanto no SDK ou em links de compartilhamento. Não é preciso ativar nada; a página que incorpora o mapa não precisa de chave.

Como o mapa publicado reflete o estado salvo, um conjunto de dados adicionado após a publicação fica público assim que o mapa é salvo, sem republicação.

Quais dados são enviados e para quem:

  • Somente dados de um mapa publicado. Um conjunto é enviado ao visitante quando faz parte do mapa publicado ou de um link de compartilhamento. Dados de um mapa não publicado não são enviados.
  • Não é possível buscar um conjunto isoladamente. Não existe uma listagem dos conjuntos do mapa, e o ID do conjunto não funciona sem o mapa publicado correspondente.
  • Quem pode abrir o mapa pode ler os dados. Mapas publicados são públicos. Domínios permitidos controlam onde são exibidos, não a confidencialidade.
  • Todas as colunas são enviadas, não somente as usadas no estilo. O navegador recebe todas as linhas e colunas. Remova do arquivo qualquer coluna que não deva ser pública antes de enviá-lo novamente.

Como interromper o envio de um conjunto de dados:

Ação no StudioEfeito no mapa publicadoEfeito no link de compartilhamento
Excluir o conjunto no painel DataEle deixa de ser enviado; o restante do mapa não muda.O link mostra o mapa sem essa camada.
Despublicar o mapaNenhum conteúdo do mapa, inclusive dados, é enviado.Nenhum. O link continua exibindo os dados que tinha.

Para excluir um conjunto de dados, clique na lixeira da linha correspondente no painel Dados e confirme. Excluir ou substituir um conjunto de dados explica as etapas e o efeito posterior de Desfazer. Excluir apenas as camadas que exibem um conjunto de dados não é a mesma coisa: ele continua armazenado e associado ao mapa e, portanto, continua sendo disponibilizado.

Um link de compartilhamento é um instantâneo do design do mapa. Ele mostra o mapa como estava quando o link foi criado: editar o mapa posteriormente ou cancelar sua publicação não altera o que o link exibe. O instantâneo inclui o nome do mapa, a lista de domínios permitidos e os interruptores do Kaleidr AI daquele momento; alterações posteriores neles não mudam onde um link já criado é exibido nem quais recursos do Kaleidr AI ele oferece. O Kaleidr AI dele também depende do mapa: funciona apenas enquanto o mapa estiver publicado e apenas em uma página que os domínios permitidos do mapa incluem agora, então cancelar a publicação do mapa ou remover um domínio o interrompe. O dono do mapa paga por ele; consulte Kaleidr AI em um mapa publicado.

Um link de compartilhamento é uma captura do design do mapa. Ele mostra o estado no momento da criação, mesmo que o mapa seja editado ou despublicado depois. A exceção são os conjuntos de dados: cada link lê a mesma cópia armazenada, então excluir um conjunto o remove de todos os links que o exibiam.

Abrir Share no Studio publica o mapa e cria um link novo a cada vez. Portanto um mapa compartilhado várias vezes tem diversos links, cada um com o design daquele momento.

O Studio não oferece opção para excluir ou pausar um link compartilhado. Ele continua funcionando até que os dados sejam excluídos ou você peça à Kaleidr que o remova. Para fornecer uma versão mais recente, abra Share novamente e envie o novo link; os anteriores conservam sua visualização.

Despublicar um mapa​

Na página Publish & embed, um mapa ativo oferece Unpublish ao lado de Re-publish. O Studio pergunta se deseja despublicar, avisando que incorporações param de funcionar, mas links de compartilhamento continuam. Escolha Unpublish para confirmar ou Cancel para manter o mapa ativo.

  • Todas as incorporações param: o iframe mostra a mensagem de indisponibilidade e envia not_found.
  • O mapa mantém seu ID. Escolher Go Live de novo restaura os mesmos URLs e códigos, sem alterações nas páginas.
  • Links de compartilhamento existentes continuam funcionando com os dados que possuíam. O Kaleidr AI deles para até você publicar o mapa novamente.

A interrupção não é imediata em todos os lugares:

  • O navegador mantém dados que já carregou. Um visitante com o mapa aberto ainda vê a camada, e o navegador pode reutilizar dados obtidos nos minutos anteriores.
  • Links de download já emitidos podem funcionar por até uma hora. Para arquivos grandes, o navegador recebe um URL temporário. Um link emitido antes da exclusão ou despublicação continua válido até expirar, no máximo uma hora depois.

Como ocorre o carregamento:

  • Cada visitante baixa o conjunto inteiro. Os dados não são carregados por partes durante o deslocamento do mapa. Muitas linhas ou colunas aumentam o tempo de exibição, especialmente em conexões lentas. Publique apenas o necessário.
  • A falha de um conjunto não derruba o mapa. O restante aparece sem aquela camada.

Os limites de envio estão em Limites de conjuntos de dados.

Como as visualizações são contabilizadas​

Cada carregamento da incorporação por um visitante contabiliza uma carga de mapa para a organização proprietária, não para o site que incorporou. Se o mesmo visitante abrir o mesmo mapa novamente em 24 horas, a carga não é cobrada outra vez. Visualizações em páginas da própria Kaleidr, como a prévia no Studio, não são contabilizadas.

Quando as cargas do período se esgotam, as incorporações mostram um aviso e enviam map_loads_exhausted até a renovação da cota. Consulte Cotas e limites de taxa.

Verifique se funcionou​

  • Na página: marcadores, rotas, conjuntos de dados e imagens do painel Data aparecem nas camadas configuradas; os botões de zoom funcionam e os créditos aparecem na parte inferior.
  • No console: nenhuma linha contém [kaleidr.
  • Na aba Network: há uma requisição para https://map-embed.kaleidr.com/embed/YOUR_MAP_ID com status 200. Com o SDK, também aparecem kaleidr.js e viewer.js de https://cdn.kaleidr.com.
  • No listener: chega uma mensagem kaleidr-embed:ready.

Se não funcionar​

SintomaCausaCorreção
O mapa tem sempre 500 pixels de alturaAltura ausente na montagem, CSS com display:inline ou Safari anterior a 16.4 sem display:block.Defina display:block e uma altura, e monte quando visível. height
Nada aparece; [kaleidr] <kaleidr-map> requires product="chat|viewer|editor|tile"Atributo product ausente ou incorreto.Use product="viewer".
ID inválido no consoleshare-id ausente ou inválido.Copie o ID do Studio. [kaleidr:viewer] Kaleidr map: invalid id "" — must match ^[A-Za-z0-9._~-]{1,100}$.
[kaleidr:viewer] mount target not found: #mapO script foi executado antes do elemento, ou seletor incorreto.Posicione o script depois do elemento ou ajuste o seletor. Kaleidr.mount
Kaleidr is not definedO código rodou antes do carregamento assíncrono de kaleidr.js.Remova async ou aguarde o evento load. async
O iframe informa indisponibilidadeO mapa não foi publicado, foi despublicado ou o ID está errado.Publique com Go Live e copie o ID correto.
O domínio não é permitidoDomínio fora da lista ou referenciador ausente.Autorize o domínio ou ajuste a política de referenciador.
Limite de cargas de mapaA organização esgotou a cota.Aguarde a renovação ou aumente a cota; veja Cotas e limites de taxa.
“Could not load the map”Falha ao buscar o mapa.Recarregue, verifique a rede e tente abrir o URL do iframe diretamente.
Erro CSP frame-srcA política bloqueia o iframe.Autorize https://map-embed.kaleidr.com. frame-src
Erro CSP script-srcA política bloqueia o carregador.Autorize https://cdn.kaleidr.com ou use o iframe comum. script-src
setCamera não funcionaChamado no elemento ou o mapa não carregou.Use o handle de Kaleidr.mount; veja kaleidr-embed:error e o console. Se o mapa não informar que está pronto dentro da espera limitada, normalmente 10 segundos após o carregamento do iframe, a chamada ainda será enviada. O console mostrará [kaleidr] the map frame has not reported ready: um frame com erro não tem mapa para mover ou alterar.
el.setCamera is not a functionsetCamera foi chamado no elemento.Use o handle ou altere atributos da câmera. Kaleidr.mount
A rolagem da página para no mapaEsperado. Com o ponteiro sobre o mapa, a rolagem aproxima o mapa.Role com o ponteiro ao lado do mapa. Dê ao mapa uma altura menor que a da tela, para que os visitantes possam rolar além dele.
Edições não aparecemA incorporação foi carregada antes de salvar a alteração.Recarregue. Não precisa republicar.
Edição não intencional ficou públicaO mapa publicado sempre mostra o estado salvo.Desfaça; para trabalho privado, despublique ou faça uma cópia. Referência
Camada de dados não apareceConjunto excluído ou falha no carregamento.Confira o conjunto no painel Data e recarregue.
Conjunto grande demora para aparecerCada visitante baixa tudo.Reduza linhas e colunas; veja Dados enviados em um mapa publicado.

Limitações​

  • A incorporação é somente leitura. A página não pode adicionar marcadores ou camadas, ler dados ou receber eventos de clique.
  • Os únicos sinais são kaleidr-embed:ready e kaleidr-embed:error.
  • Não é possível reformular o mapa ou trocar o mapa-base pelo embed; altere no Studio e a versão salva aparecerá na próxima carga.
  • Alterar share-id depois da montagem não tem efeito. Remova e insira um novo elemento ou use handle.destroy() antes de montar novamente.
  • Domínios permitidos dependem do referenciador e não representam um segredo.

Próximas etapas​