账户注销
注销流程
国内
- 阅读注销条件
- 阅读注销协议
- 校验账号实名登记信息
- 提交注销
海外
- 阅读注销条件
- 阅读注销协议
- 15 天内多设备登录校验
- 提交注销
国内和海外差异
国内
在进行账号注销前会校验实名信息。
海外
由于没有实名信息校验环节存在盗号注销的风险,增加了 15 天多设备登录校验(国内没有这个校验)。
冷静期
玩家发起账号注销后,该账号处于「待注销」状态。 15 个日内不要再次登录,如果在冷静期内再次登录该账号会自动取消账户注销,此时,该账号处于「取消注销」的状态。冷静期 15 个日内玩家没有再次登录游戏则该账号会被注销,此时该账号处于「已注销」状态。
实销内容
实销的游戏数据处理需要满足法务要求。
过了冷静期之后已经提交注销的账户(未在冷静期内有过登录行为的账户)会被进行账户实销,总体上平台侧不统一对资源进行销毁,但是为了方便游戏处理注销后的资源,我们做了如下几方面的处理。
登录绑定
删除所有登录绑定关系,当前 XDID 会不允许登录。如果绑定登录会生成一个新的 XDID。
出于满足法务要求,该 XDID 只是逻辑删除。
内建账户
XD SDK 6.X 的账户和 TDS 内建账户目前是 1:1 的关系,账户实销之后旧的内建账户并不会被物理删除,实销时会对 TDSUser 做如下操作:
- 写入
deleted
= true 标识该记录已经被逻辑删除。 - 随后所有的登录绑定关系被删除,
authData
值等于{}
。 - 用于添加好友的
shortId
被置空。 - 刷新
sessionToken
,客户端已经在使用的sessionToken
会失效。
匿名化
游戏可以通过 deleted = true 标识(TDSUser["deleted"]
)对 TDSUser 的 nickname
和 avatar
等进行匿名化处理,平台在实销时并没有对 TDSUser 匿名化统一处理。
TDS 好友
当某个账号实销后,会存在账号 A(被注销的账号)如何在账号 B(未被注销的账号)的好友列表展示的问题,这里有两个方案:
- 希望已经销号的角色仍然会出现在好友列表中:由于在实销时写入 deleted = true 标识((
TDSUser["deleted"]
)),游戏可以拿到这个标识后做匿名化处理。 - 将从其好友的(游戏内)好友列表中消失:这是非常非常麻烦的一件事,还是建议展示出来由玩家自己处理。如果强行要做,就需要业务上在注销账号的时候主动查找谁加了这个人为好友,然后批量删除数据。这种批量删除可能造成业务不稳定,也很可能会出现各种边角情况。
目前实现的是第一个方案。
TDS 好友码
由于上面提到的 shortId
字段被置空,则扫好友码无效。同时无法通过好友码搜索到账号。
TapTap 好友
实销只会解绑登录关系,并不会对 TapTap 好友关系做任何变更。
实销回调
玩家提交注销登记时并不会有回调,回调只在实销之后才会有。
账户实销之后如果游戏在接入该功能时提供了回调地址,则账户实销之后会回调通知游戏。如果未提供回调地址,则账户同样会被实销。
为了使账户注销更严谨,我们建议游戏在收到平台实销回调后游戏的服务端做相应的处理,比如把用户做游戏内踢下线,游戏内匿名化(满足法务要求)。
回调 URL: 该链接由游戏服务端提供给平台,由平台研发配置到平台的后台。
回调密钥: 由平台后台生成,用于回调内容签名验签。
请确保回调 URL 是外部可正常访问的,且不能携带后缀参数,否则可能导致游戏服务无法接收到平台的回调通知信息。
回调 URL 示例: https://gameserver.xd.com/deregister.action
。
通知规则
玩家注销账户后到了冷静期后(目前是 15 天),会对该玩家在平台的登录绑定信息进行实际删除(删除时并不总是准确的 15 天整一分一秒不差,可能会稍有延后),在进行账户实销后平台服务会把注销信息发送给游戏服务,游戏需要接收处理该消息,并返回应答。
安全机制
验签
为了保证数据安全,我们提供了签名机制,且为了避免多次开发,验签机制和支付通知的签名机制保持一致。如果您的游戏已经接入过支付通知的签名机制,那账户和支付的公钥是一样的。如果没有则联系我们提供。见 服务端验签机制。
ip 白名单
如果您的游戏回调地址设置了防火墙,可以参考 6.x 服务端出口 IP,增加 ip 白名单。
通知内容
注销通知是以 POST
方法访问游戏设置的通知 url,body 为 JSON 格式。
示例:
{
"ip":"103.86.76.193",
"applyTime":1648700206477,
"userId":"339016368873885696",
"opsType":"UNREGISTER"
}
通知参数说明
name | DateType | Options | Description |
---|---|---|---|
userId | string | require | 用户 id(即 xdid), 同 TDSUser 的 objectId |
applyTime | number | require | 注销通知时间戳(毫秒) |
ip | string | nullable | 用户注销时的 ip 地址 |
opsType | string | require | 账户操作类型,已注销为:UNREGISTER |
userId
游戏服务端需要对同一个userId
的多次重复请求做好幂等处理。- 如果只关心注销,请判断
opsType
类型,以后可能会有其他类型的操作。
通知应答
通知 http 应答码为 200
或 204
才会当作正常接收,当回调处理异常时,应答的 HTTP 状态码应为 500
,或者 4xx
。
当商户后台应答失败时,平台将记录下应答的报文,商户应按照以下格式返回:
{
"code": "SUCCESS",
"msg": "成功"
}
失败重试
响应不满足通知应答或者异常时会按照如下间隔进行回调重试。
游戏服务端务必对同一个 userId 的多次重复请求做好幂等处理!
限制和备注
- 注销回调 url 长度请保持在 255 个字符以内。
- 暂时不支持同一个游戏的账户注销通知回调到不同的游戏服务器回调上(我们也不知道玩家在哪个服上,游戏自己做处理)。