Guias
Recompense os jogadores
Copiar página
Pague jogadores em $LIA a partir do seu pool de recompensas do app, do seu servidor. Um bônus diário, como exemplo, seguro para tentar novamente e dentro dos seus limites.
Seu app precisa de uma pool de recompensas, financiada pela equipe Lia (veja Potes de recompensas). Recompensas só vêm sempre do seu servidor, com sua chave.
#Um bônus diário
Cada jogador pode reivindicar 2 LIA por dia, após concluir um nível.
import { lia } from "./lia.js";
app.post("/api/daily-bonus", async (req, res) => {
const playerId = await playerFrom(req.body.session); // see Verify on your server
if (!playerId) return res.status(401).end();
if (!(await db.finishedALevelToday(playerId))) return res.status(403).json({ error: "play_first" });
const day = new Date().toISOString().slice(0, 10); // 2026-11-01
try {
const result = await lia("POST", "/rewards", {
playerId,
amount: 2,
key: `daily:${day}:${playerId}`, // one a day per player, however often this runs
reason: "Daily bonus",
});
res.json({ paid: result.status === "paid", amount: result.amount });
} catch (error) {
if (error.data?.error === "pool_empty") return res.status(503).json({ error: "bonus_paused" });
if (error.data?.error === "daily_limit") return res.status(429).json({ error: "come_back_tomorrow" });
throw error;
}
});Na página:
const { paid, amount } = await api("/api/daily-bonus", {});
if (paid) {
Lia.haptic("success");
Lia.toast("+" + amount + " LIA");
}#Escolha as chaves
A chave é o que torna uma recompensa segura. A mesma chave nunca paga duas vezes, então faça com que ela nomeie o motivo da recompensa, não o pedido:
| Recompensa | Chave |
|---|---|
| Um bônus diário | daily:2026-11-01:p_3f9c… |
| Um lugar em um torneio | tournament-44:place-1:p_3f9c… |
| Uma missão concluída | quest-7:p_3f9c… |
| Um vídeo assistido | ad:ad_8e1c… |
Uma tentativa novamente com a mesma chave após um tempo limite responde { "status": "duplicate" } e paga nada mais, então tentar novamente sempre é seguro. Nunca tente novamente com uma nova chave.
#Fique de olho no pool
const { balance, dailyCapPerPlayer } = await lia("GET", "/pool");
if (balance < 100) alertTheTeam(`Reward pool is down to ${balance} LIA`);Quando o pool puder'não cobrir uma recompensa, POST /rewards respostas 409 pool_empty. Diga aos jogadores educadamente e peça ao time Lia para aumentá-lo. Quando um jogador tiver seu app'limite diário, ele responde 429 daily_limit (o limite é por jogador por UTC dia, definido pela equipe).
#Em teste
Com sua chave de teste, as recompensas são fictícias: registradas, com seu webhook, mas nenhuma movimentação de $LIA, e a pool e o limite diário não'para usar. Tente suas chaves e seu tratamento de erros lá primeiro.
#Faça os prêmios justos
- Decida no servidor. O que alguém ganhou deve vir do que seu servidor viu (um jogo concluído, um vídeo verificado), e não do que a página diz.
- Cuide dos seus próprios limites também, por jogador e por dia, então um jogador pode'não esgotar o pool.
- Diga por quê. O
reasonaparece no jogador's atividade sob o seu app's nome.
Traduzido automaticamente. O inglês é a fonte de verdade. Leia em inglês