Leodario.com

Leodario.com – Tudo sobre Tecnologia

Aula 78 – Loja Shopify do Zero ao Avançado: Checkout Extensions e personalização do checkout

Imagem destacada da aula Shopify

Olá, futuros mestres do Shopify! Sejam muito bem-vindos à nossa Aula 78 do curso “Loja Shopify do Zero ao Avançado”! 🚀

Hoje vamos mergulhar em um dos tópicos mais avançados e cruciais para quem quer ter controle total sobre a experiência do cliente: a personalização do checkout utilizando as poderosas Checkout Extensions. Se você achava que o checkout era uma “caixa preta” intocável, prepare-se para desmistificar isso e abrir um leque de possibilidades!

Aula 78 – Loja Shopify do Zero ao Avançado: Checkout Extensions e personalização do checkout

📚 O que você vai aprender nesta aula

Nesta aula, você irá:

  • Compreender a evolução da personalização do checkout na Shopify e a importância das Checkout Extensions.
  • Entender os diferentes tipos de Checkout Extensions (UI, Functions, Pixels) e onde cada um se encaixa.
  • Configurar seu ambiente de desenvolvimento para criar Checkout Extensions usando o Shopify CLI.
  • Desenvolver sua primeira Checkout UI Extension, adicionando elementos personalizados ao checkout.
  • Aprender a acessar dados do checkout e renderizar componentes da interface do usuário.
  • Publicar e gerenciar suas Checkout Extensions.
  • Conhecer as boas práticas e limitações ao trabalhar com personalizações de checkout.

🔗 Conectando com aulas anteriores

Nas nossas aulas anteriores, especialmente naquelas sobre Aula X – Customização de Temas, Seções e Blocos com o Editor de Temas, vimos como personalizar a maior parte da sua loja. Também exploramos Aula Y – Desenvolvimento de Apps com Shopify CLI e App Bridge, onde começamos a entender o poder das extensões e do ecossistema de apps.

Hoje, vamos aplicar e expandir esse conhecimento diretamente para o fluxo de checkout. Antigamente, a personalização do checkout era feita via checkout.liquid, um arquivo que permitia controle total sobre o código HTML, CSS e JavaScript. No entanto, por questões de segurança, performance e, principalmente, para garantir que o checkout da Shopify seja sempre atualizado com os recursos mais recentes (como o One-Page Checkout), a Shopify migrou para um modelo mais robusto e seguro: as Checkout Extensions.

Isso significa que o checkout.liquid foi descontinuado para a maioria dos planos (exceção: Shopify Plus com alguns recursos específicos, mas a direção é Extensions). Portanto, entender as Extensions é fundamental para qualquer personalização significativa hoje.

📖 Conteúdo Principal

1. A Evolução da Personalização do Checkout na Shopify

Por que a Shopify mudou a forma como personalizamos o checkout? 🤔

  • Segurança: O checkout é o ponto mais crítico da jornada do cliente. Qualquer vulnerabilidade aqui pode ter consequências sérias. Limitar o acesso direto ao código HTML/CSS/JS reduz drasticamente as superfícies de ataque.
  • Performance: A Shopify pode otimizar o desempenho do checkout de forma mais eficaz quando tem controle sobre o código base. Isso garante carregamentos rápidos e uma experiência fluida para o cliente.
  • Atualizações Contínuas: Com as Extensions, a Shopify pode lançar novas funcionalidades e melhorias para o checkout sem quebrar as personalizações dos comerciantes. As Extensions são isoladas e compatíveis com futuras versões do checkout.
  • Experiência Unificada: Garante uma experiência de compra consistente e moderna em todas as lojas Shopify.

As Checkout Extensions são a resposta da Shopify para permitir personalização avançada sem comprometer os pilares acima. Elas funcionam como pequenos “mini-aplicativos” que você pode injetar em pontos específicos do fluxo de checkout.

2. Tipos de Checkout Extensions

Existem três tipos principais de Checkout Extensions, cada um com um propósito diferente:

a) Checkout UI Extensions (Nosso foco principal)
  • O que são: Permitem adicionar ou modificar elementos visuais na interface do usuário do checkout (UI). Pense em blocos de texto, caixas de seleção, campos de entrada, botões, ícones, etc.
  • Tecnologia: São construídas usando React e o framework ui-extensions-react da Shopify, que fornece um conjunto de componentes pré-construídos e seguros.
  • Casos de uso: Adicionar uma mensagem de frete grátis, um campo para instruções especiais, um checkbox de “concordo com os termos”, um upsell/cross-sell simples, etc.
  • Onde aparecem: Em diferentes “targets” (pontos de injeção) dentro do fluxo do checkout, como acima do resumo do pedido, abaixo dos métodos de envio, no cabeçalho, no rodapé, etc.
