유니티/뒤끝

뒤끝 회원가입, 로그인, 데이터 송수신

잼잼재미 2024. 6. 19. 23:13

회원가입

 public void SignUp()
{
    BackendReturnObject bro = Backend.BMember.CustomSignUp("ID", "PASSWORD");
    if (bro.IsSuccess())
    {
        Debug.Log("회원가입에 성공했습니다");
    }
}

 

* 뒤끝 서버 연동 후, 사용 가능

 

 

로그인

public void Login()
{
    BackendReturnObject bro = Backend.BMember.CustomLogin("ID", "PASSWORD");
    if (bro.IsSuccess())
    {
        Debug.Log("로그인에 성공했습니다");
    }
    else
    {
        Debug.Log("로그인에 실패했습니다");
    }
}

 

* 뒤끝 서버 연동 후, 사용 가능

 

 

자동 로그인

public void AutoLogin()
{
    BackendReturnObject bro = Backend.BMember.LoginWithTheBackendToken();
    if (bro.IsSuccess())
    {
        Debug.Log("자동 로그인에 성공했습니다");
    }
    else
    {
        Debug.Log("로그인에 실패했습니다");
    }
}

 

* 뒤끝 서버 연동 후, 사용 가능

* 클라이언트에서 로그인을 하면, 기기에 로컬 형태로 해당 유저에 대한 Token 저장됨 -> 해당 Token을 서버 유저 데이터와 비교해서 자동 로그인

* 즉, 서버에서 유저 데이터를 삭제하면 자동 로그인 시, 에러 발생

 

 

데이터 저장


1. 데이터 초기화


  • 회원가입 완료 시, InsertData 함수를 호출
  • 호출 완료 시, 데이터 테이블에 유니티 데이터가 서버로 전송

 

 

데이터 테이블 생성

 

내부에 저장된 데이터 확인 가능, 현재는 데이터가 없음. 유저당 한줄 씩, 데이터를 관리한다. 

 

 

스크립트 작성

// 회원 가입을 할 때, 데이터 테이블에 추가하는 함수
public void InsertData()
{
    Param param = GetUserDataParam();
    BackendReturnObject bro = Backend.GameData.Insert("USER_DATA", param); // 데이터 테이블의 이름

    if (bro.IsSuccess())
    {
        Debug.Log("데이터 추가를 성공했습니다");
    }
    else
    {
        Debug.Log("데이터 추가를 실패했습니다");
    }
}

// param : 데이터를 송수신할 때 사용하는 class
private Param GetUserDataParam()
{
    Param param = new Param();
    param.Add("UserName", GameManager.I.DataManager.GameData.UserName);
    param.Add("RankPoint", GameManager.I.DataManager.GameData.RankPoint);
    
    // 랭킹 데이터에서 복수 데이터의 추가 항목 사용 시
    //param.Add("WinLose", GameManager.I.DataManager.GameData.Win.ToString() + "|" + GameManager.I.DataManager.GameData.Lose.ToString());

    return param;
}

 

*  랭킹에서 추가 항목을 사용할 때

  • 단일 데이터 : 기본 형식과 동일하게 사용
  • 복수 데이터 : "|"와 같은 특수 기호를 넣어서 데이터를 연결해서 하나의 데이터에 추가

 

 

데이터 초기화 완료 후

 

 

2. 데이터 불러오기


  • 서버에 저장된 Json Data(string 값)를 파싱(int, float 등으로 형 변환)해서 사용
  • 로그인 시, Load 함수를 호출
  • 호출 완료 시, 서버에 있는 데이터 테이블의 데이터가 유니티로 전송

 

 

스크립트 작성

using LitJson;

// 서버로부터 데이터를 불러와서 Parsing하는 함수
public void Load()
{
    if (!Backend.IsInitialized)
    {
        Debug.LogError("현재 서버와 연결이 끊겼습니다.");
        return;
    }

    BackendReturnObject bro = Backend.GameData.GetMyData("USER_DATA", new Where());

    if (bro.IsSuccess())
    {
        Debug.Log("데이터 로드 성공했습니다.");
        ParsingData(bro.GetReturnValuetoJSON()["rows"][0]);
        // 서버에서 불러온 Json 데이터를 파싱
        // Json 데이터 중, rows의 값만 가져옴
    }
    else
    {
        Debug.Log("데이터 로드 실패했습니다.");
    }
}

private void ParsingData(JsonData json)
{
    // 파싱된 데이터를 GameData로 불러오기
    GameManager.I.DataManager.GameData.UserName = json["UserName"][0].ToString();
    GameManager.I.DataManager.GameData.RankPoint = int.Parse(json["RankPoint"][0].ToString());

    // 랭킹 데이터에서 복수 데이터의 추가 항목 사용 시
    //string[] extraData = json["extraData"].ToString().Split("|");
    //GameManager.I.DataManager.GameData.Win = int.Parse(extraData[0].ToString());
    //GameManager.I.DataManager.GameData.Lose = int.Parse(extraData[1].ToString());

    //GameData의 변수가 배열이라면 ?
    //for (int i = 0; i < json["Items"]["L"].Count; i++)
    //{
    //    GameManager.I.DataManager.GameData.Items[i] = int.Parse(json["Items"]["L"][i][0].ToString());
    //}
}

 

*  랭킹에서 복수 데이터의 추가 항목을 사용할 때, 데이터를 불러와서 String 형식으로 변환 후, 사용했던 특수기호를 기준으로 Split 함수로 나눠서 string 배열을 생성한 뒤, 각각 형변환을 진행한다.

 

 

 

3. 데이터 저장


  • 서버 저장이 필요할 때, Save 함수 호출
  • 호출 완료 시, 데이터 테이블에 유니티 데이터가 서버로 전송

 

 

스크립트 작성

public void Save()
{
    if (!Backend.IsInitialized)
    {
        Debug.LogError("현재 서버와 연결이 끊겼습니다.");
        return;
    }

    Param param = GetUserDataParam();
    BackendReturnObject bro = Backend.GameData.Update("USER_DATA", new Where(), param);

    if (bro.IsSuccess())
    {
        Debug.Log("데이터 저장 성공했습니다.");
        
        // 닉네임 설정
        bro = Backend.BMember.UpdateNickname(GameManager.I.DataManager.GameData.UserName);
    }
    else
    {
        Debug.Log("데이터 저장 실패했습니다.");
    }
}

// param : 데이터를 송수신할 때 사용하는 class
private Param GetUserDataParam()
{
    Param param = new Param();
    param.Add("UserName", GameManager.I.DataManager.GameData.UserName);
    param.Add("RankPoint", GameManager.I.DataManager.GameData.RankPoint);
    
    // 랭킹 데이터에서 복수 데이터의 추가 항목 사용 시
    //param.Add("WinLose", GameManager.I.DataManager.GameData.Win.ToString() + "|" + GameManager.I.DataManager.GameData.Lose.ToString());

    return param;
}

 

 

'유니티 > 뒤끝' 카테고리의 다른 글

랭킹 구현  (0) 2024.06.19
뒤끝 시작하기  (0) 2024.06.17