Voltar para o Blog
Quest Log

Recompensa Diária (Login Diário): Como Usar para Reter Jogadores

Tela de calendário de recompensas de um jogo mobile com sete casas e um baú aberto na casa do dia atual

Recompensa diária bem feita aumenta retenção sem virar obrigação chata. Veja como desenhar streak, evitar dark pattern e medir o resultado.

Recompensa Diária (Login Diário): Como Usar para Reter Jogadores

A recompensa diária é um dos sistemas mais copiados dos jogos mobile e liveops, e por um motivo direto: ela ataca o problema número um de quase todo jogo, que é fazer o jogador voltar no dia seguinte. A ideia é simples. Toda vez que a pessoa abre o jogo dentro de uma janela de 24 horas, ela ganha alguma coisa. Moeda, item, energia, um baú. O bônus cresce conforme os dias se acumulam e forma o famoso streak, a sequência de logins seguidos.

O perigo é achar que esse sistema é mágico. Ele não conserta um jogo ruim. Se o seu loop principal não segura o jogador sozinho, nenhum baú vai resolver. A recompensa diária é um empurrão de hábito por cima de algo que já funciona, não uma muleta que substitui diversão. Neste post eu vou mostrar por que ela ajuda na retenção, como desenhar uma versão que respeita o jogador, como não cair no dark pattern e como medir se está valendo a pena, com um exemplo de código em GDScript tipado no final.

Por que a recompensa diária aumenta a retenção

A lógica por trás disso é comportamento, não sorte. Formar um hábito depende de repetição e de um gancho que puxa a pessoa de volta antes que ela esqueça do jogo. A recompensa de login dá um motivo concreto para abrir o app hoje, mesmo num dia em que a vontade estava baixa. E uma vez dentro, a chance de a pessoa jogar de verdade sobe muito.

Existe também o efeito do progresso acumulado. Quando alguém está no dia 12 de um streak, existe um custo psicológico em deixar quebrar. Esse é o mesmo princípio de aversão à perda que faz a pessoa não querer perder uma sequência no Duolingo. É poderoso, mas é exatamente aqui que mora o risco de você exagerar e transformar o convite numa cobrança, o que eu vou detalhar mais para frente.

Vale entender onde esse sistema entra na jornada. Ele mexe principalmente na retenção de curto e médio prazo. Se você acompanha as métricas de retenção D1, D7 e D30, a recompensa diária costuma dar seu maior efeito no D1 e no D7, que são os pontos onde a maioria dos jogadores some. Não espere milagre no D30 só com login: quem fica um mês fica pelo jogo, não pelo baú.

Como desenhar uma boa recompensa diária

Um bom sistema de login diário tem alguns princípios que separam o convite gentil da armadilha. Vou por partes.

Recompensa crescente, mas com teto. O bônus deve aumentar conforme o streak cresce, para premiar constância. Só que precisa ter um limite ou um ciclo. Uma escada infinita que dobra todo dia quebra a economia do jogo e cria pressão insuportável de não faltar nunca. Um ciclo de sete dias que reinicia, com um prêmio maior no dia sete, é um formato clássico porque é legível e tem fim à vista.

Não punir quem falta. Este é o ponto que mais gente erra. Zerar o streak inteiro na primeira falha pune justamente o jogador que você mais quer de volta: aquele que quase desistiu. Existem alternativas mais humanas. Você pode congelar o streak por um dia de tolerância, reduzir a sequência aos poucos em vez de zerar, ou separar duas coisas, o streak visível e a recompensa daquele dia, para que faltar não apague o histórico todo.

Recompensa útil, não lixo. O item precisa ter valor de verdade dentro do jogo. Dar dez moedas quando uma compra custa dez mil é insultar o jogador. A recompensa não precisa ser generosa a ponto de destruir a economia, mas tem que ser sentida.

Convite, não sequestro. O melhor sistema é aquele em que o jogador resgata e continua jogando naturalmente. O pior é aquele que existe só para inflar um número de retorno diário enquanto a pessoa entra, clica e fecha o app em dez segundos. Se o seu login diário produz muito desse comportamento, ele está mascarando um problema em vez de resolver.

Próximo nível
Quer aprender isso na prática?

No CursoGame.Dev você sai dos tutoriais soltos e constrói jogos publicáveis, com trilha progressiva, quests práticas e feedback real.

Conhecer a plataforma
+500 alunos4.9/5Garantia 7 dias