b) Checkout Functions
  • O que são: Permitem modificar a lógica do checkout. Elas executam um código “nos bastidores” para influenciar o comportamento do checkout.
  • Tecnologia: Escritas em WebAssembly (geralmente usando Rust, Go ou outras linguagens compiladas para Wasm).
  • Casos de uso: Adicionar validações de carrinho personalizadas, ajustar taxas de frete com base em condições complexas, modificar a visibilidade de formas de pagamento, criar descontos baseados em regras específicas, etc.

Importante: Funções não alteram a UI diretamente; elas afetam a lógica* que a UI reflete.

c) Checkout Pixel Extensions
  • O que são: Permitem que você injete código de rastreamento de pixels (como Google Analytics, Facebook Pixel, etc.) de forma segura no checkout.
  • Tecnologia: Não rodam diretamente no navegador do cliente, mas em um ambiente seguro e controlado pela Shopify.
  • Casos de uso: Enviar eventos de compra, page views, e outras métricas para ferramentas de análise e marketing, garantindo a privacidade dos dados do cliente e a performance da loja.
  • Vantagem: Evitam os problemas de bloqueadores de anúncios e garantem a integridade dos dados enviados.

Nesta aula, nosso foco será total nas Checkout UI Extensions, pois elas são a principal ferramenta para a personalização visual do checkout.

3. Configurando seu Ambiente de Desenvolvimento

Para construir Checkout Extensions, você precisará de:

1. Node.js: Versão 14.x ou superior.

2. Shopify CLI: Nossa ferramenta de linha de comando favorita para interagir com a plataforma Shopify.

3. Uma loja de desenvolvimento Shopify: Você precisa de uma loja para testar e instalar suas extensões.

Se você seguiu as aulas anteriores sobre desenvolvimento de apps, você já deve ter tudo isso configurado. Caso contrário, consulte as Aula Y – Desenvolvimento de Apps com Shopify CLI e App Bridge para configurar seu ambiente.

Verificando a versão do Shopify CLI:

Abra seu terminal e digite:

bash

shopify version

Certifique-se de que está usando uma versão recente (geralmente v3 ou superior).

4. Criando sua Primeira Checkout UI Extension

Vamos criar uma extensão simples que adiciona uma mensagem personalizada no checkout, como um lembrete de frete grátis ou uma política de devolução.

Passo 1: Iniciar um novo projeto de extensão

Vamos criar um novo projeto de app que conterá nossa extensão. Se você já tem um projeto de app, pode adicionar a extensão a ele. Para fins didáticos, vamos começar do zero.

1. No seu terminal, navegue até a pasta onde deseja criar seu projeto.

2. Execute o comando para criar um novo app Shopify:

bash

shopify app init checkout-message-app

  • Selecione Start by adding your first extension quando perguntado.
  • Escolha Checkout UI Extension na lista de tipos de extensão.
  • Dê um nome à sua extensão (ex: FreeShippingReminder).
  • Selecione JavaScript React como o template.

O Shopify CLI vai criar uma nova pasta checkout-message-app, instalar as dependências e configurar sua primeira extensão.

Passo 2: Entendendo a estrutura do projeto

Após a criação, a estrutura do seu app será algo assim:

checkout-message-app/

├── web/

│ ├── ... (código do frontend do app, se tiver)

├── extensions/

│ └── free-shipping-reminder/

│ ├── src/

│ │ └── index.jsx <-- Nosso código da extensão React aqui!

│ ├── shopify.extension.toml <-- Configurações da extensão

│ └── package.json

├── shopify.app.toml

└── package.json

Vamos olhar o arquivo shopify.extension.toml dentro da pasta free-shipping-reminder:

toml

shopify.extension.toml

name = "FreeShippingReminder"

type = "ui_extension"

handle = "free-shipping-reminder"

[build]

command = "npm run build"

path = "dist"

[development]

renderer = "react"

resource_url = "https://example.com/some-javascript-bundle.js" # Este é apenas um placeholder

[capabilities]

api_access = false # Podemos mudar isso se precisarmos de acesso à Storefront API

