制限されたプレイヤーとゲームのデータを管理者レコードに保存する
注釈:本資料はAI技術を用いて翻訳されています。
概要
この記事では、以下の方法について説明します:
- AccelByte Gaming Services (AGS) Admin Portal で管理者レコードにアクセスする
- 管理者レコードを作成、変更、取得、削除する
前提条件
以下へのアクセスが必要です:
- AGS Admin Portal
- AGS Cloud Save API ドキュメント
Admin Portal で管理者レコードを管理する
Admin Records ページにアクセスする
-
Admin Portal のサイドバーで、Progression & Inventory > Cloud Save > Admin Records に移動します。
-
Admin Records ページで、表示したいレコードタイプに応じて、Game Records または Player Records タブを開きます。

新しい管理者レコードを作成する
プレイヤーまたはゲームデータを保存するための新しい管理者レコードを作成するには、以下の手順に従ってください:
-
Admin Portal のサイドバーで、Progression & Inventory > Cloud Save > Admin Records に移動します。
-
Admin Records ページで、レコードタイプに応じて、Game Records または Player Records タブを開きます。次に、+ Add record ボタンをクリックします。
- Admin Game Records: データは特定のユーザー ID に関連付けられず、ゲーム全体のデータを保存するために使用できますが、管理者とゲームサーバーのみがアクセスできます。
- Admin Player Records: データは特定のユーザー ID に関連付けられ、特定のユーザーデータを保存するために使用できますが、管理者とゲームサーバーのみがアクセスできます。
-
Add Record フォームで、必要な情報を入力します:
-
Game Records
- Key: Game Record キーを追加します。これはレコードの識別子です。
- JSON Configuration: JSON 形式で保存したいデータを追加します。

-
Player Records
- User ID: レコードに関連付けられるユーザーのユーザー ID を追加します。
- Key: Player Record キーを追加します。これはレコードの識別子です。
- JSON Configuration: JSON 形式で保存したいデータを追加します。

-
-
Add をクリックしてレコードを作成します。新しいレコードがリストに追加されます。
管理者レコードを変更する
AGS Admin Portal では、データの修正、監査などの手動アクションを実行したい場合に、管理者レコードを変更できます。
管理者レコードを変更するには、以下の手順に従ってください:
-
Admin Portal のサイドバーで、Progression & Inventory > Cloud Save > Admin Records に移動します。
-
Admin Records ページで、レコードタイプに応じて、Game Records または Player Records タブを開きます。
-
ゲームレコードの場合、リストから変更したいレコードを見つけるか、検索オプションを使用してゲームレコードキーでレコードを検索します。Action メニューの下にあるレコードの View ボタンをクリックして、詳細ページを開きます。
-
プレイヤーレコードの場合、プレイヤーのメールアドレスまたはユーザー名を使用してレコードを検索します。Action メニューの下にあるレコードの View ボタンをクリックして、詳細ページを開きます。
-
-
レコードの詳細ページで、フィールドまたはセクションの鉛筆または編集アイコンをクリックして、コンテンツを更新します。
-
変更を保存します。
管理者レコードを削除する
AGS Admin Portal では、必要に応じて管理者レコードを削除できます。
管理者レコードを削除するには、以下の手順に従ってください:
-
Admin Portal のサイドバーで、Progression & Inventory > Cloud Save > Admin Records に移動します。
-
Admin Records ページで、レコードタイプに応じて、Game Records または Player Records タブを開きます。
-
ゲームレコードの場合、リストから変更したいレコードを見つけるか、検索オプションを使用してゲームレコードキーでレコードを検索します。Action メニューの下にあるレコードの Delete ボタンをクリックします。確認メッセージが表示されます。
-
プレイヤーレコードの場合、プレイヤーのメールアドレスまたはユーザー名を使用してレコードを検索します。Action メニューの下にあるレコードの Delete ボタンをクリックします。確認メッセージが表示されます。
-
-
確認メッセージで Delete をクリックします。レコードはレコードリストから即座に削除されます。