O risco de virar dark pattern (e como evitar)

Dark pattern é quando o desenho manipula o jogador para agir contra o próprio interesse. A recompensa diária é um terreno fértil para isso, porque ela mexe com culpa, medo de perder e obrigação. Alguns sinais de que o seu sistema cruzou a linha:

  • A contagem regressiva vira ameaça. Um relógio grande e vermelho gritando "faltam 2 horas para você perder tudo" gera ansiedade, não diversão. O jogador começa a sentir o jogo como uma tarefa.
  • O streak longo prende por medo, não por vontade. Se a pessoa continua abrindo o jogo só para não perder um número de dias, e não porque gosta de jogar, você criou uma corrente, não um hábito saudável.
  • A recompensa fica escondida atrás de fricção. Anúncio obrigatório para resgatar, vários pop-ups, botões enganosos. Tudo isso transforma um presente em pedágio.

A forma de evitar é manter uma regra mental simples: o sistema deve fazer o jogador querer voltar, nunca sentir que precisa voltar. Perdoe faltas com naturalidade. Use linguagem que celebra a presença em vez de punir a ausência. E lembre que um jogador que se sente manipulado hoje é um jogador que desinstala e fala mal amanhã. Reter por hábito é bom, reter por culpa é dívida que uma hora vence.

Esse cuidado vale ainda mais em o modelo free to play, onde a recompensa diária costuma se conectar com moeda premium e loja. É fácil deixar o sistema de login virar só um funil de pressão para gastar. Se você faz isso, a retenção sobe no gráfico por um tempo e a reputação afunda logo depois.

Como medir se está funcionando

Não adianta desenhar o sistema no achismo. Você precisa de números para saber se ele retém ou se só maquia. O jeito limpo é comparar o comportamento com e sem a recompensa diária, de preferência num teste A/B com um grupo que não recebe o sistema. Sem grupo de controle, você nunca sabe se a melhora veio do login diário ou de outra mudança qualquer.

Os sinais que valem a pena acompanhar:

  • Retenção D1, D7 e D30. É a métrica direta do objetivo. Espere o maior ganho no D1 e no D7.
  • Taxa de retorno diário. Quantos jogadores voltam em dias seguidos. Sobe naturalmente com o sistema, então cuidado para não se enganar com o número cru.
  • Tempo de sessão de quem resgata. Aqui mora a verdade. Se quem entra para resgatar fica jogando, ótimo. Se entra, clica e sai, o bônus não está gerando engajamento real, só um pico vazio no gráfico de retorno.
  • Taxa de resgate. Quantos dos que abrem realmente pegam a recompensa. Se for baixa, o sistema está mal comunicado ou pouco atraente.

Para capturar tudo isso você precisa instrumentar o jogo. Vale ler o que medir com telemetria e analytics antes de sair colocando eventos por todo lado. Registre pelo menos o dia do streak no momento do resgate, se houve reset, e o que o jogador fez depois de resgatar. Com isso você consegue separar o hábito saudável do clique automático.

Estrutura de dados para salvar o streak em Godot 4

Na prática o coração do sistema é pequeno: você guarda o número do streak e a data do último resgate, e a cada abertura compara com a data de hoje. Se hoje é o dia seguinte ao último resgate, soma um no streak. Se pulou dias, você aplica sua regra, que aqui vou deixar como reset simples, mas é onde você encaixaria o congelamento gentil que citei acima. Se é o mesmo dia, não faz nada, porque a pessoa já resgatou hoje.

O exemplo abaixo usa GDScript tipado no Godot 4 e trabalha só com a data, ignorando a hora, para a janela ser o dia do calendário. Ele guarda a data como texto no formato ano, mês e dia, que é fácil de salvar e de comparar.

extends Node

# Estado do login diário
var streak: int = 0
var ultimo_login: String = ""

# Retorna a data de hoje como "AAAA-MM-DD", ignorando a hora
func data_de_hoje() -> String:
    var agora: Dictionary = Time.get_datetime_dict_from_system()
    return "%04d-%02d-%02d" % [agora.year, agora.month, agora.day]

# Converte "AAAA-MM-DD" para dias desde a época Unix, para comparar datas
func data_em_dias(data: String) -> int:
    var unix: int = Time.get_unix_time_from_datetime_string(data + "T00:00:00")
    return int(unix / 86400)