[targeting.extension_point.purchase.checkout.block.render] # Onde a extensão será injetada

block_properties = { title = "Lembrete de Frete Grátis" }

  • name: Nome da sua extensão.
  • type: O tipo da extensão, neste caso ui_extension.
  • targeting: CRUCIAL! Define onde sua extensão será renderizada.
  • purchase.checkout.block.render: Este é um “target” muito comum, que renderiza sua extensão como um bloco dentro do checkout.
  • block_properties: Propriedades adicionais para o bloco, como o título que aparecerá no admin para o lojista.
  • Existem outros targets, como purchase.checkout.shipping-method-list.render-after, purchase.checkout.cart-line-item.render-after e muitos outros. Você pode consultar a documentação oficial para a lista completa.

Agora, vamos abrir o arquivo principal da nossa extensão: extensions/free-shipping-reminder/src/index.jsx.

jsx

// extensions/free-shipping-reminder/src/index.jsx

import React from 'react';

import {

render,

BlockStack,

TextBlock,

InlineStack,

Button,

View,

reactExtension,

} from '@shopify/ui-extensions-react/checkout';

// Renderiza a extensão.

// Os targets definidos em shopify.extension.toml determinam onde esta UI será injetada.

render('Checkout::Dynamic::Render', () => );

function App() {

return (

🎉 Frete Grátis em compras acima de R$200! 🎉

);

}

  • render('Checkout::Dynamic::Render', () => ): Este é o ponto de entrada da sua extensão. Checkout::Dynamic::Render é o tipo de target que permite que sua extensão seja adicionada a qualquer ponto de injeção de bloco configurado no shopify.extension.toml.

Componentes Shopify UI: Você notará que estamos usando componentes como BlockStack, TextBlock, InlineStack, Button de @shopify/ui-extensions-react/checkout. Estes são os componentes oficiais da Shopify que garantem que sua extensão tenha a mesma aparência e sensação do checkout e que seja responsiva e acessível. Você não pode* usar HTML puro (

,

, etc.) ou componentes de bibliotecas de UI genéricas diretamente aqui.

Passo 3: Testando sua extensão localmente

1. Certifique-se de estar na pasta raiz do seu app (checkout-message-app).

2. Execute o comando para iniciar o servidor de desenvolvimento:

bash

shopify app dev

3. O CLI pedirá para você selecionar uma loja de desenvolvimento. Escolha a sua.

4. Ele então fornecerá um link para o seu dev preview do checkout. Ele se parecerá com https://admin.shopify.com/store/[your-store-name]/apps/development/[your-app-id]/extensions/[your-extension-id]/preview.

5. Clique neste link. Isso abrirá seu admin da Shopify e você será levado ao Editor de Checkout.

No Editor de Checkout:

  • Você verá um novo bloco chamado “Lembrete de Frete Grátis” (ou o nome que você deu ao seu block_properties.title no shopify.extension.toml).
  • Arraste e solte este bloco para a área desejada no checkout (ex: acima do resumo do pedido ou abaixo do formulário de contato).
  • Clique em “Salvar”.
  • Agora, vá para o frontend da sua loja, adicione um produto ao carrinho e prossiga para o checkout. Você deverá ver sua mensagem personalizada!

SCREENSHOT: Editor de Checkout mostrando o novo bloco arrastável.

(Imagine aqui uma imagem do editor de checkout da Shopify, com um novo bloco de extensão visível na barra lateral e sendo arrastado para a área principal do checkout.)

SCREENSHOT: Checkout real com a extensão renderizada.

(Imagine aqui uma imagem do frontend do checkout, com a mensagem “🎉 Frete Grátis em compras acima de R$200! 🎉” e os botões personalizados visíveis.)

Passo 4: Acessando dados do checkout

Uma extensão geralmente precisa interagir com os dados do checkout. O hook useExtensionApi nos dá acesso a objetos importantes.

Vamos modificar nossa extensão para exibir o subtotal do carrinho.

jsx

// extensions/free-shipping-reminder/src/index.jsx (Modificado)

import React from 'react';

import {

render,

BlockStack,

TextBlock,

InlineStack,

Button,

useExtensionApi, // Importamos o hook

reactExtension,

} from '@shopify/ui-extensions-react/checkout';

render('Checkout::Dynamic::Render', () => );

