Account Deletion
LI PASS provides a standard compliance solution for games that have integrated LI PASS, allowing games to configure compliance services directly without having to integrate the APIs mentioned in this article. For games that are using LI PASS, reach out to the Player Network representative to learn more details.
For games not following the standard LI PASS compliance workflow, follow the instructions in this article to implement the account deletion function.
Prerequisites
- Establish the prerequisites for account deletion. Players should meet these conditions before they can proceed with the account deletion.
- Set a cooling-off period for different countries or regions according to compliance requirements. This period allows players to cancel their account deletion requests. After it passes, the account is deleted.
- Share the official game name for each region and the email address for account deletion requests with the compliance team. The official game name helps players identify you, reducing the risk of your emails being blocked or marked as spam. This email address is for sending and receiving account deletion-related emails.
Set up account deletion for the game app
Access the account deletion HTML5 page
Players must log in so that when the encryptEnable
parameter is set to true when calling the OpenUrl
method, login state data can be automatically added to the URL.
Call OpenUrl
to open WebView and access the account deletion HTML5 page.
URL request GET parameters
Parameter | Type | Description | Remark |
---|---|---|---|
pageIndex | int | The HTML5 page to access 0: The account deletion page 2: The page to withdraw consent to privacy policy 3: The page to withdraw consent to player agreement | Required |
intl_cluster | string | The deployment cluster URL The base64UR encoding of the INTL_URL which is configured in INTLConfig.ini . | Required |
user_name | string | Username (Recommended to be the in-game character name. If an empty string was passed, the character name will appear to be blank in the account deletion email.) | Required |
area_id | uint | Game area ID (pass a null string when none exists) | Required |
zone_id | uint | Game zone ID (pass a null string when none exists) | Required |
lang_type | string | Language Type (RFC 4646), such as "en". For details, see Language Type Definitions. | Required |
Login state data
When parameter encryptEnable
is true in OpenUrl
, the following login state data will be automatically added to the link. For more information, see the OpenUrl
method for Unity or UE.
Parameter | Type | Description | Remark |
---|---|---|---|
gameid | string | Game ID assigned by Player Network | Required |
channelid | int | Login channel | Required |
os | string | Terminal Operating System 1: Android 2: iOS 3: Web 4: Linux 5: Windows 6: Switch | Required |
encodeparam | string | Encrypted fields: Player Network SDK OpenID, Player Network SDK token, third-party channel OpenID, etc. | Required |
seq | string | Serial number | Optional |
For example, if a player is logged in to the game and developers call OpenUrl
with encryptEnable = true
to open a QQ page, the opened URL is https://www.qq.com?gameid=11&channelid=3&os=1&ts=1634707615&sdk_version=1.11.00.487&seq=11-3b61c8315b91d319eaa5622d72c474ec7ee395cee116d142a74b3455607e3d21-1634707615-14&encodeparam=C524E9DE27EB02E552CFBA9C54BFA301317DF66F49C5C02ED708D582B80A1B74DE8F0723731F0D66EBD12095E244097DC3AFAE1203A8FCD2A2821C1DEC9CD3AE254BAD99C93B095E8F39FCE414FBFB0A79F9EA8DF2E1B309190E5A8721A5AC8132E8E89506CDBA1ACBB1C17AA794A658502C5CCA6B25E6105049EABB44C408700FE2713FDD327217AF45A226F46FFD02
.
Request sample
Test environment URL: test-common-web.intlgame.com
Production environment URL: 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);
Access sample
Production environment:
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
Testing environment:
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
HTML5 callback
Once the account deletion request is submitted, the page will call the JS API of the Player Network SDK and execute the jsCallNative
method. The cooling-off period and account deletion status are determined at this stage based on the country or region configurations that the game has previously set.
For Apple accounts, Apple's account deletion API is called without requiring any intervention from the game.
If the account deletion request is successful, the callback returns a JSON string:
{"type":"request_delete_account_success","value":"Request for game account cancellation submitted successfully"}
When
type
isrequest_delete_account_success
, the account deletion application was successful. In this case,value
is a fixed string.If the account deletion request fails, the callback returns a JSON string:
{"type":"request_delete_account_fail","value":"$code|$seq_id|$message"}
When
type
isrequest_delete_account_fail
, the request failed. In this case,value
has three pieces of information (separated with |):$code
is the error code (a number),$seq_id
is the serial number of the request (used by backend APIs to locate errors), and$message
is the error message.
Player information deletion protocol
The Player Network account deletion service notifies the game to delete player information through IDIP. The game must implement a IDIP player game information deletion API. It is recommended that the game integrates with the API based on the IDIP account deletion protocol.
IDIP account deletion protocol
{gameserver_dns}:{port}/{path}?idip_sign=xxx
Request body
Field | Type | Description | Remark |
---|---|---|---|
head | Object | Header information | Required |
body | Object | Body information | Required |
Request body "head" parameters
Field | Type | Description | Remark |
---|---|---|---|
iCmdid | int | Command word, value: 101 | Required |
iSeqid | int | Data stream message no. | Required |
ServiceName | string | Service name ("GDOS" extended alternate field) | Required |
dtSendTime | string | Format: YYYY-MM-DD HH:mm:ss | Required |
iVersion | int | Version no., a fixed value set by the caller | Required |
Authenticate | String(32) | Reserved field | Required |
iSource | Uint32 | Request source value | Required |
Request body "body" parameters
Field | Type | Description | Remark |
---|---|---|---|
OpenId | String(64) | Player Network SDK user ID | Required |
Serial | String | Request no., generated by the caller | Required |
AreaId | uint | Game main server | Not required |
PlatId | uint | Platform | Not required |
ZoneId | uint | Area | Not required |
Return body
Field | Type | Description | Remark |
---|---|---|---|
head | Object | Header information | Required |
body | Object | Body information | Required |
Return body "head" parameters
Field | Type | Description | Remark |
---|---|---|---|
iCmdid | int | Command word, value: 100 | Required |
iSeqid | int | Data stream message no. | Required |
ServiceName | string | Service name ("GDOS" extended alternate field) | Required |
dtSendTime | string | Format: YYYY-MM-DD HH:mm:ss | Required |
iVersion | int | Version no., a fixed value set by the caller | Required |
Authenticate | String(32) | Reserved field | Required |
iSource | Uint32 | Request source value | Required |
Return body "body" parameters
Field | Type | Description | Remark |
---|---|---|---|
iRet | int | Game return code | Required |
ErrorInfo | string | Information Returned from Game-side | Required |
Player last login time protocol
The Player Network account deletion service uses IDIP to query player information logs (must be implemented by the game).
It is recommended that the game integrates with the API based on the IDIP query last login time protocol.
IDIP query last login time protocol
{gameserver_dns}:{port}/{path}?idip_sign=xxx
Request body
Field | Type | Description | Remark |
---|---|---|---|
head | Object | Header information | Required |
body | Object | Body information | Required |
Request body "head" array content
Field | Type | Description | Remark |
---|---|---|---|
iCmdid | int | Command word, value: 101 | Required |
iSeqid | int | Data stream message no. | Required |
ServiceName | string | Service name ("GDOS" extended alternate field) | Required |
dtSendTime | string | Format: YYYY-MM-DD HH:mm:ss | Required |
iVersion | int | Version no., a fixed value set by the caller | Required |
Authenticate | String(32) | Reserved field | Required |
iSource | Uint32 | Request source value | Required |
Request body "body" array content
Field | Type | Description | Remark |
---|---|---|---|
OpenId | String(64) | Player Network SDK user ID | Required |
AreaId | uint | Game main server | Not required |
PlatId | uint | Platform | Not required |
ZoneId | uint | Area | Not required |
Response body
Field | Type | Description | Remark |
---|---|---|---|
head | Object | head info | Required |
body | Object | body info | Required |
Response body "head" array content
Field | Type | Description | Remark |
---|---|---|---|
iCmdid | int | Command word, value: 101 | Required |
iSeqid | int | Data stream message no. | Required |
ServiceName | string | Service name ("GDOS" extended alternate field) | Required |
dtSendTime | string | Format: YYYY-MM-DD HH:mm:ss | Required |
iVersion | int | Version no., a fixed value set by the caller | Required |
Authenticate | String(32) | Reserved field | Required |
iSource | Uint32 | Request source value | Required |
Response body "body" array content
Field | Type | Description | Remark |
---|---|---|---|
iRet | int | Game return code | Required |
ErrorInfo | string | Information Returned from Game-side | Required |
LoginTime | uint64 | The time the player last logged in to the game, in the Unix timestamp format | Required |
Set up account deletion for the website
Step 1: Install the JavaScript SDK
Install the SDK package from the production environment when launching the game. The SDK package from the test environment is only used for integration testing.
Games can install the SDK from either npm
or CDN
.
$ npm install @intlsdk/dsr-api
//SDK package from the test environment
<script src="https://test-common-web.intlgame.com/sdk-cdn/dsr-api/index.umd.js"></script>
//SDK package from the production environment
<script src="https://common-web.intlgame.com/sdk-cdn/dsr-api/index.umd.js"></script>
Step 2: Instantiate the SDK
const dsrApi = new IntlgameDSRApi({
env: "test",
channelID: 52,
gameID: 11,
accountPlatType: 52,
appID: "",
});
Parameter | Type | Description | Remark |
---|---|---|---|
env | string | SDK environment For more information, see Retrieve cluster information | Required |
channelID | number | Channel ID of supported third-party channels For more information, see Login Channel and ChannelID Relationship | Required for third-party channels |
appID | string | App ID ACCOUNT_APP_ID assigned by Player Network Console | Optional |
accountPlatType | number | Platform type (channel ID) of the custom account ACCOUNT_PLAT_TYPE assigned by Player Network Console | Required for custom accounts |
gameID | number | Player Network unique game ID | Required |