Server SDK で管理者レコードを管理する
Server SDK を使用すると、以下のことができます:
- プレイヤーまたはゲームデータを保存するための新しい管理者レコードを作成する
- 管理者レコードを取得する
- 管理者レコードを変更する
- 管理者レコードを削除する
ゲームサーバー経由でプレイヤーまたはゲームデータを保存するための新しい管理者レコードを作成する
ゲームサーバーから何らかのアクションがトリガーされた後に動的に作成される管理者レコードを作成できます。この関数は、プレイヤーには制限されており、次のマッチでゲームサーバーが使用できる追加のマッチ情報を保存するために使用できます。
以下の方法で新しいレコードを作成してデータを保存できます:
管理者ゲームレコードを作成する
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = "SomeCloudSaveKey";
FJsonObject DataJson;
const FString gameId = FGuid::NewGuid().ToString();
DataJson.SetStringField("gameId", gameId);
DataJson.SetStringField("region", TEXT("ID"));
DataJson.SetStringField("language", TEXT("en"));
TArray<FString> Tags = {TEXT("Tags1"), TEXT("Tags2"};
ServerApiClient->ServerCloudSave.CreateAdminGameRecord(Key
, DataJson
, THandler<FAccelByteModelsAdminGameRecord>::CreateLambda([](const FAccelByteModelsAdminGameRecord& Response)
{
// Do something if CreateAdminGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if CreateAdminGameRecord fails
})
, Tags);
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "SomeCloudSaveKey";
string gameId = Guid.NewGuid().ToString();
Dictionary<string, object> dataJson = new Dictionary<string, object>
{
{"gameId", gameId }, {"region", "ID" }, {"language", "en" }
};
var optionalParams = new AdminRecordMetadataOptionalParams()
{
SetBy = RecordSetBy.SERVER
};
serverCloudSave.CreateAdminGameRecord(key, dataJson, optionalParams, result =>
{
if (result.IsError)
{
// Do something if CreateAdminGameRecord fails
Debug.Log($"Error CreateAdminGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if CreateAdminGameRecord succeeds
});
public class MyGameRecord : ModelsGameRecordRequest
{
[JsonPropertyName("gameId")]
public string GameId { get; set; } = "";
[JsonPropertyName("region")]
public string Region { get; set; } = "";
[JsonPropertyName("language")]
public string Language { get; set; } = "";
}
string key = "someKey";
var record = new MyGameRecord()
{
GameId = Guid.NewGuid().ToString().Replace("-", ""),
Language = "en",
Region = "US"
};
var response = sdk.Cloudsave.AdminRecord.AdminPostAdminGameRecordV1Op
.Execute(record, key, sdk.Namespace);
if (response != null)
{
// Do something with response when successful
}
adminRecordService := &cloudsave.AdminRecordService{
Client: factory.NewCloudsaveClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
key := "someKey"
body := map[string]interface{}{
"gameId": "5a7aab0c7e2147c4be9693083748634f",
"region": "US",
"language": "en",
}
namespace := "mygame"
input := &admin_record.AdminPostAdminGameRecordV1Params{
Body: map[string]interface{}{"foo": "bar"},
Key: key,
Namespace: integration.NamespaceTest,
}
result, err := adminRecordService.AdminPostAdminGameRecordV1Short(input)
@Builder
public class MyGameRecord extends ModelsGameRecordRequest {
@JsonProperty("gameId")
public String gameId;
@JsonProperty("region")
public String region;
@JsonProperty("language")
public String language;
}
...
final AdminRecord adminRecordWrapper = new AdminRecord(sdk);
String key = "graphicQuality";
String userId = "<user-id>";
var record = MyGameRecord.builder()
.gameId(UUID.randomUUID().toString().replace("-", ""))
.language("en")
.region("US")
.build();
ModelsGameRecordAdminResponse response;
try {
response = adminRecordWrapper.adminPostAdminGameRecordV1(AdminPostAdminGameRecordV1.builder()
.namespace("<namespace>")
.key(key)
.body(record)
.build());
} catch (Exception e) {
// Do something when failed
return;
}
if (response == null) {
// Null response from server
} else {
// Do something with response when successful
}
import accelbyte_py_sdk.api.cloudsave as cloudsave_service
import accelbyte_py_sdk.api.cloudsave.models as cloudsave_models
result, error = cloudsave_service.admin_post_admin_game_record_v1(
body=cloudsave_models.ModelsAdminGameRecordRequest.create(
{
"gameId": "****",
"region": "ID",
"language": "en",
"__META": {
"set_by": "SERVER"
}
}
),
key="SomeCloudSaveKey",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
一時的な管理者ゲームレコードを作成する
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = "SomeCloudSaveKey";
FJsonObject DataJson;
const FString gameId = FGuid::NewGuid().ToString();
DataJson.SetStringField("gameId", gameId);
DataJson.SetStringField("region", TEXT("ID"));
DataJson.SetStringField("language", TEXT("en"));
TArray<FString> Tags = {TEXT("Tags1"), TEXT("Tags2"};
FTTLConfig TTLConfig{};
TTLConfig.Action = EAccelByteTTLConfigAction::DELETE_RECORD;
TTLConfig.Expires_At = FDateTime::UtcNow() + FTimespan(0, 0, 5); // Will delete this record in the next five seconds
ServerApiClient->ServerCloudSave.CreateAdminGameRecord(Key
, DataJson
, THandler<FAccelByteModelsAdminGameRecord>::CreateLambda([](const FAccelByteModelsAdminGameRecord& Response)
{
// Do something if CreateAdminGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if CreateAdminGameRecord fails
})
, Tags
, TTLConfig);
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "SomeCloudSaveKey";
string gameId = Guid.NewGuid().ToString();
Dictionary<string, object> dataJson = new Dictionary<string, object>
{
{"gameId", gameId }, {"region", "ID" }, {"language", "en" }
};
var ttlConfig = new TTLConfig()
{
Action = TTLConfigAction.Delete,
ExpiresAt = DateTime.Now.AddSeconds(5) // Will delete this record in the next five sceonds
};
var optionalParams = new AdminRecordMetadataOptionalParams()
{
SetBy = RecordSetBy.CLIENT,
TTLConfig = ttlConfig
};
serverCloudSave.CreateAdminGameRecord(key, dataJson, optionalParams, result =>
{
if (result.IsError)
{
// Do something if CreateAdminGameRecord fails
Debug.Log($"Error CreateAdminGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if CreateAdminGameRecord succeeds
});
public class MyGameRecordWithMeta : ModelsGameRecordRequest
{
public class TTLConfig
{
[JsonPropertyName("action")]
public string Action { get; set; } = "";
[JsonPropertyName("expires_at")]
public string ExpiresAt { get; set; } = "";//ISO8601 date format
}
public class Meta
{
[JsonPropertyName("set_by")]
public string SetBy { get; set; } = "";
[JsonPropertyName("is_public")]
public bool IsPublic { get; set; } = false;
[JsonPropertyName("ttl_config")]
public TTLConfig TTL { get; set; } = new TTLConfig();
}
[JsonPropertyName("__META")]
public Meta RecordMeta { get; set; } = new Meta();
[JsonPropertyName("gameId")]
public string GameId { get; set; } = "";
[JsonPropertyName("region")]
public string Region { get; set; } = "";
[JsonPropertyName("language")]
public string Language { get; set; } = "";
}
string key = "someKey";
var record = new MyGameRecordWithMeta()
{
RecordMeta = new MyGameRecordWithMeta.Meta()
{
SetBy = "SERVER",
TTL = new MyGameRecordWithMeta.TTLConfig()
{
Action = "DELETE",
ExpiresAt = DateTime.Now.AddMinutes(5).ToString("O",CultureInfo.InvariantCulture) //expires in 5 minutes
}
},
GameId = Guid.NewGuid().ToString().Replace("-", ""),
Language = "en",
Region = "US"
};
var response = sdk.Cloudsave.AdminRecord.AdminPostAdminGameRecordV1Op
.Execute(record, key, sdk.Namespace);
if (response != null)
{
// Do something with response when successful
}
adminRecordService := &cloudsave.AdminRecordService{
Client: factory.NewCloudsaveClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
key := "someKey"
body := map[string]interface{}{
"gameId": "5a7aab0c7e2147c4be9693083748634f",
"region": "US",
"language": "en",
"__META": map[string]interface{}{
"ttl_config": map[string]interface{}{
"action":"DELETE",
"expires_at":"2025-12-31T08:00:00",
},
},
}
namespace := "mygame"
input := &admin_record.AdminPostAdminGameRecordV1Params{
Body: body,
Key: key,
Namespace: namespace,
}
result, err := adminRecordService.AdminPostAdminGameRecordV1Short(input)
@Builder
public class MyGameRecordWithMeta extends ModelsGameRecordRequest {
@Builder
public class TTLConfig {
@JsonProperty("action")
public String action;
@JsonProperty("expires_at")
public String expiresAt;
}
@Builder
public class Meta
{
@JsonProperty("set_by")
public String setBy;
@JsonProperty("is_public")
public boolean isPublic;
@JsonProperty("ttl_config")
public TTLConfig ttlConfig;
}
@JsonProperty("__META")
public Meta RecordMeta;
@JsonProperty("lastLocation")
public String lastLocation;
@JsonProperty("gameId")
public String gameId;
@JsonProperty("region")
public String region;
@JsonProperty("language")
public String language;
}
...
final AdminRecord adminRecordWrapper = new AdminRecord(sdk);
String key = "someKey";
var record = MyGameRecordWithMeta.builder()
.RecordMeta(MyGameRecordWithMeta.Meta.builder()
.setBy("SERVER")
.ttlConfig(MyGameRecordWithMeta.Meta.builder().ttlConfig.builder()
.action("DELETE")
.expiresAt(Instant.now().plusSeconds(5*60).atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)) //expires in 5 minutes
.build())
.build())
.gameId(UUID.randomUUID().toString().replace("-",""))
.language("en")
.region("US")
.build();
ModelsRecordAdminResponse response;
try {
response = adminRecordWrapper.adminPostAdminGameRecordV1(AdminPostAdminGameRecordV1.builder()
.namespace("<namespace>")
.key(key)
.body(record)
.build());
} catch (Exception e) {
// Do something when failed
return;
}
if (response == null) {
// Null response from server
} else {
// Do something with response when successful
}
from datetime import datetime, timedelta
import accelbyte_py_sdk.api.cloudsave as cloudsave_service
import accelbyte_py_sdk.api.cloudsave.models as cloudsave_models
result, error = cloudsave_service.admin_post_admin_game_record_v1(
body=cloudsave_models.ModelsAdminGameRecordRequest.create(
{
"gameId": "****",
"region": "ID",
"language": "en",
"__META": {
"set_by": "SERVER",
"ttl_config": {
"action": "DELETE",
"expires_at": (datetime.now() + timedelta(seconds=5)).isoformat(),
}
}
}
),
key="SomeCloudSaveKey",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
管理者プレイヤーレコードを作成する
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString UserId = "SomeUserId";
FString Key = "SomeCloudSaveKey";
FJsonObject DataJson;
const FString gameId = FGuid::NewGuid().ToString();
DataJson.SetStringField("gameId", gameId);
DataJson.SetStringField("region", TEXT("ID"));
DataJson.SetStringField("language", TEXT("en"));
ServerApiClient->ServerCloudSave.CreateAdminUserRecord(Key
, UserId
, DataJson
, THandler<FAccelByteModelsAdminUserRecord>::CreateLambda([](const FAccelByteModelsAdminUserRecord& Response)
{
// Do something if CreateAdminUserRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if CreateAdminUserRecord fails
}));
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string userId = "SomeUserId";
string key = "SomeCloudSaveKey";
string gameId = Guid.NewGuid().ToString();
Dictionary<string, object> dataJson = new Dictionary<string, object>
{
{"gameId", gameId }, {"region", "ID" }, {"language", "en" }
};
serverCloudSave.CreateAdminUserRecord(key, userId, dataJson, result =>
{
if (result.IsError)
{
// Do something if CreateAdminUserRecord fails
Debug.Log($"Error CreateAdminUserRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if CreateAdminUserRecord succeeds
});
string key = "someKey";
string userId = "<user-id>";
var record = new MyCharacterLocation()
{
RecordMeta = new MyCharacterLocation.Meta()
{
SetBy = "SERVER"
},
LastLocation = "x:2330,y:8710"
};
var response = sdk.Cloudsave.AdminPlayerRecord.AdminPostPlayerRecordHandlerV1Op
.Execute(record, key, sdk.Namespace, userId);
if (response != null)
{
// Do something with response when successful
}
adminPlayerRecordService := &cloudsave.AdminPlayerRecordService{
Client: factory.NewCloudsaveClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
key := "someKey"
body := map[string]interface{}{
"__META": map[string]interface{}{
"set_by":"SERVER",
},
"lastLocation":"x:2330,y:8710",
}
namespace := "mygame"
userId := "myuserid"
input := &admin_player_record.AdminPostPlayerRecordHandlerV1Params{
Body: body,
Key: key,
Namespace: namespace,
UserID: userId,
}
result, err := adminPlayerRecordService.AdminPostPlayerRecordHandlerV1Short(input)
final AdminPlayerRecord adminPlayerRecordWrapper = new AdminPlayerRecord(sdk);
String key = "characterLocation";
String userId = "<user-id>";
var record = MyCharacterLocation.builder()
.RecordMeta(MyCharacterLocation.Meta.builder()
.setBy("SERVER")
.build())
.lastLocation("x:2330,y:8710")
.build();
ModelsPlayerRecordResponse response;
try {
response = adminPlayerRecordWrapper.adminPostPlayerRecordHandlerV1(AdminPostPlayerRecordHandlerV1.builder()
.namespace("<namespace>")
.userId(userId)
.key(key)
.body(record)
.build());
} catch (Exception e) {
// Do something when failed
return;
}
if (response == null) {
// Null response from server
} else {
// Do something with response when successful
}
import accelbyte_py_sdk.api.cloudsave as cloudsave_service
import accelbyte_py_sdk.api.cloudsave.models as cloudsave_models
result, error = cloudsave_service.admin_post_player_record_handler_v1(
body=cloudsave_models.ModelsPlayerRecordRequest.create(
{
"gameId": "****",
"region": "ID",
"language": "en",
"__META": {
"set_by": "SERVER"
}
}
),
key="SomeCloudSaveKey",
user_id="********************************",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
ゲームサーバーから管理者レコードを取得する
以下の方法でゲームサーバーから管理者レコードを取得できます:
キーで特定の管理者ゲームレコードを取得する
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = "SomeCloudSaveKey";
ServerApiClient->ServerCloudSave.QueryAdminGameRecordsByKey(Key
, THandler<FAccelByteModelsAdminGameRecord>::CreateLambda([](const FAccelByteModelsAdminGameRecord& Response)
{
// Do something if QueryAdminGameRecordsByKey succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if QueryAdminGameRecordsByKey fails
}));
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "SomeCloudSaveKey";
serverCloudSave.QueryAdminGameRecordsByKey(key, result =>
{
if (result.IsError)
{
// Do something if QueryAdminGameRecordsByKey fails
Debug.Log($"Error QueryAdminGameRecordsByKey, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
// Do something if QueryAdminGameRecordsByKey succeeds
});
string key = "someKey";
var response = sdk.Cloudsave.AdminGameRecord.AdminGetGameRecordHandlerV1Op
.Execute(key, sdk.Namespace);
if (response != null)
{
// Do something with the data
}
adminGameRecordService := &cloudsave.AdminGameRecordService{
Client: factory.NewCloudsaveClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
key := "someKey"
namespace := "mygame"
input := &admin_game_record.AdminGetGameRecordHandlerV1Params{
Key: key,
Namespace: namespace,
}
result, err := adminGameRecordService.AdminGetGameRecordHandlerV1Short(input)
final AdminGameRecord adminGameRecordWrapper = new AdminGameRecord(sdk);
String key = "someKey";
ModelsGameRecordAdminResponse response;
try {
response = adminGameRecordWrapper.adminGetGameRecordHandlerV1(AdminGetGameRecordHandlerV1.builder()
.namespace("<namespace>")
.key(key)
.build());
} catch (Exception e) {
// Do something when failed
return;
}
if (response == null) {
// Null response from server
} else {
// Do something with the data
}
import accelbyte_py_sdk.api.cloudsave as cloudsave_service
import accelbyte_py_sdk.api.cloudsave.models as cloudsave_models
result, error = cloudsave_service.admin_get_game_record_handler_v1(
key="SomeCloudSaveKey",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
キーで特定のユーザー ID の特定の管理者プレイヤーレコードを取得する
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = "SomeCloudSaveKey";
FString UserId = "SomeUserId";
ServerApiClient->ServerCloudSave.QueryAdminUserRecordsByKey(Key
, UserId
, THandler<FAccelByteModelsAdminUserRecord>::CreateLambda([](const FAccelByteModelsAdminUserRecord& Response)
{
// Do something if QueryAdminUserRecordsByKey succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if QueryAdminUserRecordsByKey fails
}));
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string userId = "SomeUserId";
string key = "SomeCloudSaveKey";
serverCloudSave.QueryAdminUserRecordsByKey(key, userId, result =>
{
if (result.IsError)
{
// Do something if QueryAdminUserRecordsByKey fails
Debug.Log($"Error QueryAdminUserRecordsByKey, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if QueryAdminUserRecordsByKey succeeds
});
string key = "someKey";
string userId = "<user-id>";
var response = sdk.Cloudsave.AdminPlayerRecord.AdminGetPlayerRecordHandlerV1Op
.Execute(key, sdk.Namespace, userId);
if (response != null)
{
// Do something with the data
}
adminPlayerRecordService := &cloudsave.AdminPlayerRecordService{
Client: factory.NewCloudsaveClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
key := "someKey"
namespace := "mygame"
userId := "myuserid"
input := &admin_player_record.AdminGetPlayerRecordHandlerV1Params{
Key: key,
Namespace: namespace,
UserID: userId,
}
result, err := adminPlayerRecordService.AdminGetPlayerRecordHandlerV1Short(input)
final AdminPlayerRecord adminPlayerRecordWrapper = new AdminPlayerRecord(sdk);
String key = "someKey";
String userId = "<user-id>";
ModelsPlayerRecordResponse response;
try {
response = adminPlayerRecordWrapper.adminGetPlayerRecordHandlerV1(AdminGetPlayerRecordHandlerV1.builder()
.namespace("<namespace>")
.userId(userId)
.key(key)
.build());
} catch (Exception e) {
// Do something when failed
return;
}
if (response == null) {
// Null response from server
} else {
// Do something with the data
}
import accelbyte_py_sdk.api.cloudsave as cloudsave_service
import accelbyte_py_sdk.api.cloudsave.models as cloudsave_models
result, error = cloudsave_service.admin_get_player_record_handler_v1(
key="SomeCloudSaveKey",
user_id="********************************",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
ゲームサーバーから管理者レコードを変更する
ゲームサーバーから管理者レコード内のデータを変更または更新するには、以下の手順に従ってください:
管理者ゲームレコードを変更する
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = "SomeCloudSaveKey";
FJsonObject DataJson;
const FString gameId = FGuid::NewGuid().ToString();
DataJson.SetStringField("gameId", gameId);
DataJson.SetStringField("region", TEXT("ES"));
DataJson.SetStringField("language", TEXT("es"));
ServerApiClient->ServerCloudSave.ReplaceAdminGameRecord(Key
, DataJson
, THandler<FAccelByteModelsAdminGameRecord>::CreateLambda([](const FAccelByteModelsAdminGameRecord& Response)
{
// Do something if ReplaceAdminGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if ReplaceAdminGameRecord fails
}));
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "SomeCloudSaveKey";
string gameId = Guid.NewGuid().ToString();
Dictionary<string, object> dataJson = new Dictionary<string, object>
{
{"gameId", gameId }, {"region", "ES" }, {"language", "es" }
};
var optionalParams = new GameRecordMetadataOptionalParams()
{
SetBy = RecordSetBy.SERVER,
};
serverCloudSave.ReplaceAdminGameRecord(key, dataJson, optionalParams, result =>
{
if (result.IsError)
{
// Do something if ReplaceAdminGameRecord fails
Debug.Log($"Error ReplaceAdminGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if ReplaceAdminGameRecord succeeds
});
string key = "someKey";
var record = new MyGameRecord()
{
GameId = Guid.NewGuid().ToString().Replace("-", ""),
Language = "en",
Region = "US"
};
var response = sdk.Cloudsave.AdminGameRecord.AdminPutGameRecordHandlerV1Op
.Execute(record, key, sdk.Namespace);
if (response != null)
{
// Do something with response when successful
}
adminGameRecordService := &cloudsave.AdminGameRecordService{
Client: factory.NewCloudsaveClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
key, _ := cmd.Flags().GetString("key")
body := map[string]interface{}{
"gameId": "5a7aab0c7e2147c4be9693083748634f",
"region": "US",
"language": "en",
}
namespace := "mygame"
input := &admin_game_record.AdminPutGameRecordHandlerV1Params{
Body: body,
Key: key,
Namespace: namespace,
}
result, err := adminGameRecordService.AdminPutGameRecordHandlerV1Short(input)
final AdminGameRecord adminGameRecordWrapper = new AdminGameRecord(sdk);
String key = "someKey";
var record = MyGameRecord.builder()
.gameId(UUID.randomUUID().toString().replace("-", ""))
.language("en")
.region("US")
.build();
ModelsGameRecordAdminResponse response;
try {
response = adminGameRecordWrapper.adminPutGameRecordHandlerV1(AdminPutGameRecordHandlerV1.builder()
.namespace("<namespace>")
.key(key)
.body(record)
.build());
} catch (Exception e) {
// Do something when failed
return;
}
if (response == null) {
// Null response from server
} else {
// Do something with response when successful
}
import accelbyte_py_sdk.api.cloudsave as cloudsave_service
import accelbyte_py_sdk.api.cloudsave.models as cloudsave_models
result, error = cloudsave_service.admin_put_game_record_handler_v1(
body=cloudsave_models.ModelsGameRecordRequest.create(
{
"gameId": "****",
"region": "ES",
"language": "es",
"__META": {
"set_by": "SERVER"
}
}
),
key="SomeCloudSaveKey",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
管理者ゲームレコードを一時的なものに変更する
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = "SomeCloudSaveKey";
FJsonObject DataJson;
const FString gameId = FGuid::NewGuid().ToString();
DataJson.SetStringField("gameId", gameId);
DataJson.SetStringField("region", TEXT("ES"));
DataJson.SetStringField("language", TEXT("es"));
FTTLConfig TTLConfig{};
TTLConfig.Action = EAccelByteTTLConfigAction::DELETE_RECORD;
TTLConfig.Expires_At = FDateTime::UtcNow() + FTimespan(0, 0, 5); // Will delete this record in the next five seconds
ServerApiClient->ServerCloudSave.ReplaceAdminGameRecord(Key
, DataJson
, THandler<FAccelByteModelsAdminGameRecord>::CreateLambda([](const FAccelByteModelsAdminGameRecord& Response)
{
// Do something if ReplaceAdminGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if ReplaceAdminGameRecord fails
})
, TTLConfig);
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "SomeCloudSaveKey";
string gameId = Guid.NewGuid().ToString();
Dictionary<string, object> dataJson = new Dictionary<string, object>
{
{"gameId", gameId }, {"region", "ES" }, {"language", "es" }
};
var ttlConfig = new TTLConfig()
{
Action = TTLConfigAction.Delete,
ExpiresAt = DateTime.Now.AddSeconds(5) // Will delete this record in the next five sceonds
};
var optionalParams = new GameRecordMetadataOptionalParams()
{
TTLConfig = ttlConfig
SetBy = RecordSetBy.SERVER,
};
serverCloudSave.ReplaceAdminGameRecord(key, dataJson, optionalParams, result =>
{
if (result.IsError)
{
// Do something if ReplaceAdminGameRecord fails
Debug.Log($"Error ReplaceAdminGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if ReplaceAdminGameRecord succeeds
});
string key = "someKey";
var record = new MyGameRecordWithMeta()
{
RecordMeta = new MyGameRecordWithMeta.Meta()
{
SetBy = "SERVER",
TTL = new MyGameRecordWithMeta.TTLConfig()
{
Action = "DELETE",
ExpiresAt = DateTime.Now.AddMinutes(5).ToString("O", CultureInfo.InvariantCulture) //expires in 5 minutes
}
},
GameId = Guid.NewGuid().ToString().Replace("-", ""),
Language = "en",
Region = "US"
};
var response = sdk.Cloudsave.AdminGameRecord.AdminPutGameRecordHandlerV1Op
.Execute(record, key, sdk.Namespace);
if (response != null)
{
// Do something with response when successful
}
adminGameRecordService := &cloudsave.AdminGameRecordService{
Client: factory.NewCloudsaveClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
key, _ := cmd.Flags().GetString("key")
body := map[string]interface{}{
"gameId": "5a7aab0c7e2147c4be9693083748634f",
"region": "US",
"language": "en",
"__META": map[string]interface{}{
"ttl_config": map[string]interface{}{
"action":"DELETE",
"expires_at":"2025-12-31T08:00:00",
},
},
}
namespace := "mygame"
input := &admin_game_record.AdminPutGameRecordHandlerV1Params{
Body: body,
Key: key,
Namespace: namespace,
}
result, err := adminGameRecordService.AdminPutGameRecordHandlerV1Short(input)
final AdminGameRecord adminGameRecordWrapper = new AdminGameRecord(sdk);
String key = "someKey";
var record = MyGameRecordWithMeta.builder()
.RecordMeta(MyGameRecordWithMeta.Meta.builder()
.setBy("SERVER")
.ttlConfig(MyGameRecordWithMeta.Meta.builder().ttlConfig.builder()
.action("DELETE")
.expiresAt(Instant.now().plusSeconds(5*60).atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)) //expires in 5 minutes
.build())
.build())
.gameId(UUID.randomUUID().toString().replace("-",""))
.language("en")
.region("US")
.build();
ModelsGameRecordAdminResponse response;
try {
response = adminGameRecordWrapper.adminPutGameRecordHandlerV1(AdminPutGameRecordHandlerV1.builder()
.namespace("<namespace>")
.key(key)
.body(record)
.build());
} catch (Exception e) {
// Do something when failed
return;
}
if (response == null) {
// Null response from server
} else {
// Do something with response when successful
}
import accelbyte_py_sdk.api.cloudsave as cloudsave_service
import accelbyte_py_sdk.api.cloudsave.models as cloudsave_models
result, error = cloudsave_service.admin_put_game_record_handler_v1(
body=cloudsave_models.ModelsGameRecordRequest.create(
{
"gameId": "****",
"region": "ES",
"language": "es",
"__META": {
"set_by": "SERVER"
}
}
),
key="SomeCloudSaveKey",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
管理者プレイヤーレコードを変更する
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = "SomeCloudSaveKey";
FString UserId = "SomeUserId";
FJsonObject DataJson;
const FString gameId = FGuid::NewGuid().ToString();
DataJson.SetStringField("gameId", gameId);
DataJson.SetStringField("region", TEXT("ES"));
DataJson.SetStringField("language", TEXT("es"));
ServerApiClient->ServerCloudSave.ReplaceAdminUserRecord(Key
, UserId
, DataJson
, THandler<FAccelByteModelsAdminUserRecord>::CreateLambda([](const FAccelByteModelsAdminUserRecord& Response)
{
// Do something if ReplaceAdminUserRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if ReplaceAdminUserRecord fails
}));
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string userId = "SomeUserId";
string key = "SomeCloudSaveKey";
string gameId = Guid.NewGuid().ToString();
Dictionary<string, object> dataJson = new Dictionary<string, object>
{
{"gameId", gameId }, {"region", "ES" }, {"language", "es" }
};
serverCloudSave.ReplaceAdminUserRecord(key, userId, dataJson, result =>
{
if (result.IsError)
{
// Do something if ReplaceAdminUserRecord fails
Debug.Log($"Error ReplaceAdminUserRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if ReplaceAdminUserRecord succeeds
});
string key = "someKey";
string userId = "<user-id>";
var record = new MyGraphicQuality()
{
Textures = 2,
Shadow = 2,
Lighting = 2,
PostProcessing = 2
};
var response = sdk.Cloudsave.AdminPlayerRecord.AdminPutPlayerRecordHandlerV1Op
.Execute(record, key, sdk.Namespace, userId);
if (response != null)
{
// Do something with response when successful
}
adminPlayerRecordService := &cloudsave.AdminPlayerRecordService{
Client: factory.NewCloudsaveClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
key := "someKey"
body := map[string]interface{}{
"textures": 2,
"shadow": 2,
"lighting": 2,
"post-precessing": 2,
}
namespace := "mygame"
userId := "myuserid"
input := &admin_player_record.AdminPutPlayerRecordHandlerV1Params{
Body: body,
Key: key,
Namespace: namespace,
UserID: userId,
}
result, err := adminPlayerRecordService.AdminPutPlayerRecordHandlerV1Short(input)
final AdminPlayerRecord adminPlayerRecordWrapper = new AdminPlayerRecord(sdk);
String key = "graphicQuality";
String userId = "<user-id>";
var record = MyGraphicQuality.builder()
.textures(2)
.shadow(2)
.lighting(2)
.postProcessing(2)
.build();
ModelsPlayerRecordResponse response;
try {
response = adminPlayerRecordWrapper.adminPutPlayerRecordHandlerV1(AdminPutPlayerRecordHandlerV1.builder()
.namespace("<namespace>")
.userId(userId)
.key(key)
.body(record)
.build());
} catch (Exception e) {
// Do something when failed
return;
}
if (response == null) {
// Null response from server
} else {
// Do something with response when successful
}
import accelbyte_py_sdk.api.cloudsave as cloudsave_service
import accelbyte_py_sdk.api.cloudsave.models as cloudsave_models
result, error = cloudsave_service.admin_put_player_record_handler_v1(
body=cloudsave_models.ModelsPlayerRecordRequest.create(
{
"gameId": "****",
"region": "ES",
"language": "es",
"__META": {
"set_by": "SERVER",
}
}
),
key="SomeCloudSaveKey",
user_id="********************************",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
ゲームサーバーから管理者レコードを削除する
ゲームサーバーから管理者レコードを削除するには、以下の手順に従ってください:
管理者ゲームレコードを削除する
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = "SomeCloudSaveKey";
ServerApiClient->ServerCloudSave.DeleteAdminGameRecord(Key
, FVoidHandler::CreateLambda([]()
{
// Do something if DeleteAdminGameRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if DeleteAdminGameRecord fails
}));
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string key = "SomeCloudSaveKey";
serverCloudSave.DeleteAdminGameRecord(key, result =>
{
if (result.IsError)
{
// Do something if DeleteAdminGameRecord fails
Debug.Log($"Error DeleteAdminGameRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if DeleteAdminGameRecord succeeds
});
string key = "someKey";
sdk.Cloudsave.AdminGameRecord.AdminDeleteGameRecordHandlerV1Op
.Execute(key, sdk.Namespace);
adminPlayerRecordService := &cloudsave.AdminGameRecordService{
Client: factory.NewCloudsaveClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
key := "someKey"
namespace := "mygame"
input := &admin_player_record.AdminDeleteGameRecordHandlerV1Params{
Key: key,
Namespace: namespace,
}
result, err := adminPlayerRecordService.AdminDeleteGameRecordHandlerV1Short(input)
final AdminGameRecord adminGameRecordWrapper = new AdminGameRecord(sdk);
String key = "someKey";
try {
adminGameRecordWrapper.adminDeleteGameRecordHandlerV1(AdminDeleteGameRecordHandlerV1.builder()
.namespace("<namespace>")
.key(key)
.build());
} catch (Exception e) {
// Do something when failed
return;
}
import accelbyte_py_sdk.api.cloudsave as cloudsave_service
import accelbyte_py_sdk.api.cloudsave.models as cloudsave_models
result, error = cloudsave_service.admin_delete_game_record_handler_v1(
key="SomeCloudSaveKey",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
管理者プレイヤーレコードを削除する
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FServerApiClientPtr ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
FString Key = "SomeCloudSaveKey";
FString UserId = "SomeUserId";
ServerApiClient->ServerCloudSave.DeleteAdminUserRecord(Key
, UserId
, FVoidHandler::CreateLambda([]()
{
// Do something if DeleteAdminUserRecord succeeds
})
, FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if DeleteAdminUserRecord fails
}));
ServerCloudSave serverCloudSave = AccelByteSDK.GetServerRegistry().GetApi().GetCloudSave();
string userId = "SomeUserId";
string key = "SomeCloudSaveKey";
serverCloudSave.DeleteAdminUserRecord(key, userId, result =>
{
if (result.IsError)
{
// Do something if DeleteAdminUserRecord fails
Debug.Log($"Error DeleteAdminUserRecord, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if DeleteAdminUserRecord succeeds
});
string key = "characterLocation";
string userId = "<user-id>";
sdk.Cloudsave.AdminPlayerRecord.AdminDeletePlayerRecordHandlerV1Op
.Execute(key, sdk.Namespace, userId);
adminPlayerRecordService := &cloudsave.AdminPlayerRecordService{
Client: factory.NewCloudsaveClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
key := "characterLocation"
namespace := "mygame"
userId := "myuserid"
input := &admin_player_record.AdminDeletePlayerRecordHandlerV1Params{
Key: key,
Namespace: namespace,
UserID: userId,
}
err := adminPlayerRecordService.AdminDeletePlayerRecordHandlerV1Short(input)
AdminPlayerRecord adminPlayerRecordWrapper = new AdminPlayerRecord(sdk);
String key = "playerInformation";
String userId = "<user-id>";
try {
adminPlayerRecordWrapper.adminDeletePlayerRecordHandlerV1(AdminDeletePlayerRecordHandlerV1.builder()
.namespace("<namespace>")
.userId(userId)
.key(key)
.build());
} catch (Exception e) {
// Do something when failed
return;
}
import accelbyte_py_sdk.api.cloudsave as cloudsave_service
import accelbyte_py_sdk.api.cloudsave.models as cloudsave_models
result, error = cloudsave_service.admin_delete_player_record_handler_v1(
key="SomeCloudSaveKey",
user_id="********************************",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)