function App() {

// Acessa a API da extensão para obter dados do checkout

const { cost } = useExtensionApi();

const subtotalAmount = cost.totalAmount.current; // Pega o valor atual do subtotal

return (

🎉 Frete Grátis em compras acima de R$200! 🎉

Seu subtotal atual é: {subtotalAmount.currencyCode} {subtotalAmount.amount}

{/ Exemplo de renderização condicional /}

{parseFloat(subtotalAmount.amount) < 200 && (

Faltam {subtotalAmount.currencyCode} {200 - parseFloat(subtotalAmount.amount)} para frete grátis!

)}

);

}

  • useExtensionApi(): Este hook fornece acesso a vários objetos da API de checkout, incluindo cost (para informações de custo), cart (para itens do carrinho), customer (para dados do cliente), etc.
  • cost.totalAmount.current: Acessamos o subtotal atual do carrinho. Ele retorna um objeto com amount (o valor numérico) e currencyCode (a moeda).
  • Renderização Condicional: Adicionei um exemplo de como você pode exibir uma mensagem diferente com base no valor do subtotal. Se o valor for menor que R$200, ele mostra quanto falta para o frete grátis. Isso é super poderoso para personalização!

Sempre que fizer alterações no código, o Shopify CLI detectará as mudanças e fará um hot reload no seu preview do checkout. Atualize a página do checkout no seu navegador para ver as mudanças.

5. Publicando sua Checkout UI Extension

Uma vez que sua extensão esteja funcionando perfeitamente no ambiente de desenvolvimento, é hora de publicá-la para que ela possa ser usada em sua loja de produção.

Passo 1: Construir e implantar a extensão

1. Pare o servidor de desenvolvimento (Ctrl+C).

2. Na pasta raiz do seu app (checkout-message-app), execute o comando de deploy:

bash

shopify app deploy

  • O CLI perguntará se você deseja criar uma nova versão do app ou usar uma existente. Escolha a opção para criar uma nova versão.
  • Ele fará o build do seu código e o enviará para a Shopify.
  • Ao final, ele fornecerá um link para o “Developer Console” da sua extensão.
Passo 2: Habilitar e configurar a extensão no Admin

1. Acesse o link do Developer Console ou navegue até Apps no seu admin da Shopify e depois clique no seu app de desenvolvimento.

2. Dentro do seu app, vá para a seção “Extensions”. Você verá sua FreeShippingReminder listada.

3. Clique nela. Você terá opções para gerenciar a versão e publicá-la.

Importante: A extensão precisa ser instalada na sua loja para ser visível no Editor de Checkout.

  • Acesse Configurações > Checkout e conta no seu admin da Shopify.
  • Na seção “Personalização do checkout”, clique em Personalizar checkout.
  • Isso abrirá o Editor de Checkout.
  • Você deverá ver o bloco da sua extensão na barra lateral de blocos. Arraste e solte-o onde desejar e salve as alterações.

Sua extensão agora estará ativa no seu checkout da loja!

DICA: Sempre teste sua extensão em um ambiente de desenvolvimento ou staging antes de publicá-la para sua loja principal.

6. Boas Práticas e Limitações

  • Use os componentes da Shopify UI: Sempre use os componentes fornecidos por @shopify/ui-extensions-react/checkout. Eles são otimizados, acessíveis e garantem compatibilidade futura. Não tente injetar HTML ou CSS customizado diretamente, pois não funcionará e não é suportado.
  • Foco na performance: Mantenha seu código limpo e otimizado. O checkout precisa ser o mais rápido possível.
  • Teste em diferentes dispositivos: Garanta que sua extensão se adapte bem a diferentes tamanhos de tela (desktop, tablet, mobile). Os componentes da Shopify UI já são responsivos, mas sempre verifique.
  • Atenção aos targets: Escolha o target de injeção mais apropriado para sua extensão. Um lugar errado pode confundir o cliente.
  • Segurança e Privacidade: Evite coletar informações sensíveis desnecessariamente. Esteja ciente das políticas de privacidade da Shopify.
  • Não abuse: Evite adicionar muitas extensões ou funcionalidades que possam sobrecarregar o cliente no checkout. Menos é mais!

💻 Exemplos Práticos

Vamos criar mais uma extensão simples para adicionar um campo de texto para “Instruções Especiais para o Pedido”.

1. Adicionar uma nova extensão:

Na pasta raiz do seu checkout-message-app (ou no seu app existente), execute:

bash

shopify app generate extension

  • Escolha Checkout UI Extension.
  • Nome: SpecialInstructions
  • Template: JavaScript React

