Skip to main content
Version: 5.14.1

START

업데이트 상세 내역

뒤끝펑션 0.1.2 버전 비호환 문제

SDK 5.9.0 버전에서 0.1.2 이하(2021-12-28 이전에 배포된 펑션) 버전의 뒤끝펑션을 호출할 경우,
펑션 내부에서 호출하는 함수에 에러가 발생하여 정상적으로 작동하지 않게 됩니다.

꼭 SDK를 업그레이드하기 전에 펑션을 0.2.0 버전으로 업그레이드하여 사용해주세요.

SDK 5.6.0 이하 업데이트 후 410 에러 발생 문제

SDK 5.6.0 이하 버전에서 현재 버전으로 업데이트를 할 경우, 모든 뒤끝 함수 호출에서 410 GoneResourceException 에러가 발생할 수 있습니다.
재로그인 시, 해당 에러가 이후 발생하지 않게되므로 아래와 같은 로그인 함수를 다시 호출할 수 있도록 구성해주세요.

  • Backend.BMember.CustomLogin
  • Backend.BMember.GuestLogin
  • Backend.BMember.AuthorizeFederation
  • Backend.BMember.LoginWithTheBackendToken
  • Backend.BMember.RefreshTheBackendToken
SDK 5.8.0 403 Forbidden 로직 개편 안내

SDK 5.8.0 버전에서는 과도한 요청으로 발생되는 403 Forbidden 에러 발생 시, 이후부터는 서버로 보내는 송신을 로컬에서 5분 30초동안 금지하며 해당 시간 내 함수 호출 시 다음과 같은 에러를 리턴합니다.

statusCode : 403
errorCode : Forbidden
message : 403 Forbidden by Local

만약 403 에러 처리에 기존 message를 이용할 경우에는 errorCode를 이용하거나 IsTooManyRequestError 함수를 이용해주세요.

SDK 5.11.0 ~ 5.11.3 압축형데이터 이용 불가 안내

SDK 5.11.0에서 5.11.3의 경우 압축형 데이터를 이용할 경우, 데이터 불러오기 시, inDate에 뒷자리에 0이 붙을 경우, inDate값이 변경되는 치명적인 오류가 존재합니다.
압축형 데이터를 이용하고자 할 경우에는 꼭 5.11.4 이상의 SDK로 진행해주시기 바랍니다.

ios에서 location 정보를 읽어오지 못하던 문제 수정​

Backend SDK 5.12.0 부터 ios에서 location 정보를 읽어오지 못하던 문제를 수정했습니다.

UpdateLocationProperties 함수 삭제 롤백​

Backend SDK 5.12.0 부터 제거되었던 Backend.LocationProperties.UpdateLocationProperties() 함수를 롤백하였습니다.


5.14.0

그룹 기능 추가​

유저를 특정 그룹에 추가하는 기능이 추가되었습니다.
그룹에 속한 유저는 해당 그룹의 리더보드에서 유저들끼리 경쟁할 수 있습니다.

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의 경우, 그룹에 따른 리더보드 갱신을 할 수 있습니다.

URank 함수의 경우, 그룹에 속해 있어도 리더보드 갱신 함수 호출 시, NULL 그룹의 리더보드에 갱신됩니다.

  • 그룹 구분하지 않은 리더보드는 정상적으로 등록이 가능합니다.

따라서 자신에 속한 그룹에서의 리더보드를 이용하고자 할 경우에는 Leaderboard 함수로 교체하셔야합니다.

자세한 사항은 랭킹과의 차이점을 확인해주세요.

Param param = new Param();
param.Add("score", i);
param.Add("extraData", "추가 정보");

Backend.Leaderboard.User.UpdateMyDataAndRefreshLeaderboard("리더보드 uuid", "테이블 이름", "갱신할 row inDate", param);

랭킹 설정값 조회 기능 리턴값에 컬럼 추가​

Backend.URank.User.GetRankTableList() 함수의 리턴값에서 2024년 9월 24일 이후로 생성한 리더보드의 경우, 리턴값에 rewardPostTitle 컬럼이 추가됩니다.

