START
업데이트 상세 내역
SDK 5.9.0 버전에서 0.1.2 이하(2021-12-28 이전에 배포된 펑션) 버전의 뒤끝펑션을 호출할 경우,
펑션 내부에서 호출하는 함수에 에러가 발생하여 정상적으로 작동하지 않게 됩니다.
꼭 SDK를 업그레이드하기 전에 펑션을 0.2.0 버전으로 업그레이드하여 사용해주세요.
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 에러 발생 시, 이후부터는 서버로 보내는 송신을 로컬에서 5분 30초동안 금지하며 해당 시간 내 함수 호출 시 다음과 같은 에러를 리턴합니다.
statusCode : 403
errorCode : Forbidden
message : 403 Forbidden by Local
만약 403 에러 처리에 기존 message를 이용할 경우에는 errorCode를 이용하거나 IsTooManyRequestError 함수를 이용해주세요.
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
5.12.1
초기화 함수 호출 시 BackendManager 오브젝트 생성
Backend.Initialize() 호출 시, DontDestroyOnLoad된 BackendManager 게임 오브젝트가 생성됩니다.
해당 오브젝트가 파괴될 경우 혹은 BackendManager에 존재하는 스크립트가 삭제될 경우, 통신이 이루어지지 않으니 주의해주시기 바랍니다.
Window PC의 이름이 한글일 경우, 초기화 실패 에러 해결
Window PC의 이름이 한글일 경우, 초기화 및 뒤끝 함수 호출이 실패하던 에러를 수정했습니다.
푸시 설정
자동 디바이스 토큰 가져오기 기능 삭제
매개변수가 존재하지 앟는 PutDeviceToken 함수가 삭제되었습니다.
이제 PutDeviceToken 함수에 디바이스 토큰을 무조건 입력해야합니다.
삭제된 함수
Backend.Android.PutDeviceToken();
Backend.iOS.PutDeviceToken();
대체 함수
string token = "";
Backend.Android.PutDeviceToken(token);
Backend.iOS.PutDeviceToken(token);
게임정보 관리
게임정보연산 곱셈 나눗셈 기능 삭제
게임정보 관리의 게임정보 연산 기능 중 곱셈 나눗셈 기능이 삭제되었습니다.
AddCalculpation에 사용되었던 GameInfoOperator enum 중 division, multiplication 기능이 삭제되었습니다.
AddCalculpation에 사용되는 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 기기 튀르키에어로 설정될 경우, 초기화 함수 호출이 실패하던 에러를 수정했습니다.