2. Código da extensão (extensions/special-instructions/src/index.jsx):

jsx

import React from 'react';

import {

render,

TextField,

reactExtension,

useExtensionApi,

} from '@shopify/ui-extensions-react/checkout';

render('Checkout::Dynamic::Render', () => );

function App() {

const { applyAttributeChange } = useExtensionApi();

// Função para lidar com a mudança no campo de texto

const handleInstructionChange = (value) => {

// applyAttributeChange permite salvar metadados no pedido

applyAttributeChange({

key: 'special_instructions', // Chave para o metadado

type: 'updateAttribute',

value: value,

});

};

return (

label="Instruções Especiais para o Pedido (Opcional)"

multiline={3} // Campo de texto com 3 linhas

onChange={handleInstructionChange}

placeholder="Ex: 'Entregar na portaria', 'Embalar para presente'"

maxLength={250} // Limite de caracteres

/>

);

}

  • TextField: Componente de campo de texto da Shopify UI.
  • useExtensionApi() e applyAttributeChange(): Este é um recurso muito importante! Ele permite que você salve dados (como as instruções especiais) como atributos do carrinho ou atributos do pedido. Esses dados serão anexados ao pedido e estarão visíveis no admin da Shopify quando o pedido for feito. Isso é perfeito para informações personalizadas que o cliente precisa fornecer.

3. Configuração da extensão (extensions/special-instructions/shopify.extension.toml):

toml

... (outras configurações)

[targeting.extension_point.purchase.checkout.block.render]

block_properties = { title = "Instruções Especiais" }

4. Teste e Deploy:

  • shopify app dev para testar localmente. Arraste e solte o novo bloco “Instruções Especiais” no Editor de Checkout.
  • Preencha o campo, complete um pedido de teste e verifique no admin da Shopify se as instruções foram salvas nos detalhes do pedido.
  • shopify app deploy para publicar.

SCREENSHOT: Detalhes do pedido no admin da Shopify, mostrando o atributo personalizado.

(Imagine aqui uma imagem da tela de detalhes de um pedido no admin da Shopify, destacando uma seção onde “special_instructions: Entregar na portaria” é visível.)

🎯 Exercícios e Desafios

1. Desafio Básico: Modifique a extensão FreeShippingReminder para que, se o subtotal for acima de R$500, a mensagem mude para “Você é um cliente VIP! Frete GRÁTIS e um presente especial.”

2. Desafio Intermediário: Crie uma nova Checkout UI Extension que adicione um checkbox “Aceito receber ofertas e novidades por e-mail”. Use applyAttributeChange para salvar o estado deste checkbox como um atributo do pedido.

3. Desafio Avançado (Pensando fora da caixa): Pesquise sobre outros “targets” de injeção disponíveis para Checkout UI Extensions (por exemplo, purchase.checkout.shipping-method-list.render-after). Crie uma extensão que, após a seleção do método de envio, exiba uma estimativa de entrega mais detalhada (você pode usar dados fictícios para a estimativa, mas foque na injeção correta da UI).

📝 Resumo da Aula

Nesta aula super importante, você desvendou o mundo da personalização do checkout através das Checkout Extensions. Entendemos por que a Shopify evoluiu para este modelo (segurança, performance, atualizações), exploramos os tipos de extensões (UI, Functions, Pixels), e colocamos as mãos na massa para criar e implantar nossa primeira Checkout UI Extension. Aprendemos a usar o Shopify CLI, o framework ui-extensions-react, a acessar dados do checkout e a salvar informações personalizadas nos pedidos. O poder de controlar a experiência do cliente no ponto mais crítico da jornada de compra está agora ao seu alcance!

🚀 Preparação para próxima aula

Na nossa próxima aula, vamos aprofundar ainda mais no desenvolvimento de apps e extensões, explorando as Shopify Functions com mais detalhes. Veremos como elas podem ser usadas para criar lógicas complexas para descontos, taxas de frete ou validações de carrinho que não seriam possíveis com as UI Extensions ou com as ferramentas padrão da Shopify. Prepare-se para um mergulho no mundo do WebAssembly e da lógica de negócios!

📚 Recursos Adicionais

Parabéns por chegar até aqui! A personalização do checkout é um diferencial enorme para qualquer loja. Vejo vocês na próxima aula! 👋

🚀 Pronto para a próxima aula?

Continue sua jornada Shopify!

Ver todas as aulas