Backend.URank.User.GetRankTableList()의 ReturnValue

{
"rows": [
{
...
// 콘솔에서 설정한 보상 우편 제목(fallback으로 출력)
"rewardPostTitle": {
"S": "우편 보상 제목"
},
// 랭킹 점수로 사용한 컬럼 명
"column" : {
"S":"score"
},
// 랭킹 추가 항목으로 사용한 컬럼 명(추가 항목을 등록한 경우에만 존재)
}
// and etc...
]
}

랭킹 우편 불러오기 리턴값에 컬럼 추가​

Backend.UPost.GetPostList() 함수의 리턴값에서 2024년 9월 24일 이후로 생성한 리더보드에서 발송된 랭킹 보상의 경우, postTitle 컬럼이 추가됩니다.

"postTitle": {
"ko": "최고 스코어 랭크를 달성했습니다!",
"en": "You Best Score!",
"fallback": "en"
},

Backend.UPost.GetPostList()의 ReturnValue

{
"postList": [
{
"rankType": "guild",
"content": "무작위 총력전 랭킹(21 - 40)",
"expirationDate": "2021-12-26T19:03:44.163Z",
"reservationDate": "2021-12-19T19:03:44.163Z",
"nickname": "유저2",
"inDate": "2021-12-19T19:03:44.163Z",
"title": "무작위 총력전 랭킹(21 - 40)",
"sentDate": "2021-12-19T19:03:44.163Z",
// ======================================
// 다음 컬럼이 추가되었습니다.
"postTitle": {
"ko": "최고 스코어 랭크를 달성했습니다!",
"en": "You Best Score!",
"fallback": "en"
},
// =====================================
"items": [
{
"item": {
"itemID": "i102",
"itemName": "아이템2",
"hpPower": "10",
"aabab": "2"
},
"itemCount": 1,
"chartName": "랭크 보상 차트2"
}
]
}
]
}

게임정보관리 오류 픽스​

Insert, Update, 트랜잭션 함수의 콜백에서 Exception 발생 시 콜백이 2번 호출되는 에러 수정​

Insert, Update, 트랜잭션 함수의 콜백에서 Exception 발생 시 콜백이 2번 호출되는 에러가 수정되었습니다.

ios 16 이상의 기기에서 select 절을 이용한 Get 함수 호출 시, Malformed URL 에러가 발생하는 현상 수정​

ios 16 이상의 기기에서 select 절을 이용한 Get 함수 호출 시, Malformed URL 에러가 발생하는 현상을 수정하였습니다.

트랜잭션 호출 시, GetWriteCapacity, GetReadCapacity에서 Exception 발생하는 오류 수정​

PlayerData의 트랜잭션 호출 시, GetWriteCapacity, GetReadCapacity를 호출할 경우 Exception이 발생하는 에러가 수정되었습니다.

CheckUserInBackend 호출 시 bad signature가 발생하는 에러 수정​

iOS에서 CheckUserInBackend 호출 시 bad signature 발생하는 에러가 수정되었습니다.

[뒤끝 펑션] 윈도우로 빌드된 EXE 파일에서 뒤끝 펑션 호출 시, 에러 발생 현상 수정​

윈도우로 빌드된 EXE 파일에서 뒤끝 펑션 호출 시, 펑션에서 bad app id 에러가 발생하던 에러가 수정되었습니다.


5.13.0

차트 파일, 확률 파일 일괄 다운로드 기능 추가​

차트 파일 및 확률 파일을 일괄적으로 불러오는 기능이 추가되었습니다.

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;


}

영수증 검증 가격 추가​

영수증 검증 시, 가격과 통화를 입력할 수 있습니다.
해당 가격과 통화는 추후 업데이트를 통해 콘솔에서 확인할 수 있도록 제공될 예정입니다.

Backend.Receipt.IsValidateGooglePurchase(args.purchasedProduct.receipt, "receiptDescription", isSubScription, args.purchasedProduct.metadata.localizedPrice, args.purchasedProduct.metadata.isoCurrencyCode);

5.12.1

통신 라이브러리 교체​

