账号注销
LI PASS 提供一套标准化的合规解决方案,集成 LI PASS 后业务可直接配置合规服务,无需再接入本文中提到的接口。对于接入 LI PASS 的业务,可联系 Player Network 助手了解更多详情。
对于未使用标准 LI PASS 合规方案的业务,请参考本文内容实现账号注销功能。
前提条件
- 账号注销的前置条件由游戏开发根据需求自定。满足条件后,按照步骤实现游戏中账号注销的逻辑。
- 业务需根据合规要求为不同国家或地区设置提交注销请求后的静默期。在静默期间,玩家可以重新激活账号并取消注销。静默期过后,账号将被删除。
- 业务需提供账号注销邮件模板所需的各区域的游戏官方名称,以及账号注销邮件的联系邮箱。账号注销邮件建议使用官方游戏名称,以便玩家识别您的身份,以免邮件遭到拼比或被标记为垃圾邮件。邮箱将用于收发与账号注销相关的邮件。
在游戏客户端实现账号注销逻辑
接入账号注销 H5 页面
玩家必须登录后 OpenUrl
中的 encryptEnable
才会自动传参。
调用 OpenUrl
打开 WebView 并拉起账号注销 H5 页面。
URL 请求 GET 参数
参数 | 类型 | 说明 | 备注 |
---|---|---|---|
pageIndex | int | 进入不同账号注销页面 0: 账号注销 2: 撤销同意隐私协议 3: 撤销同意用户协议 | 必填 |
intl_cluster | string | 游戏接入 Player Network SDK INTLConfig.ini 中 INTL_URL 的 base64URL 编码 | 必填 |
user_name | string | 用户名(建议使用游戏内角色名字,如果传空字符串会导致角色名字在删号邮件里显示为空白) | 必填 |
area_id | uint | 游戏区域 ID(不存在时传空字符串) | 必填 |
zone_id | uint | 游戏区 ID(不存在时传空字符串) | 必填 |
lang_type | string | 语言类型(RFC 4646),例如 "en"。详情,请参见 语言类型定义 | 必填 |
登录态数据
在 OpenUrl
时的参数 encryptEnable
传 true,以下登录状态数据将自动添加到链接中。更多信息,请参见“打开网页页面链接添加登录态数据”的 Unity 接口或 UE 接口。
参数 | 类型 | 说明 | 备注 |
---|---|---|---|
gameid | string | Player Network 分配的游戏 ID | 必填 |
channelid | int | 登录渠道 | 必填 |
OS | string | 终端操作系统标示 1: Android 2: iOS 3: Web 4: Linux 5: Windows 6: Switch | 必填 |
encodeparam | string | 加密字段: Player Network SDK OpenID,Player Network SDK token,第三方渠道 OpenID 等。 | 必填 |
seq | string | 序列号 | 选填 |
请求示例
测试环境地址为:test-common-web.intlgame.com
正式环境地址为:common-web.intlgame.com
- Unity
- Unreal Engine
string delete_account_url = "test-common-web.intlgame.com";
int pageIndex = 0;
string intl_cluster = "aHR0cHM6Ly90ZXN0LmludGxnYW1lLmNvbQ";
string user_name = "xiaooang%20Tx";
string lang_type = "en";
uint area_id = 1;
uint zone_id = 1;
bool encryptEnable = true;
bool isFullScreen = false;
string url = $"https://{delete_account_url}/account-deletion/index.html?pageIndex={pageIndex}&intl_cluster={intl_cluster}&user_name={user_name}&lang_type={lang_type}&area_id={area_id}&zone_id={zone_id}";
INTLAPI.OpenUrl(url, INTLWebViewOrientation.Auto, isFullScreen, encryptEnable);
FString delete_account_url = TEXT("test-common-web.intlgame.com");
int pageIndex = 0;
FString intl_cluster = TEXT("aHR0cHM6Ly90ZXN0LmludGxnYW1lLmNvbQ");
FString user_name = TEXT("xiaooang%20Tx");
FString lang_type = TEXT("en");
uint area_id = 1;
uint zone_id = 1;
bool encryptEnable = true;
bool isFullScreen = false;
TArray<FStringFormatArg> args;
args.Add(FStringFormatArg(delete_account_url));
args.Add(FStringFormatArg(pageIndex));
args.Add(FStringFormatArg(intl_cluster));
args.Add(FStringFormatArg(user_name));
args.Add(FStringFormatArg(lang_type));
args.Add(FStringFormatArg(area_id));
args.Add(FStringFormatArg(zone_id));
FString url = FString::Format(TEXT("https://{0}/account-deletion/index.html?pageIndex={1}&intl_cluster={2}&user_name={3}&lang_type={4}&area_id={5}&zone_id={6}"), args);
UINTLSDKAPI::OpenUrl(url, INTLWebViewOrientation.Auto, isFullScreen, encryptEnable);
访问示例
正式环境:
https://common-web.intlgame.com/account-deletion/index.html?pageIndex=0&area_id=1&zone_id=1&lang_type=en&intl_cluster=aHR0cHM6Ly90ZXN0LmludGxnYW1lLmNvbQ&gameid=11&channelid=6&user_name=xiaooang%20Tx&os=1&ts=1617245219&sdk_version=1.7.00.28&seq=11-805b892eed1065983850b0d87f7fe706c862473b579703b711cae6a0d6ffefd4-1617245219-201&encodeparam=97C45AE512DDEDE0F1ED0E2E4FB3C31F8B96E406110A8D6E2F464859350DC359A8E94B25DA42454829B5336D8CD6ADDBCD13C66081391E96EC2F938A1F9F6DE429EBEF3B65D0560D10C428C21E204686D09CE0B64B2BA1E51E732FD05300249C5F118E8316B0A65D700C9AC28310A458
测试环境:
https://test-common-web.intlgame.com/account-deletion/index.html?pageIndex=0&area_id=1&zone_id=1&lang_type=en&intl_cluster=aHR0cHM6Ly90ZXN0LmludGxnYW1lLmNvbQ&gameid=11&channelid=6&user_name=xiaooang%20Tx&os=1&ts=1617245219&sdk_version=1.7.00.28&seq=11-805b892eed1065983850b0d87f7fe706c862473b579703b711cae6a0d6ffefd4-1617245219-201&encodeparam=97C45AE512DDEDE0F1ED0E2E4FB3C31F8B96E406110A8D6E2F464859350DC359A8E94B25DA42454829B5336D8CD6ADDBCD13C66081391E96EC2F938A1F9F6DE429EBEF3B65D0560D10C428C21E204686D09CE0B64B2BA1E51E732FD05300249C5F118E8316B0A65D700C9AC28310A458
H5 回调
注销操作执行后,页面会调用 Player Network SDK 的 JS API,执行 jsCallNative
方法。
如果注销成功,回调传值为一个 JSON 字符串:
{"type":"request_delete_account_success","value":"Request for game account cancellation submitted successfully"}
通过
type
等于request_delete_account_success
可以判定申请注销账号成功,此时value
是一个固定的字符串。如果注销失败,回调传值为一个 JSON 字符串:
{"type":"request_delete_account_fail","value":"$code|$seq_id|$message"}
通过
type
等于request_delete_account_fail
可以判定请求注销账号失败,此时value
中包含三个信息(用|隔开),分别是:$code
错误码(一个数字),$seq_id
本次请求序列号(用于后台接口定位错误),$message
错误信息。
玩家信息删除协议
Player Network 账号注销服务通过 IDIP 通知游戏删除玩家信息。游戏需实现 IDIP 玩家游戏信息删除接口。推荐业务参考 账号注销协议。
IDIP 账号注销协议
{gameserver_dns}:{port}/{path}?idip_sign=xxx
请求体
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
head | Object | 头信息 | 必填 |
body | Object | 体信息 | 必填 |
请求体 "head" 参数
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
iCmdid | int | 命令字, 值为 101 | 必填 |
iSeqid | int | 数据流消息序号 | 必填 |
ServiceName | string | Service name ("GDOS" extended alternate field) | 必填 |
dtSendTime | string | 格式: YYYY-MM-DD HH:mm:ss | 必填 |
iVersion | int | 版本号,调用者设置的固定值 | 必填 |
Authenticate | String(32) | 留空字段 | 必填 |
iSource | Uint32 | 请求源 source 值 | 必填 |
请求体 "body" 参数
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
OpenId | String(64) | Player Network SDK 用户标识 | 必填 |
Serial | String | 请求序号,由调用方生成 | 必填 |
AreaId | uint | 游戏大区 | 必填 |
PlatId | uint | 平台 | 必填 |
ZoneId | uint | 小区 | 必填 |
返回体
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
head | Object | 头信息 | 必填 |
body | Object | 体信息 | 必填 |
返回体 "head" 参数
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
iCmdid | int | 命令字, 值为 100 | 必填 |
iSeqid | int | 数据流消息序号 | 必填 |
ServiceName | string | Service name ("GDOS" extended alternate field) | 必填 |
dtSendTime | string | 格式: YYYY-MM-DD HH:mm:ss | 必填 |
iVersion | int | 版本号,调用者设置的固定值 | 必填 |
Authenticate | String(32) | 留空字段 | 必填 |
iSource | Uint32 | 请求源 source 值 | 必填 |
返回体 "body" 参数
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
iRet | int | 游戏返回码 | 必填 |
ErrorInfo | string | 从游戏侧返回的信息 | 必填 |
游戏玩家最近登录时间协议
Player Network 账号注销服务通过 IDIP 查询玩家信息流水;(游戏需实现)。
推荐业务参考 最后登录时间协议。
现有游戏 (IDIP) 查询玩家最近登录时间协议
{gameserver_dns}:{port}/{path}?idip_sign=xxx
请求体
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
head | Object | 头信息 | 必填 |
body | Object | 体信息 | 必填 |
请求体 "head" 数组内容
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
iCmdid | int | 命令字, 值为 101 | 必填 |
iSeqid | int | 数据流消息序号 | 必填 |
ServiceName | string | Service name ("GDOS" extended alternate field) | 必填 |
dtSendTime | string | 格式: YYYY-MM-DD HH:mm:ss | 必填 |
iVersion | int | 版本号,调用者设置的固定值 | 必填 |
Authenticate | String(32) | 留空字段 | 必填 |
iSource | Uint32 | 请求源 source 值 | 必填 |
请求体 "body" 数组内容
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
OpenId | String(64) | Player Network SDK 用户标识 | 必填 |
AreaId | uint | 游戏大区 | 必填 |
PlatId | uint | 平台 | 必填 |
ZoneId | uint | 小区 | 必填 |
响应体
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
head | Object | 头信息 | 必填 |
body | Object | 体信息 | 必填 |
响应体 "head" 数组内容
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
iCmdid | int | 命令字, 值为 101 | 必填 |
iSeqid | int | 数据流消息序号 | 必填 |
ServiceName | string | Service name ("GDOS" extended alternate field) | 必填 |
dtSendTime | string | 格式: YYYY-MM-DD HH:mm:ss | 必填 |
iVersion | int | 版本号,调用者设置的固定值 | 必填 |
Authenticate | String(32) | 留空字段 | 必填 |
iSource | Uint32 | 请求源 source 值 | 必填 |
响应体 "body" 数组内容
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
iRet | int | 游戏返回码 | 必填 |
ErrorInfo | string | 从游戏侧返回的信息 | 必填 |
LoginTime | uint64 | 用户最后登录游戏时间,Unix 时间戳 | 必填 |
在游戏官网实现账号注销
步骤1:引⼊ SDK
项目联调阶段可以引⼊ SDK 联调版本包,该包仅用于集成测试。项目上线须引⼊ SDK 正式版本包。
目前已支持 npm
包方式和 CDN
方式。
$ npm install @intlsdk/dsr-api
//SDK 联调版本包
<script src="https://test-common-web.intlgame.com/sdk-cdn/dsr-api/index.umd.js"></script>
//SDK 正式版本包
<script src="https://common-web.intlgame.com/sdk-cdn/dsr-api/index.umd.js"></script>
步骤2:使用 SDK
const dsrApi = new IntlgameDSRApi({
env: "test",
channelID: 52,
gameID: 11,
accountPlatType: 52,
appID: "",
});
参数 | 类型 | 描述 | 备注 |
---|---|---|---|
env | string | SDK 环境 更多信息,请参见 获取部署集群信息。 | 必填 |
channelID | number | 支持的第三方渠道的渠道 ID 更多信息,请参见 Login Channel and ChannelID Relationship | 第三方渠道必填 |
appID | string | 应用 ID Player Network 控制台分配的 ACCOUNT_APP_ID | 选填 |
accountPlatType | number | 自建账号的渠道 ID Player Network 控制台分配的 ACCOUNT_PLAT_TYPE | 自建账号必填 |
gameID | number | Player Network 游戏唯一标识 ID | 必填 |