뒤끝서버 블루스택 빌드 테스트

안녕하세요 모바일 방치형 게임을 만들고 있고 블루스택으로 커스텀 로그인 후 로딩씬 과정중에서
트랜잭션
// 트랜잭션으로 불러온 후, 안불러질 경우 각자 Get 함수로 불러오는 함수 중요
_initializeStep.Enqueue(() => { ShowDataName(“트랜잭션 시도 함수”); TransactionRead(NextStep); });
// 랭킹 정보 불러오기 함수 Insert
_initializeStep.Enqueue(() => { ShowDataName(“랭킹 정보 불러오기”); Managers.Backend.Rank.BackendLoad(NextStep); });
랭킹을 불러올 때 아래의 오류 코드가 나와서 문의 드립니다. 유니티상에서 테스트 할 땐 잘됐는데
블루스택때문에 안되는 걸까요?

    public void BackendGameDataLoad(AfterBackendLoadFunc afterBackendLoadFunc) {

        string tableName = GetTableName();

        string columnName = GetColumnName();

        string className = tableName;

        bool isSuccess = false;

        string errorInfo = string.Empty;

        string funcName = MethodBase.GetCurrentMethod()?.Name;

        // [뒤끝] 내 게임정보 불러오기 함수

        SendQueue.Enqueue(Backend.GameData.GetMyData, tableName, new Where(), callback => {

            try {

                Debug.Log($"Backend.GameData.GetMyData({tableName}) : {callback}");

                if (callback.IsSuccess()) {

                    // 불러온 데이터가 하나라도 존재할 경우

                    if (callback.FlattenRows().Count > 0) {

                        // 이후 업데이트에 사용될 각 데이터의 indate값 저장

                        _inDate = callback.FlattenRows()[0]["inDate"].ToString();

                        //Dictionary 등 데이터 저장을 위해 컬럼값을  설정했을 경우

                        if (string.IsNullOrEmpty(columnName)) {

                            // FlattenRows의 경우, 리턴값에 ["S"], ["N"]등의 데이터 타입값을 제거한 후, Json을 리턴

                            SetServerDataToLocal(callback.FlattenRows()[0]);

                        }

                        else {

                            // 설정하지 않았을 경우(UserData)

                            // columnName까지 진입한 후, Json을 리턴

                            SetServerDataToLocal(callback.FlattenRows()[0][columnName]);

                        }

                        isSuccess = true;

                        // 불러오기가 끝난 이후에 호출되는 함수 호출

                        afterBackendLoadFunc(isSuccess, className, funcName, errorInfo);

                    }

                    else {

                        // 불러온 데이터가 없을 경우, 서버에 존재하지 않는 경우

                        // 데이터를 새로 생성

                        BackendInsert(afterBackendLoadFunc);

                    }

                }

                else {

                    // 데이터 존재 여부 상관없이 에러가 발생했을 경우(서버에 데이터가 존재할 수도있음)

                    errorInfo = callback.ToString();

                    afterBackendLoadFunc(isSuccess, className, funcName, errorInfo);

                }

            }

            catch (Exception e) {

                // 예외가 발생했을 경우

                // 파싱 실패등

                errorInfo = e.ToString();

                afterBackendLoadFunc(isSuccess, className, funcName, errorInfo);

            }

        });

    }

    // 서버에 데이터가 존재하지 않을 경우, 데이터를 새로 삽입

    private void BackendInsert(AfterBackendLoadFunc afterBackendLoadFunc) {

        string tableName = GetTableName();

        bool isSuccess = false;

        string errorInfo = string.Empty;

        string className = string.Empty;

        string funcName = string.Empty;

        // 데이터 초기화(각 자식 객체가 설정)

        InitializeData();

        SendQueue.Enqueue(Backend.GameData.Insert, tableName, GetParam(), callback => {

            try {

                Debug.Log($"Backend.GameData.Insert({tableName}) : {callback}");

                if (callback.IsSuccess()) {

                    isSuccess = true;

                    _inDate = callback.GetInDate();

                }

                else {

                    errorInfo = callback.ToString();

                }

            }

            catch (Exception e) {

                errorInfo = e.ToString();

            }

            finally {

                afterBackendLoadFunc(isSuccess, className, funcName, errorInfo);

            }

        });

    }

    // 업데이트가 완료된 이후 리턴값과 함께 호출되는 함수

    public delegate void AfterCallBack(BackendReturnObject callback);

    // 해당 테이블에 데이터 업데이트

    public void Update(AfterCallBack afterCallBack) {

        SendQueue.Enqueue(Backend.GameData.UpdateV2, GetTableName(), GetInDate(), Backend.UserInDate, GetParam(),

            callback => {

                Debug.Log($"Backend.GameData.UpdateV2({GetTableName()}, {GetInDate()}, {Backend.UserInDate}) : {callback}");

                afterCallBack(callback);

            });

    }

    // 해당 테이블에 업데이트할 데이터 트랜잭션(한번에 여러 테이블 저장)으로 만들어 리턴

    public TransactionValue GetTransactionUpdateValue() {

        return TransactionValue.SetUpdateV2(GetTableName(), GetInDate(), Backend.UserInDate, GetParam());

    }

    // 해당 테이블에 업데이트할 데이터 트랜잭션(한번에 여러 테이블 저장)으로 만들어 리턴

