防沉迷自定义指南
一、为什么需要自定义防沉迷
-
统一的界面风格
lcm提供的界面风格和游戏可能不是很匹配,游戏可以通过开发相应的界面来获取统一的界面风格
-
更加精确的防沉迷时长控制
lcm现在通过心跳来计时, 心跳为3分钟一次,不是那么精确
二、如何自定义
除了不可自定义部分,游戏自己实现所有的其他逻辑。
打开ope的自定义开关后,lcm的实名功能都将关闭。
但是请注意,打开自定义开关时,仍然需要打开防沉迷开关开启充值验证。
不可以自定义的部分
- 身份证录入,必须要接入该接口,身份证信息统一保存在lcm
- 充值限制,充值限制由lcm实现,集成在充值接口,游戏侧可以不用关注该部分
身份信息验证
在/game/token/validate中集成了身份信息查询[2],游戏侧在登录时利用该接口获取是否实名,是否成年等数据, 不要缓存实名数据,因为实名信息是多游戏共享的。
身份信息录入
对于没有实名的用户,在合适的时间提醒录入身份证,提醒时机和界面由游戏测自定义, 提交时调用lcm录入身份信息接口[1]
试玩模式
对于没有实名的用户,合计1小时试玩时间,达到时长后无法进入游戏
未成年人防沉迷
- 对于未成年人,每天有1.5小时可玩时间
- 在国家法定节假日有3小时可玩时间(请注意法定节假日只有11天,请查询国务院通知)
- 每日22时至第二日8时为不可玩时间
三、接口定义
1. 身份信息录入
- URL_V1 :
- Production: https://lcm-prod-cn-live.mobage.cn/
- Sandbox : https://lcm-sand-cn-live.mobage.cn/
-
URL_V2 :
- Production: https://lcm-api.mobage.cn
- Sandbox : https://lcm-api-sand.mobage.cn
-
Path: {URL_V1 OR URL_V2}/game/real_name
- Method: PUT
-
Request Header:
key value signature 请参考 服务器接入文档 2.0; server v1 不需要这个签名 Accept application/json Content-Type application/json -
Response:
type value Content-Type application/json Response body { "rnInfo": 1 "rncId": *** "rncStatus": 0, } rncStatus -> 认证状态:0: 认证成功 1: 认证中。2: 认证失败 3:待认证
-
Request Body ( json ):
key type value key string your consumer key token string token certificate string 证件号 realName string 姓名 -
错误码
code description 9991001 已经录入证件信息 9991002 证件不存在 9991003 卡号不合法 9991004 每个证件只能绑定10个uid
2. 查询身份信息(lcm server v2)
我们在{URL_V2}/game/token/validate接口的相应体中新增了一个字段
-
新增字段
key type description rnInfo Integer 0:未录入, 1:未成年人, 2:成年人 rncStatus Integer 认证状态:0: 认证成功 1: 认证中。2: 认证失败 3: 待认证
3. 查询身份信息(lcm server v1)
我们在{URL_V1}/auth/validate接口的相应体中新增了一个字段
-
新增字段
key type description rnInfo Integer 0:未录入, 1:未成年人, 2:成年人 storeAccount String 商店账号 rncStatus Integer 认证状态:0: 认证成功 1: 认证中。2: 认证失败 3:待认证
4. 自定义模式下的上下线信息汇报接口
-
URL :
- Production: https://lcm-api.mobage.cn
- Sandbox : https://lcm-api-sand.mobage.cn
-
Path: URL/game/real_name/sign/report
- Method: POST
-
Request Header:
key value signature 请参考 服务器接入文档 2.0 Accept application/json Content-Type application/json -
Request Body ( json ):
key type value key string your consumer key data array 上下线数据 -
data元素信息:
key type description lid long lid storeType string storeAccount string 平台账号 sessionId string(最长32位) 一个会话标识只能对应唯一的实名用户 clientIp string 客户端ip action int 动作 0:下线,1:上线 occurTime int 发生时间,时间戳 sessionId补充:
一个会话标识只能对应唯一的实名用户
一个实名用户可以拥有多个会话标识;
同一用户单次游戏会话中 上下线动作必须使用同一会话标识上报
备注:会话标识仅标识一次用户会话
生命周期仅为一次上线和与之匹配的一次下线
不会对生命周期之外的任何业务有任何影响
- Example for Request body:
{
"key":13002010,
"data":[
{
"lid":"18",
"storeType":"APPLE",
"storeAccount":"151",
"sessionId":"sd11",
"action":0,
"clientIp":"",
"occurTime":1615455675
},
{
"lid":"15",
"storeType":"APPLE",
"storeAccount":"151",
"sessionId":"sd11",
"action":1,
"clientIp":"",
"occurTime":1615455675
}
]
}
-
Response:
type value Content-Type application/json Response body { "trace": null, "code": 2002, "catalog": 1, "message": "签名错误", "internalMessage": "", "status": 401 }
-
HttpStatus
status description 200 OK 500 Internal Server Error