Account Deletion
LI PASS provides a standardized compliance solution that allows games to configure compliance services directly, without having to integrate the APIs mentioned in this article. For games integrated with 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/regions based on local compliance requirements. During this period, the player can cancel their account deletion request. Once the cooling-off period ends, the account will be permanently deleted.
- Provide the compliance team with the official game name for each region and the designated email address for account deletion requests. The official game name helps players recognize you, reducing the chance of your emails being blocked or marked as spam. The email address is used to send and receive emails regarding account deletion.
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 OpenUrl.
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 |
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 | | ------ | -------| ------------------------------------ | -------- | | area | uint32 | Game main server: 1-Japan; 2-Korea; 3-United Kingdom; 4-Hong Kong, Macau, Taiwan | Required | | partition | uint32 | Area | Required | | platid | uint8 | Platform: iOS (0), Android (1) | Required | | openid | string | Player Network SDK user ID | Required | | serial | string | Request number, generated by the caller | 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 |
---|---|---|---|
ret | int | Game return code, 0: success, other values: failed | Required |
msg | string | Code description | Required |
game_ret | int32 | Returned result, 0: success, 1: account does not exist, other values: failed | Required |
game_msg | string | Description of result | 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 |
---|---|---|---|
area | int32 | Game main server: 1-Japan; 2-Korea; 3-United Kingdom; 4-Hong Kong, Macau, Taiwan | Required |
partition | uint32 | Area | Required |
platid | int32 | Platform: iOS (0), Android (1) | Required |
openid | string | Player Network SDK user ID | 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 |
---|---|---|---|
ret | int | Game return code, 0: success, other values: failed | Required |
msg | string | Code description | Required |
game_ret | int32 | Returned result, 0: success, 1: account does not exist, other values: failed | Required |
game_msg | string | Description of result | Required |
login_time | uint32 | The time the player last logged in to the game, in Unix timestamp format | Required |