START
Update Notes
If you call BACKND Function 0.1.2 or an earlier version (released before December 28, 2021) from SDK 5.9.0,
the methods called from within the function will result in an error and not work properly.
You must upgrade BACKND Function to 0.2.0 before upgrading the SDK.
If you are updating from SDK 5.6.0 or an earlier version, all BACKND method calls may result in the 410 GoneResourceException error.
The error will not appear after relogging in, so please configure that the following login methods can be called:
- Backend.BMember.CustomLogin
- Backend.BMember.GuestLogin
- Backend.BMember.AuthorizeFederation
- Backend.BMember.LoginWithTheBackendToken
- Backend.BMember.RefreshTheBackendToken
From SDK 5.8.0, if the 403 Forbidden error occurs due to excessive requests, the local restricts sending further requests to the server for 5 minutes and 30 seconds; if a function is called during this time, the following error is returned:
statusCode : 403
errorCode : Forbidden
message : 403 Forbidden by Local
If you are using the previous messages to process the 403 error, use errorCode or the IsTooManyRequestError method.
When using compression data in SDK version 5.11.0 - 5.11.3, loading data with 0 added to the back of inDate will cause a fatal error that changes the inDate value.
If you wish to use compression data, please do so in SDK 5.11.4 or later versions.
5.15.0
InsertLog method deleted
The deprecated InsertLog method has been deleted. Please use InsertLogV2.
// Game log method available for 5.15.0 or below
// Backend.GameLog.InsertLog("logType", param);
// Backend.GameLog.InsertLogV2("logType", param);
// Game log method available for 5.15.0 or later (InsertLog deleted)
Backend.GameLog.InsertLogV2("logType", param);
Bug fixes
[Param] Fixed the error where LitJson.JsonData did not enter properly when added to Param
The issue where an error occurred in GameData and PlayerData methods when Param.Add(LitJson.JsonData) was called has been fixed.
[Chart management] Fixed the error that occurred when contentJson was called among the return values of Backend.CDN.Content.Get
The error where the loading process did not stop when contentJson was called among the return values of Backend.CDN.Content.Get has been fixed.
[Probability management] Fixed the error that occurred when contentJson was called among the return values of Backend.CDN.Probability.Get
The error where the loading process did not stop when contentJson was called among the return values of Backend.CDN.Probability.Get has been fixed.
[BACKND Match] Fixed the issue where certain values could not be loaded from each response handler
- The issue where OldSuperUserRecord and NewSuperUserRecord could not be properly loaded from MatchInGameChangeSuperGamerEventArg, the response value of the OnChangeSuperGamer handler, has been fixed. (Occurred since 5.12.0)
- The issue where GameRecord could not be properly loaded from MatchInGameSessionEventArgs, the response value of the OnMatchInGameAccess handler, has been fixed. (Occurred since 5.12.0)
- The issue where InviteUserInfo could not be properly loaded from MatchMakingInvitedRoomEventArgs, the response value of the OnMatchMakingRoomSomeoneInvited handler, has been fixed. (Occurred since 5.12.0)
- The issue where UserInfo could not be properly loaded from MatchMakingGamerInfoInRoomEventArgs, the response value of the OnMatchMakingRoomJoin handler, has been fixed. (Occurred since 5.12.0)
- The issue where UserInfo could not be properly loaded from MatchMakingGamerInfoListInRoomEventArgs, the response value of the OnMatchMakingRoomUserList handler, has been fixed. (Occurred since 5.12.0)
5.14.1
Fixed the issue where the location information could not be read from iOS
The issue where the location information could not be read from iOS since BACKND SDK 5.12.0 has been fixed.
Rolled back UpdateLocationProperties method deletion
The Backend.LocationProperties.UpdateLocationProperties() method that was deleted from BACKND SDK 5.12.0 has been rolled back.
5.14.0
Group function added
The function of adding users to certain groups has been added.
Users belonging to a group can compete against each other on that group's leaderboard.
BackEnd.Group.BackendGroupReturnObject tableBro = Backend.Group.Table.Get();
BackEnd.Group.GroupItem group = tableBro.GetGroupList()[0];
var bro = Backend.Group.Update(group.groupUuid, group.groupName);
if(bro.IsSuccess() == false)
{
Debug.LogError(bro);
}
Leaderboard function added
For the newly added leaderboard, leaderboards can be updated according to the group.
In the case of the URank function, even if a user belongs to a group, when the leaderboard update function is called, it will be updated in the NULL group's leaderboard.
- Leaderboard that is not grouped can be registered without issues.
Therefore, if you want to use the leaderboard for the group you belong to, you need to switch to the Leaderboard method.
For more details, refer to Differences with Rankings.
Param param = new Param();
param.Add("score", i);
param.Add("extraData", "additional info");
Backend.Leaderboard.User.UpdateMyDataAndRefreshLeaderboard("leaderboard uuid", "table name", "row inDate to be updated", param);
Columns added to the return values of the ranking configuration retrieval function
For leaderboards created after September 24, 2024, Backend.URank.User.GetRankTableList() column will be added to the return values of the function.
Return value of Backend.URank.User.GetRankTableList()
{
"rows": [
{
...
// Reward mail title set in the console (output as a fallback)
"rewardPostTitle": {
"S": "Mail reward title"
},
// Name of the column used as ranking score
"column" : {
"S":"score"
},
// Name of the column used as an additional field of the ranking (exists only when the additional field is registered)
}
// and etc...
]
}
Column added to the return values of the ranking mail loading function
For ranking rewards sent from leaderboards created after September 24, 2024, Backend.UPost.GetPostList() column will be added to the return values of the function.
"postTitle": {
"ko": "Achieved best score rank!",
"en": "You Best Score!",
"fallback": "en"
},
Return value of Backend.UPost.GetPostList()
{
"postList": [
{
"rankType": "guild",
"content": "All Random All Mid ranking (21 - 40)",",
"expirationDate": "2021-12-26T19:03:44.163Z",
"reservationDate": "2021-12-19T19:03:44.163Z",
"nickname": "User2",
"inDate": "2021-12-19T19:03:44.163Z",
"title": "All Random All Mid ranking (21 - 40)",",
"sentDate": "2021-12-19T19:03:44.163Z",
// ======================================
// The following column has been added.
"postTitle": {
"ko": "Achieved best score rank!",
"en": "You Best Score!",
"fallback": "en"
},
// =====================================
"items": [
{
"item": {
"itemID": "i102",
"itemName": "Item2",
"hpPower": "10",
"aabab": "2"
},
"itemCount": 1,
"chartName": "Ranking rewards chart2"
}
]
}
]
}
Game information management error fixes
Fixed the error where the callback for the Insert, Update, and transaction functions is called twice when an Exception occurs in the callback
The error where the callback for the Insert, Update, and transaction functions is called twice when an Exception occurs in the callback has been fixed.
Fixed the issue where a "Malformed URL" error occurs when calling the Get function using a select statement on devices with iOS 16 or higher
The issue where a "Malformed URL" error occurs when calling the Get function using a select statement on devices with iOS 16 or higher has been fixed.
Fixed the error where exceptions occur in GetWriteCapacity and GetReadCapacity during transaction calls
The error that occurred when calling GetWriteCapacity and GetReadCapacity during transaction calls for PlayerData has been fixed.
Fixed the error where a "bad signature" occurs when calling CheckUserInBackend
The error causing a "bad signature" when calling CheckUserInBackend on iOS has been fixed.
[BACKND Function] Fixed the issue where an error occurs when calling the backend function from an EXE file built for Windows
The error that caused a "bad app id" issue when calling the backend function from an EXE file built for Windows has been fixed.
5.13.0
Batch download feature added for chart files and probability files
The feature to bulk load chart files and probability files has been added.
private void GetProgress(int totalCount, int remainCount, string fileName)
{
Debug.Log("totalCount : " + totalCount + " remainCount : " + remainCount + " fileName : " + fileName);
}
public void GetContentListTestAsync()
{
Backend.CDN.Content.Table.Get(bro =>
{
Backend.CDN.Content.Get(bro.GetContentTableItemList(), GetProgress, bro2 =>
{
if(bro.IsSuccess()) {
foreach(BackEnd.Content.ContentItem item in bro2.GetContentList)
{
Debug.Log(item);
}
}
});
});
}
IEnumerator GetContentListTestAsyncIEnumerator()
{
BackEnd.Content.BackendContentTableReturnObject callback = null;
yield return new WaitUntil(() => callback != null);
if(callback.IsSuccess() == false) {
Debug.LogError(callback);
yeild break;
}
BackEnd.Content.BackendContentReturnObject callback2 = null;
}
Receipt verification price added
You can enter the price and currency during receipt verification.
The price and currency will be available for verification in the console through a future update.
Backend.Receipt.IsValidateGooglePurchase(args.purchasedProduct.receipt, "receiptDescription", isSubScription, args.purchasedProduct.metadata.localizedPrice, args.purchasedProduct.metadata.isoCurrencyCode);
5.12.1
Communication library changed
The communication library of the BACKND has been changed from HttpClient to UnityWebRequest.
All requests are now executed on Unity's main thread.
If there are existing logics that use external threads, they may not function properly.
Task use disabled
You will not be able to call BACKND functions within a Task, such as when invoking synchronous methods from an external thread as shown below.
Task.Run( () => {
Backend.BMember.CustomSignUp("user1", "user1");
Backend.BMember.UpdateNickname("user1");
});
async deleted from asynchronous methods
The async modifier has been removed from all asynchronous methods.
AsyncPoll deleted
BACKND SDK has removed the Backend.AsyncPoll feature, as callbacks will no longer be returned from external threads when calling asynchronous methods.
void Update() {
// if (Backend.IsInitialized) {
// Backend.AsyncPoll();
// }
}
Backend.Initialize parameters changed
As external threads will no longer be called, the following parameters have been removed.
- useAsyncPoll: Indicates whether to process asynchronous method calls in external threads on the BACKND.
- autoLocationToAsync: Indicates whether to retrieve country information asynchronously (can be selected in the inspector).
// Below 5.12.1
// public static BackendReturnObject Initialize(bool useAsyncPoll = false, bool autoLocationToAsync = true)
// public async static void InitializeAsync(bool useAsyncPoll, bool autoLocationToAsync, BackendCallback callback)
// Above 5.12.1
public static BackendReturnObject Initialize()
public static void InitializeAsync(BackendCallback callback)
Error handler poll method deleted
The BACKND SDK no longer returns callbacks from external threads when calling asynchronous methods. As a result, the error handler that was previously detected in external threads will now be detected in the main thread, leading to the deletion of the Poll() and InitializePoll methods.
void Start() {
// Backend.ErrorHandler.InitializePoll(true);
}
void Update() {
// if (Backend.ErrorHandler.UseAsyncQueuePoll) {
// Backend.ErrorHandler.Poll();
// }
}
dll files changed
The dll files have been changed. When updating the SDK, if you wish to delete any files that are no longer in use, delete the TheBackend folder and then import the new version.
The project settings values located in the TheBackend > Resources folder will also be deleted, therefore re-enter the clientAppId.
Deleted files
- TheBackend.iOS.dll
- BackendIOSPushNotification.mm
- XCodeBuildForPushNotification.cs
- TheBackend.iOS.dll
- TheBackendHashKeySettings.dll
- SendQueueMgr.cs
Added file
- WebSocket4Net.dll
5.11.9
5.12.1
BackendManager object created when calling the initialization function
When calling Backend.Initialize(), DontDestroyOnLoad BackendManager game object is created.
Be aware that if the object is destroyed or if any scripts associated with the BackendManager are deleted, communication will no longer occur.
Fixed initialization failure error when the name of the Windows PC is in Korean
The error that caused initialization and BACKND function calls to fail when the name of the Windows PC was in Korean has been fixed.
Push message settings
Automatic device token retrieval feature deleted
The PutDeviceToken method, which does not have any parameters, has been removed.
You must now provide a device token when using the PutDeviceToken method.
Deleted methods
Backend.Android.PutDeviceToken();
Backend.iOS.PutDeviceToken();
Substitute methods
string token = "";
Backend.Android.PutDeviceToken(token);
Backend.iOS.PutDeviceToken(token);
Game information management
Multiplication and division functions for game information calculations removed
The multiplication and division functions have been removed from the game information operations in game information management.
The division and multiplication functionalities have been removed from the GameInfoOperator enum used in AddCalculation.
In the GameInfoOperator enum used in AddCalculation, only addition and subtraction are available for selection.
Param updateParam = new Param();
updateParam.AddCalculation("atk", GameInfoOperator.addition, 10); // Add 10 to atk of the existing data
updateParam.AddCalculation("def", GameInfoOperator.subtraction, 20); // Subtract 20 from the def of the existing data
Backend.GameData.UpdateWithCalculationV2("tableName", inDate, Backend.UserInDate, updateParam);
Old version chat
Old version chat deleted
The old version of the chat (Backend.Chat) feature has been deleted.
// Backend.Chat.OnJoinChannel = (JoinChannelEventArgs args) => {
// // This method has been deleted.
// }
User management
Error sanction details added for user blocking and device blocking
When blocking a user or a device, you will now be able to view more detailed information compared to the previous errors.
When the user is blocked
StatusCode : 403
ErrorCode : The reason for blocking entered in the console
Message : Forbidden blocked user, forbidden blocked user
Code : 403100
ErrorMessage : 757fe1d0-03af-11ef-bda5-fd24a5f141c1 blocked until 2024-11-29T12:41:19.465Z
ErrorData : {
uuid : 757fe1d0-03af-11ef-bda5-fd24a5f141c1
nickname : Nickname
blockReason : The reason for blocking entered in the console
blockDate : 2024-11-29T12:41:19.465Z
}
If the user is blocked, you can check the following error data.
- Code : Unique ID for the error case
- ErrorMessage : Details of that error
- ErrorData : Detailed data related to the error (If nickname and blockReason do not exist, data cannot be parsed.)
Error use example
var callback = Backend.BMember.CustomLogin("a0", "a0");
Debug.Log(
if (callback.GetMessage().StartsWith("Forbidden blocked user"))
{
StringBuilder returnString = new StringBuilder();
returnString.Append("StatusCode : ").Append(callback.GetStatusCode()).AppendLine();
returnString.Append("ErrorCode : ").Append(callback.GetErrorCode()).AppendLine();
returnString.Append("Message : ").Append(callback.GetMessage()).AppendLine();
returnString.Append("Code : ").Append(callback.GetCode()).AppendLine();
returnString.Append("ErrorMessage : ").Append(callback.GetErrorMessage()).AppendLine();
returnString.Append("errorData(uuid) : ").Append(callback.GetErrorData()["uuid"].ToString()).AppendLine();
if (callback.GetErrorData().ContainsKey("nickname"))
{
returnString.Append("errorData(nickname) : ").Append(callback.GetErrorData()?["nickname"].ToString()).AppendLine();
}
if (callback.GetErrorData().ContainsKey("blockReason"))
{
returnString.Append("errorData(blockReason) : ").Append(callback.GetErrorData()?["blockReason"].ToString()).AppendLine();
}
returnString.Append("errorData(blockDate) : ").Append(callback.GetErrorData()["blockDate"].ToString()).AppendLine();
Debug.Log(returnString.ToString());
}
)
When the device is blocked
StatusCode : 403
ErrorCode : ForbiddenException
Message : Forbidden blocked device, forbidden blocked device
Code : 403100
ErrorMessage : 20240426092307fc5ac478c is blocked
errorData : {
deviceUniqueId : 20240426092307fc5ac478c
}
If the device is blocked, you can check the following error data.
- Code : Unique ID for the error case
- ErrorMessage : Details of that error
- ErrorData : Detailed data related to the error
Error use example
var callback = Backend.BMember.CustomSignUp("a0", "a0");
if (callback.IsDeviceBlockError())
{
StringBuilder returnString = new StringBuilder();
returnString.Append("StatusCode : ").Append(callback.GetStatusCode()).AppendLine();
returnString.Append("ErrorCode : ").Append(callback.GetErrorCode()).AppendLine();
returnString.Append("Message : ").Append(callback.GetMessage()).AppendLine();
returnString.Append("Code : ").Append(callback.GetCode()).AppendLine();
returnString.Append("ErrorMessage : ").Append(callback.GetErrorMessage()).AppendLine();
returnString.Append("errorData(deviceUniqueId)").Append(callback.GetErrorData()["deviceUniqueId"].ToString()).AppendLine();
Debug.Log(returnString.ToString());
}
[Version management] Version management feature added for ONE store
A feature to retrieve versions based on parameters has been added to version management.
Backend.Utils.GetLatestVersion(VersionInfo.GooglePlayStore);
Backend.Utils.GetLatestVersion(VersionInfo.AppStore);
Backend.Utils.GetLatestVersion(VersionInfo.OneStore);
[5.12.1] Fixed OnOtherDeviceLoginDetectedError error
The error where OnOtherDeviceLoginDetectedError malfunctioned when calling asynchronous functions multiple times after 24 hours of logging in has been fixed.
[5.12.1] Fixed the initialization failure error when the iOS device language is set to Turkish
The error that caused the initialization function call to fail when the iOS device was set to Turkish has been fixed.