# Chamado quando o jogador abre o jogo. Retorna true se ganhou recompensa hoje.
func checar_login() -> bool:
    var hoje: String = data_de_hoje()

    # Primeiro login de todos
    if ultimo_login == "":
        streak = 1
        ultimo_login = hoje
        return true

    # Já resgatou hoje, nada a fazer
    if ultimo_login == hoje:
        return false

    var diferenca: int = data_em_dias(hoje) - data_em_dias(ultimo_login)

    if diferenca == 1:
        # Dia seguinte: continua a sequência
        streak += 1
    else:
        # Pulou um ou mais dias: aqui entraria o congelamento gentil.
        # Nesta versao simples, reinicia a sequencia.
        streak = 1

    ultimo_login = hoje
    return true

# Recompensa em ciclo de 7 dias, com premio maior no dia 7
func recompensa_do_dia() -> int:
    var dia_no_ciclo: int = ((streak - 1) % 7) + 1
    if dia_no_ciclo == 7:
        return 500
    return dia_no_ciclo * 50

Repare em três decisões de desenho embutidas no código. A comparação é por dia de calendário, não por 24 horas exatas, o que evita punir quem abre às 8h num dia e às 20h no outro. O resgate acontece uma vez por dia, então abrir o jogo várias vezes não acumula. E a recompensa roda num ciclo de sete dias com teto, em vez de crescer para sempre, o que mantém a economia sob controle. O ponto do reset, marcado no comentário, é exatamente onde você trocaria o streak = 1 por uma lógica mais gentil quando quiser perdoar faltas.

Na hora de salvar isso em disco, guarde streak e ultimo_login num recurso ou num arquivo de save junto com o resto do progresso. E não confie cegamente no relógio do aparelho: jogadores mais espertos mudam a hora do celular para adiantar recompensas. Se o seu jogo é online, valide a data no servidor. Se é offline, aceite que essa brecha existe e desenhe o sistema para que abusar dela não quebre nada crítico.

Próximo passo

Comece pequeno e honesto. Antes de montar um calendário de trinta dias com prêmios épicos, garanta que o seu loop principal já segura o jogador por conta própria, porque a recompensa diária amplifica o que existe, não cria diversão do nada. Implemente a versão de sete dias do código acima, instrumente os eventos de resgate e de sessão, e rode com um grupo de controle para saber se a retenção subiu de verdade.

Depois observe o comportamento real. Se as pessoas resgatam e continuam jogando, você tem um hábito saudável e pode refinar. Se elas entram, clicam e somem, o problema não é o login diário, é o jogo, e é lá que a sua próxima semana de trabalho deve ir. Aqui no CursoGame.Dev a gente prefere sempre esse caminho: medir primeiro, ajustar depois, e nunca trocar a confiança do jogador por um pico bonito no gráfico.

Perguntas frequentes

O que é uma recompensa diária de login?

É um sistema que dá um item, moeda ou bônus ao jogador cada vez que ele abre o jogo dentro de uma janela de 24 horas. O objetivo é criar o hábito de voltar todo dia e melhorar a retenção de longo prazo.

Recompensa de login funciona mesmo para reter jogador?

Funciona quando dá um motivo real para voltar e não pune quem falta um dia. Ela ajuda a formar hábito, mas não conserta um jogo que não é divertido. O loop principal precisa segurar o jogador sozinho antes de você adicionar o bônus de login.

Como evitar que a recompensa diária vire um dark pattern?

Não zere o progresso a cada falta, não crie ansiedade com contagem regressiva agressiva e não esconda o jogo atrás do resgate. Deixe a recompensa ser um convite, não uma cobrança. Se o jogador se sente culpado por não abrir, o desenho está errado.

Devo zerar o streak quando o jogador falta um dia?

Prefira um sistema mais gentil, como congelar o streak por um dia ou reduzir aos poucos em vez de zerar. Zerar tudo pune justamente quem você quer trazer de volta e costuma aumentar o abandono, não a retenção.

Como sei se a recompensa diária está dando certo?

Compare a retenção D1, D7 e D30 e a taxa de retorno diário antes e depois de lançar o sistema, de preferência num teste A/B. Olhe também o tempo de sessão: se o jogador só entra, resgata e sai, o bônus não está gerando engajamento real.

Onde guardar o streak de dias no Godot 4?

Num recurso ou dicionário salvo em disco com o número do streak e a data do último resgate. A cada abertura você compara a data de hoje com a última: se for o dia seguinte, soma um; se pulou dias, aplica sua regra de reset ou congelamento.