뒤끝의 통신 라이브러리가 HttpClient에서 UnityWebRequest로 변경되었습니다.
이제 모든 요청은 유니티의 메인 쓰레드에서 실행됩니다.

기존 외부쓰레드를 사용하는 로직이 있을 경우 작동하지 않을 수 있습니다.

Task 사용 불가​

다음과 같이 외부 쓰레드에서 동기 함수를 호출하는 방식 등, Task 내부에서 뒤끝 함수를 호출할 수 없게 됩니다.

Task.Run( () => {
Backend.BMember.CustomSignUp("user1", "user1");
Backend.BMember.UpdateNickname("user1");
});

비동기 함수 async 삭제​

모든 비동기 함수에 async 수식어가 삭제되었습니다.

AsyncPoll 삭제​

뒤끝 SDK는 이제 비동기 함수 호출 시 외부쓰레드에서 callback이 반환되지 않기에, callback을 외부쓰레드에서 메인쓰레드로 이동시키는 Backend.AsyncPoll 기능을 삭제했습니다.

void Update() {
// if (Backend.IsInitialized) {
// Backend.AsyncPoll();
// }
}

Backend.Initialize 매개변수 변경​

외부쓰레드에서 호출되지 않게됨에 따라 다음 매개변수들이 삭제되었습니다.

  • useAsyncPoll : 뒤끝에서 비동기 함수 처리를 외부쓰레드에서 진행할 것인지 여부
  • autoLocationToAsync : 국가 정보 불러오기를 비동기로 받아올 것인지 여부(인스펙터에서 선택 가능)
// 5.12.1 이전
// public static BackendReturnObject Initialize(bool useAsyncPoll = false, bool autoLocationToAsync = true)
// public async static void InitializeAsync(bool useAsyncPoll, bool autoLocationToAsync, BackendCallback callback)

// 5.12.1 이후
public static BackendReturnObject Initialize()
public static void InitializeAsync(BackendCallback callback)

에러 핸들러 Poll 함수 삭제​

뒤끝 SDK는 이제 비동기 함수 호출 시 외부쓰레드에서 callback이 반환되지 않기에, 외부쓰레드에서 감지하던 에러핸들러가 메인쓰레드에서 감지하게 되면서 Poll(), InitializePoll 함수가 삭제되었습니다.

void Start() {
// Backend.ErrorHandler.InitializePoll(true);
}

void Update() {
// if (Backend.ErrorHandler.UseAsyncQueuePoll) {
// Backend.ErrorHandler.Poll();
// }
}

dll 파일 변경​

dll 파일들이 변경되었습니다. SDK 업데이트 시, 더 이상 사용하지 않는 파일들을 삭제하고자 할 경우, TheBackend 폴더 삭제 후, 새로운 버전을 임포트해주시기 바랍니다.

TheBackend > Resources 폴더에 존재하는 프로젝트 세팅 값도 삭제되므로 다시 clientAppId를 입력해주시기 바랍니다.

삭제된 파일

  • TheBackend.iOS.dll
  • BackendIOSPushNotification.mm
  • XCodeBuildForPushNotification.cs
  • TheBackend.iOS.dll
  • TheBackendHashKeySettings.dll
  • SendQueueMgr.cs

추가된 파일

  • WebSocket4Net.dll

5.11.9

image

5.12.1

image

초기화 함수 호출 시 BackendManager 오브젝트 생성​

Backend.Initialize() 호출 시, DontDestroyOnLoad된 BackendManager 게임 오브젝트가 생성됩니다.
해당 오브젝트가 파괴될 경우 혹은 BackendManager에 존재하는 스크립트가 삭제될 경우, 통신이 이루어지지 않으니 주의해주시기 바랍니다.

image

Window PC의 이름이 한글일 경우, 초기화 실패 에러 해결​

Window PC의 이름이 한글일 경우, 초기화 및 뒤끝 함수 호출이 실패하던 에러를 수정했습니다.

푸시 설정​

자동 디바이스 토큰 가져오기 기능 삭제​

