签到与奖励
概述
签到是成本最低的留存手段:每天点一下,领一点奖励,把"上线"变成习惯。签到系统的设计重点是循环节奏(月签/周签怎么安排)、累计奖励(连续签到的钩子)、补签(缺签的挽回机制)与活跃度奖励阶梯(与任务系统联动)。本文设计完整的签到系统。
一、签到循环
1.1 月签/周签
月签:以自然月为周期
每天 1 天签到位,按月循环
月末重置下月
周签:以自然周为周期
7 天一轮,周一重置
适合短期活动配合
签到位:
每天固定奖励(小额递增)
第 7/14/30 天大奖(粘性钩子)配置示例(月签表):
day: 1-30(每月天数可配)
每档奖励:货币/道具/抽卡券
特殊节点:第 7 天、第 15 天、第 30 天(大奖)1.2 签到状态
签到状态:
今日已签 / 未签
本月累计天数
连续签到天数(核心指标)
已领取档位
存储:
signin:{playerId}:{yyyyMM}(BitMap 或 Set)
连续天数:单独计数
签到以"天"为单位,0 点刷新二、签到实现
2.1 签到流程
签到流程:
1. 校验:今天未签到
2. 记录今日签到(按月 Key)
3. 更新累计天数、连续天数
4. 发放当日奖励
5. 判断是否触发节点大奖
6. 推送签到结果 + 明日预告// Redis 实现(防重复签到)
Boolean signed = redis.getBit("sign:" + yyyyMM + ":" + playerId, day);
if (signed) {
return fail(ALREADY_SIGNED);
}
redis.setBit(...); // 原子置位
grantDailyReward(playerId, day);2.2 连续天数维护
连续天数逻辑:
每日 0 点结算:昨日未签 → 连续天数清零
今日签到 → 连续天数 + 1
存储:
Redis:sign:streak:{playerId}
结算任务在每日刷新时统一处理(防漏)连续奖励:
连续 7 天 → 额外大奖
断签 → 连续重置,用补签挽回三、累计签到奖励
3.1 累计签到
累计签到(当月总天数):
独立于连续签到
累计 5/10/15/20/25/30 天 → 各档奖励
月末清点发放(或实时发)
设计意图:
连续签到激励"不间断"
累计签到兜底"偶尔断签不放弃"3.2 月签大奖
月签全勤奖:
全勤(满月天数)→ 限定奖励
全勤中断 → 不满足条件(运营可设宽容)
奖励投放:
大奖价值显著(抽卡券/限定皮肤/货币大额)
预告展示,驱动玩家"差一天就全勤"心理四、补签机制
4.1 补签设计
补签规则:
允许补签最近 N 天(如 7 天内缺签)
补签消耗:道具(补签卡)或货币(钻石)
补签只补"签到记录",不影响当日奖励
目标:
挽回断签玩家,保住连续签到补签流程:
1. 选择缺签日期(最近 N 天内)
2. 校验补签资源(卡/货币)
3. 扣资源 → 补记录 → 连续天数恢复
4. 补发当日奖励(可领)4.2 补签防刷
限制:
补签次数上限(每月 N 次)
补签卡有获取渠道(活动/付费)
补签不参与全勤判断(或按运营策略)五、活跃度奖励阶梯
5.1 与活跃度联动
签到与任务活跃度是两套并行激励,可互相强化:
联动设计:
签到本身提供活跃度(+10)
活跃度达档领奖(任务章节)
签到 + 日常任务共同驱动活跃
双体系:
签到:保底上线动作(点一下)
活跃度:深度玩法动作(玩起来)
运营数据看两者重合度,调整数值5.2 奖励阶梯
活跃度阶梯示例:
20 活跃 → 小礼包
50 活跃 → 中礼包
80 活跃 → 大礼包
100 活跃 → 抽卡券/限定道具
领取:
达到即可领取(不消耗活跃值)
每日刷新重置六、实现要点
核心接口:
signIn(playerId)
getSignStatus(playerId) // 今日/本月/连续
makeUpSign(playerId, day) // 补签
getSignRewardInfo(playerId) // 奖励预览工程注意:
签到 0 点刷新(与每日刷新同批)
防重复签到(BitMap 原子)
连续天数与累计天数分开维护
奖励发放幂等(补签/异常重试不重复)常见坑:
跨月状态混淆 → 按月 Key 隔离
补签连续计算错误 → 结算任务统一维护
并发重复签到 → setBit 原子性
时区/跨日边界 → 统一按服务器日期与其他系统衔接:
奖励 → 货币/道具系统
活跃度 → 任务系统
补签卡 → 道具系统
签到活动(节日双倍)→ 活动系统