指南
奖励玩家
复制页面
从您的应用的奖励池中向玩家支付$LIA,从您的服务器支付。例如每日奖金,可以重试且在您的限制内。
您的应用程序需要一个奖励池,由 Lia 团队资助(参见 奖励池。奖励只来自你的服务器,使用你的密钥。
#每日奖励
每位玩家每天完成一个关卡后可以领取 2 LIA 一次。
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;
}
});在页面中:
const { paid, amount } = await api("/api/daily-bonus", {});
if (paid) {
Lia.haptic("success");
Lia.toast("+" + amount + " LIA");
}#选择密钥
关键在于让奖励安全。同一个关键不能支付两次,所以让它命名奖励的原因,而不是请求:
| 奖励 | 密钥 |
|---|---|
| 每日奖励 | daily:2026-11-01:p_3f9c… |
| 一个比赛位置 | tournament-44:place-1:p_3f9c… |
| 一个完成的任务 | quest-7:p_3f9c… |
| 一个观看过的视频 | ad:ad_8e1c… |
在超时后使用相同密钥重试会回答 { "status": "duplicate" } 并且不再支付任何其他费用,因此重试总是安全的。永远不要使用新密钥进行重试。
#留意这个池子
const { balance, dailyCapPerPlayer } = await lia("GET", "/pool");
if (balance < 100) alertTheTeam(`Reward pool is down to ${balance} LIA`);当池子可以't 覆盖奖励, POST /rewards 答案 409 pool_empty。请礼貌地告诉玩家,并请求Lia团队增加它的额度。当玩家已经使用过你的应用'的每日限额,它会回答 429 daily_limit (限制是每个玩家每天 UTC 的次数,由团队设定)。
#在测试中
使用您的测试密钥,奖励是假的:它们被记录下来,带有其网络钩子,但没有 $LIA 移动,池和每日限制不会'已使用。请首先尝试您的密钥和错误处理。
#让奖励公平
- 由服务器决定。 某人获得的应来自你的服务器看到的内容(一局完成的游戏,一个验证过的视频),而不是来自页面上的说明。
- 注意你自己的限制 每天每个玩家,所以一个玩家可以'不要排空水池。
- 说明原因。 的
reason在播放器中显示's 活动在你的应用下'的名字。
自动翻译。英语是真实来源。 阅读英文