Documentation menu

Portal de membros e cobrança de assinatura

Sua assinatura de aprendizado vive em /learn/<slug> — um portal em que seus assinantes entram, totalmente separado do painel do MailInApp e de qualquer conta do Firebase Auth. A cobrança roda como assinaturas reais do Stripe na sua própria conta Stripe conectada, a mesma conta Connect que o checkout de produto usa, estendida aqui para Assinaturas/Cobrança recorrentes.

Reivindique a URL do seu portal

Em Configurações → Portal de membros, reivindique um <slug> (3 a 40 caracteres, letras minúsculas/números/hífens) — o mesmo formato de reivindicação e renomeação do identificador do perfil de remetente, só que em um campo próprio. Essa é a URL para a qual você vai apontar links em campanhas e em qualquer outro lugar em que promover a assinatura; ela pode ser renomeada depois sem quebrar o acesso dos assinantes já existentes.

Definindo preços

Também em Configurações → Portal de membros, adicione um ou mais planos de assinatura — um nome, um valor recorrente e um intervalo mensal ou anual, com um período de teste gratuito opcional em dias. Cada plano corresponde 1:1 a um Price do Stripe na sua conta conectada. Os planos não podem ser excluídos depois de criados (os Prices do Stripe também não podem ser excluídos), apenas arquivados — um plano arquivado desaparece da página pública de assinatura, mas permanece válido para quem já está nele, então arquivar nunca corta o acesso de assinantes existentes.

O fluxo de assinatura

/learn/<slug>/subscribe?plan=<planId> é a página pública para a qual você aponta links em uma campanha. Escolha-a como destino do link de um bloco de botão, ou use o predefinido de estúdio Assinar, já pronto (título + texto + botão, o mesmo formato de "compor blocos existentes, sem novo tipo de bloco" do predefinido Placar do segmento de times esportivos).

Um visitante escolhe um plano e finaliza a compra por uma sessão real do Stripe Checkout em modo de assinatura. Ao concluir, uma linha de Subscriber é criada ou correspondida pelo e-mail, e um e-mail de boas-vindas é enviado com um link direto para o portal.

Entrando sem uma conta MailInApp

Um assinante nunca cria uma conta MailInApp. Entrar em /learn/<slug> é feito por link mágico: ele informa o e-mail, e um link de login de um toque é enviado por e-mail usando seu próprio SMTP/identidade visual (não o modelo padrão do Firebase). Essa etapa tem limite de taxa e, deliberadamente, nunca revela se aquele e-mail já é assinante. Clicar no link prova que ele é o dono do endereço e o autentica no portal para aquela assinatura específica.

Assistindo a uma aula

Toda solicitação de reprodução de aula passa por uma verificação de direito de acesso em tempo real, a cada requisição — não um link assinado de longa duração como os usados pelos endpoints de contagem regressiva ou de calendário. Cada vez que um assinante abre uma aula, o MailInApp verifica o status atual da assinatura antes de emitir um token de reprodução de curta duração. A perda de acesso (uma assinatura cancelada ou com pagamento atrasado) entra em vigor já na próxima requisição, não apenas no próximo carregamento de página. Uma aula marcada como pré-visualização gratuita ignora essa verificação por completo e é reproduzida para qualquer pessoa que chegue ao portal.

Gerenciando uma assinatura existente

/learn/<slug>/account oferece a um assinante autenticado um botão Gerenciar cobrança que direciona para o próprio Customer Portal hospedado do Stripe — atualizar um cartão, trocar de plano ou cancelar — em vez de o MailInApp reimplementar por conta própria o gerenciamento de assinaturas.

O que acontece nos eventos de cobrança

  • Checkout concluído → linha de assinante criada/correspondida, assinatura ativada, e-mail de boas-vindas enviado com um link para o portal.
  • Pagamento falha → o assinante recebe um e-mail de cobrança apontando para /learn/<slug>/account para atualizar o cartão, enquanto o Stripe tenta novamente cobrar automaticamente — o MailInApp não altera o acesso na primeira falha, só quando o próprio Stripe reporta que a assinatura deixou de estar ativa.
  • Assinatura cancelada (pelo assinante, ou depois que as tentativas de cobrança se esgotam) → o acesso a aulas e sessões ao vivo restritas termina, e um e-mail de cancelamento é enviado com um link de volta para /learn/<slug>/subscribe, caso o assinante queira voltar.

Veja também