뒤끝 커스텀 로그인
현재 프로젝트는 기본적으로 커스텀 로그인과 구글 로그인을 지원한다. 간단히 닉네임만 설정하여 회원가입할 수 있다. 회원가입을 할 때 커스텀 로그인으로 구현하였지만, 게스트 로그인으로 나타내어 구글 연동을 할 경우에만 다른 기기나 다시 로그인을 진행할 수 있고, 커스텀 계정으로 로그인할 경우에는 다시 로그인하기 어려운 구조이다.
현재는 위와 같은 방식이지만, 커스텀 계정의 코드를 부여하여 자신의 코드만 입력하면 로그인할 수 있게 할 계획이다.
1)커스텀 회원가입
- 동기방식
BackendReturnObject bro = Backend.BMember.CustomSignUp ( "id" , "password" ); if(bro.IsSuccess()) { Debug.Log("회원가입에 성공했습니다"); }
- 비동기방식
Backend.BMember.CustomSignUp ( "id", "password", callback => { if(callback.IsSuccess()) { Debug.Log("회원가입에 성공했습니다"); } });
- SendQueue
SendQueue.Enqueue(Backend.BMember.CustomSignUp, "id", "password", callback => { if(callback.IsSuccess()) { Debug.Log("회원가입에 성공했습니다"); } });
- ReturnCase
- 회원가입에 성공한 경우
- statusCode : 201
- message : Success
- 중복된 customId 가 존재하는 경우
- statusCode : 409
- errorCode : DuplicatedParameterException
- message : Duplicated customId, 중복된 customId 입니다
- 프로젝트 상태가 ‘점검’일 경우
- statusCode : 401
- errorCode : BadUnauthorizedException
- message : bad serverStatus: maintenance, 잘못된 serverStatus: maintenance 입니다
- 출시 설정이 테스트인데 AU가 10을 초과한 경우
- statusCode : 403
- errorCode : ForbiddenException
- message : Forbidden Active User(로그인에 성공한 상태의 유저) exceed 10., 금지된 Active User(로그인에 성공한 상태의 유저) exceed 10.
- 회원가입에 성공한 경우
위의 정보를 토대로 회원가입을 구현하였다.
public void FirstSignUp()
//커스텀 회원가입
{
string id = RandomMackingRandomID();
//위의 함수는 30자리의 랜덤한 아이디를 부여한다.
var bro = Backend.BMember.CustomSignUp(id, "---");
//비밀번호를 생성(위의 string과는 다름)
Debug.Log(bro.ToString());
if (bro.IsSuccess())
//회원가입 성공하였을 경우
{
Debug.Log("회원가입 성공");
UIManager.Inst.DoDisappear(chooseLogin); // 현재 창 닫기
UIManager.Inst.DoMove(loginPanel); //닉네임 생성 창 띄우기
LoadChart2(); //차트 가져오기(뒤에서 포스팅)
}
else
//실패하였을 경우 다시 시도
{
FirstSignUp();
}
}
public string RandomMackingRandomID()
{
var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
string ID = null;
for (int i = 0; i < 30; i++)
{
ID = ID + characters[Random.Range(0, characters.Length)];
}
return ID;
}
SDK가 너무 잘되어 있어 크게 회원가입을 만드는데 어려움이 없다.
2)커스텀 로그인
로그인과 동시에 게임에 필요한 정보를 생성한다.
public void SetNickName()
{
BackendReturnObject bro = Backend.BMember.CheckNicknameDuplication(nickName.text);
//인풋필드에 입력한 닉네임의 중복 검사
Debug.Log(bro.GetStatusCode());
if (bro.IsSuccess() && NicknameManager.Filter(nickName.text))
//닉네임 필터를 사용하여
//모음 또는 자음만 있거나, 욕설이 포함되어 있는 닉네임은 설정하지 못하게 막았다.
{
Debug.Log(nickName.text);
Backend.BMember.CreateNickname(nickName.text);
//닉네임 생성
Debug.Log("닉네임 설정 완료");
//이하 뒤에서 설명
Param param = new Param();
param.Add("stage", 1);
param.Add("wordcnt",0);
List<string> clearwords = new List<string>();
param.Add("clearwords0", clearwords);
var bro1 = Backend.GameData.Insert("Info", param);
Debug.Log(bro1.GetInDate());
Backend.GameData.UpdateV2("Info", bro1.GetInDate(), Backend.UserInDate, param);
Backend.URank.User.UpdateUserScore("0abc3e30-5be5-11ec-9ddb-b3b31a0d7eae", "Info", bro1.GetInDate(), param);
UIManager.Inst.DoDisappear(UIManager.Inst.loginPanel);
UIManager.Inst.DoMove(UIManager.Inst.tutorial);
PlayerPrefs.DeleteKey("save");
}
else if(bro.GetStatusCode()=="409")
//중복된 닉네임이 포함된다면
{
Debug.Log("중복된 닉네임");
CanNotSetNickName("중복된 닉네임입니다.");
}
else if(bro.GetStatusCode()=="404")
//빈칸이 포함된다면
{
Debug.Log("빈칸");
CanNotSetNickName("빈칸은 안됩니다!");
}
else
//욕설 또는 설정할 수 없는 단어가 포함될 경우
{
CanNotSetNickName("사용할 수 없는 닉네임입니다.");
}
}
3)커스텀 토큰 로그인
토큰 로그인이란 한번 로그인을 하게 되면 기기 로컬에 토큰을 생성하여, 토큰을 통해 자동적으로 로그인할 수 있게 해주는 기능이다.
public void TokenLogin()
{
BackendReturnObject bro = Backend.BMember.LoginWithTheBackendToken();
//기존 로그인과는 큰 차이없다.
if (bro.IsSuccess() && UIManager.Inst.SetMainNicname())
{
Debug.Log("자동 로그인에 성공했습니다");
UIManager.Inst.DoMove(UIManager.Inst.mainUI);
UIManager.Inst.DoMove(UIManager.Inst.nickNameBtn);
LoadChart2();
}
else
{
UIManager.Inst.DoMove(chooseLogin);
}
}