매개변수가 존재하지 앟는 PutDeviceToken 함수가 삭제되었습니다.
이제 PutDeviceToken 함수에 디바이스 토큰을 무조건 입력해야합니다.

삭제된 함수

Backend.Android.PutDeviceToken();
Backend.iOS.PutDeviceToken();

대체 함수

string token = "";
Backend.Android.PutDeviceToken(token);
Backend.iOS.PutDeviceToken(token);

게임정보 관리​

게임정보연산 곱셈 나눗셈 기능 삭제​

게임정보 관리의 게임정보 연산 기능 중 곱셈 나눗셈 기능이 삭제되었습니다.
AddCalculation에 사용되었던 GameInfoOperator enum 중 division, multiplication 기능이 삭제되었습니다.
AddCalculation에 사용되는 GameInfoOperator enum에서는 addition, subtraction만 선택이 가능합니다.

Param updateParam = new Param();
updateParam.AddCalculation("atk", GameInfoOperator.addition, 10); // 기존 데이터 atk에서 10만큼 더 추가
updateParam.AddCalculation("def", GameInfoOperator.subtraction, 20); // 기존 데이터 def에서 20만큼 감소

Backend.GameData.UpdateWithCalculationV2("tableName", inDate, Backend.UserInDate, updateParam);

구버전 채팅​

구버전 채팅 삭제​

구버전 채팅(Backend.Chat) 기능이 삭제되었습니다.

// Backend.Chat.OnJoinChannel = (JoinChannelEventArgs args) => {
// // 해당 함수는 삭제되었습니다.
// }

유저 관리​

유저 차단, 디바이스 차단 시, 에러 제제 세부사항 기능 추가​

유저 차단, 디바이스 차단 시 기존 에러 보다 좀 더 세부적인 정보를 확인할 수 있게 됩니다.

차단당한 유저인 경우

StatusCode : 403  
ErrorCode : 콘솔에 입력된 차단 사유
Message : Forbidden blocked user, 금지된 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 : 닉네임
blockReason : 콘솔에 입력된 차단 사유
blockDate : 2024-11-29T12:41:19.465Z
}

차단당한 유저일 경우, 다음과 같은 에러 데이터를 확인할 수 있습니다.

  • Code : 해당 에러 케이스의 고유 ID
  • ErrorMessage : 해당 에러 세부 사항
  • ErrorData : 에러에 관련된 세부 데이터(nickname과 blockReason은 존재하지 않을 경우, 데이터를 파싱할 수 없습니다.)

에러 사용 예제

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());
}
)

차단당한 디바이스일 경우

StatusCode : 403
ErrorCode : ForbiddenException
Message : Forbidden blocked device, 금지된 blocked device
Code : 403100
ErrorMessage : 20240426092307fc5ac478c is blocked
errorData : {
deviceUniqueId : 20240426092307fc5ac478c
}

차단당한 디바이스일 경우, 다음과 같은 에러 데이터를 확인할 수 있습니다.

  • Code : 해당 에러 케이스의 고유 ID
  • ErrorMessage : 해당 에러 세부 사항
  • ErrorData : 에러에 관련된 세부 데이터

에러 사용 예제

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());
}

[버전 관리] 원스토어 버전관리 기능 추가​

버전 관리에서 매개 변수에 따라 버전을 불러오는 기능이 추가되었습니다.

Backend.Utils.GetLatestVersion(VersionInfo.GooglePlayStore);
Backend.Utils.GetLatestVersion(VersionInfo.AppStore);
Backend.Utils.GetLatestVersion(VersionInfo.OneStore);

[5.12.1] OnOtherDeviceLoginDetectedError 오류 해결​

OnOtherDeviceLoginDetectedError에서 로그인한지 24시간이 경과할 때에 비동기 함수를 여러번 호출할 경우, OnOtherDeviceLoginDetectedError가 오작동하던 에러를 픽스했습니다.

[5.12.1] iOS 기기 튀르키에어로 설정될 경우, 초기화 실패 에러 해결​

iOS 기기 튀르키에어로 설정될 경우, 초기화 함수 호출이 실패하던 에러를 수정했습니다.