이 부분에서 게임정보를 불러올때 오류가 납니다
public TransactionValue GetTransactionGetValue() {

        Where where = new Where();

        where.Equal("owner_inDate", Backend.UserInDate);

        return TransactionValue.SetGet(GetTableName(), where);

    }

    public void BackendGameDataLoadByTransaction(JsonData gameDataJson, AfterBackendLoadFunc afterBackendLoadFunc) {

        string columnName = GetColumnName();

        string errorInfo = string.Empty;

        string className = GetType().Name;

        string funcName = MethodBase.GetCurrentMethod()?.Name;

        try {

            _inDate = gameDataJson["inDate"].ToString();

            if(string.IsNullOrEmpty(columnName)) {

               

                SetServerDataToLocal(gameDataJson);

            }

            else {

 

                SetServerDataToLocal(gameDataJson[columnName]);

            }

            afterBackendLoadFunc(true, className, funcName, errorInfo);

       

        }

        catch(Exception e) {

            errorInfo = e.ToString();

            afterBackendLoadFunc(false, className, funcName, errorInfo);

        }

   

    }



}

}

  • 뒤끝 SDK 버전 : 5.13.0
  • 프로젝트명 : P1
  • 스테이터스 코드 : 400
  • 에러 코드 : BadRequestException
  • 에러 메시지 : Login is yet

안녕하세요, 개발자님.
해당 에러는 유저 로그인이 완료되지 않은 상태에서 다른 뒤끝 함수를 호출하면 발생하는 에러입니다.
블루스택에서 로그인 함수 호출 후, 결과가 Success로 나타나는지 확인해 보시기 바랍니다.
감사합니다.

음 혹시 컴퓨터 바로 실행해서 테스트하는 거랑 안드로이드 빌드해서 녹스에서 테스트하는 거에 대한 차이가 있는건가요??

BindButtons(typeof(Buttons));

    GetButton((int)Buttons.Btn_Login).onClick.AddListener(() =>

    {

        if (Backend.IsInitialized == false)

            return;

        Backend.BMember.CustomLogin("jejuRooftop", "1234", callback =>

        {

            if (callback.IsSuccess())

            {

                Managers.Scene.LoadScene(EScene.LoadingScene);

            }

        });

    });

별도로 버튼 만들어서 해봤는데 로그인이 안됩니다 ㅠ퓨


혹시 이 오류일까요??

5.13.0 버전에는 구글해쉬키를 넣는 칸이 없고 5.15.1 최신 버전에는 있는데 이 차이일까요??
여러 방면으로 오류를 알아보고 있습니다!

개발자님, 프로젝트 상세 내역 확인 시 뒤끝 콘솔에 Android Package Name 과 구글 해시키가 입력되지 않은 것으로 보입니다.
앱 빌드 시, 뒤끝 콘솔에 등록된 패키지 네임과 일치하도록 설정하고 등록된 구글 해시키 값을 가진 keystore를 사용하여 빌드해 주시기 바랍니다.

SDK 5.15.1 버전에서 뒤끝 세팅에 있는 구글 해시는 구글 플레이 콘솔에 앱을 등록했을 때,
앱 서명 항목에 있는 SHA-1값으로 해시키를 반환해주는 툴입니다.
툴을 통해서 나온 해시값을 뒤끝 콘솔의 인증정보에 입력해 주셔야 합니다.

만약, 아직 구글 플레이 콘솔에 앱을 등록하지 않았다면 빌드 후, Backend.Utils.GetGoogleHash() 함수를 통해 해시키를 알아낸 뒤, 뒤끝 콘솔에 등록해 주시면 됩니다.

더불어, 로그인 실패 에러에 한하여 [콘솔 → 로그 → thebackend_login_fail_log] 을 통해 실패 에러 정보를 직접 확인할 수 있는 점 참고 부탁드립니다.