계정생성(Custom sign up) 관련 문의 드립니다...

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 : 5.11.0
  • 프로젝트명 : RaceCAR
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

문의사항 : " 계정 생성이 되지 않습니다"

안녕하세요, RaceCAR라는 임시 프로젝트를 학습삼아 개발하고 있는 생초보 개발자 입니다.

뒤끝 네트워크를 통해 (Custom sign up) 함수를 사용하여, 계정 생성 및 로그인, 닉네임 변경 등을 시도 해보려고 하는데요,

콘솔 가이드에 있는 예제 스크립트를 따라 할때에는 접속 초기화 및 계정 생성/변경 테스트 시에는 이상이 없지만,

유니티를 통해 RaceCAR 프로젝트에 적용해서 계정 생성을 하려고 계정생성버튼을 누르면 순간적으로 "계정 생성중"이라고 뜨다가,

"“gamer not found, gamer"을(를) 찾을 수 없습니다” 이렇게 발생 되며, 계정 생성이 되지 않습니다.

개인적인 생각으로 스크립트 상에서 계정 생성 함수(OnClickRegisterAccount()) 를 진행 후 CustomSignUp() 함수에서 callback이 되지 않는 것으로 추측 되는데,

콘솔 가이드에 있는 계정 생성 스크립트와 비교해서 적용해보려고 해도 난해한 코드들이 많아 어떻게 적용을 변경해야 할지 손도 못대고 있는 상태입니다.

염치 불구 하고 제가 작성한 스크립트와, 개발 예제 스크립트를 아래 작성 하오니, 생성이 안되는 이유에 대해 답변 주시면 감사하겠습니다.

------------------ 뒤끝 예제 스크립트---------------------

public void CustomSignUp(string id, string pw)
    {
        Debug.Log("회원가입을 요청합니다.");

        var bro = Backend.BMember.CustomSignUp(id, pw);

        if (bro.IsSuccess())
        {
            Debug.Log("회원가입에 성공했습니다. : " + bro);
        }
        else
        {
            Debug.LogError("회원가입에 실패했습니다. : " + bro);
        }
    } 

-------------------------- RaceCAR 학습 개발 스크립트------------------------------

public void CustomSignUp()
    {
        Backend.BMember.ResetPassword(inputFieldID.text, inputFieldPW.text, callback =>
        {
            btnRegisterAccount.interactable = true; // 계정생성 버튼 활성화

            if (callback.IsSuccess()) // 계정생성 성공
            {
                //Backend.BMember.ResetPassword(inputFieldID.text, inputFieldPW.text, callback =>
                Backend.BMember.UpdateCustomEmail(inputFieldEmail.text, callback =>
                {
                    if (callback.IsSuccess())
                    {
                        SetMessage($"계정생성 성공. {inputFieldID.text} 님 환영합니다.");

                        BackendGameData.Instance.GameDataInsert(); //계정이 성공적으로 만들어 졌다면.

                        Utils.LoadScene(SceneNames.Lobby); // 로비씬으로 이동
                    }
                });
            }

            else // 계정생성 실패 했다면
            {
                string message = string.Empty;

                switch (int.Parse(callback.GetStatusCode()))
                {
                    case 409: // 중복된 아이디가 존재하는 경우
                        message = "이미 존재하는 아이디입니다.";
                        break;

                    case 403: // 차단당한 디바이스 일 경우
                        message = callback.GetMessage();
                        break;

                    case 401: // 서버 또는 프로젝트가 점검일 경우
                    case 400: // 디바이스 정보가 없을 경우
                    default:
                        message = callback.GetMessage();
                        break;
                }

                if (message.Contains("아이디"))
                {
                    GuideForIncorrentEnteredData(imageID, message);
                }

                else
                {
                    SetMessage(message);
                }
            }
        });
    }

감사합니다.

좋아요 1

안녕하세요 개발자님,
작성하신 코드중 Backend.BMember.ResetPassword 가 의도하신 코드가 맞으실까요?
회원가입을 진행하시고자 한다면 Backend.BMember.CustomSignUp 함수를 이용해 주셔야 합니다.

안녕하세요 Ransiee 님 계정생성에 동기와/비동기식이 있는것을 어제 검색을 통해 알았습니다.

비동기식을 적용해야 해서 비동기식으로 적용을 했고,

언급하신 ResetPassword부분을 CustomSignup으로 바꾸었습니다,

변경 이후에 이전에 문제가 되었던 팝업메세지는 나타나지 않았지만, 가입 버튼을 누르면 버튼은 비활성화 되면서 "계정생성중"이라는 메세지 이후에 응답이 없고, C# 콘솔창에 아래와 같은 오류가 발생합니다.

NullReferenceException: Object reference not set to an instance of an object
RegisterAccount.CustomSignUp () (at Assets/Scripts/Login/RegisterAccount.cs:48)
RegisterAccount.OnClickRegisterAccount () (at Assets/Scripts/Login/RegisterAccount.cs:43)
UnityEngine.Events.InvokableCall.Invoke () (at <17484a9af6b944dea5cd9be4dbb0da2c>:0)
UnityEngine.Events.UnityEvent.Invoke () (at <17484a9af6b944dea5cd9be4dbb0da2c>:0)
UnityEngine.UI.Button.Press () (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:70)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:114)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:57)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:272)
UnityEngine.EventSystems.EventSystem:Update() (at ./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/EventSystem.cs:530)

해당 오류를 더블클릭하여 아래의 스크립트로 들어 가면

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using BackEnd;

public class RegisterAccount : LoginBase
{
    [SerializeField] Image imageID;
    [SerializeField] InputField inputFieldID;
    [SerializeField] Image imagePW;
    [SerializeField] InputField inputFieldPW;
    [SerializeField] Image imageConfirmPW;
    [SerializeField] InputField inputFieldConfirmPW;
    [SerializeField] Image imageEmail;
    [SerializeField] InputField inputFieldEmail;
    [SerializeField] Button btnRegisterAccount;
public void CustomSignUp()
    {
        Backend.BMember.CustomSignUp(inputFieldID.text, inputFieldPW.text, callback =>
        {
            btnRegisterAccount.interactable = true; // 계정생성 버튼 활성화

            if (callback.IsSuccess()) // 계정생성 성공
            {
                //Backend.BMember.ResetPassword(inputFieldID.text, inputFieldPW.text, callback =>
                Backend.BMember.UpdateCustomEmail(inputFieldEmail.text, callback =>
                {
                    if (callback.IsSuccess())
                    {
                        SetMessage($"계정생성 성공. {inputFieldID.text} 님 환영합니다.");

                        BackendGameData.Instance.GameDataInsert(); //계정이 성공적으로 만들어 졌다면.

                        Utils.LoadScene(SceneNames.Lobby); // 로비씬으로 이동
                    }
                });
            }

오류 발생으로 지정하는 위치는 다음과 같습니다.

Backend.BMember.CustomSignUp(inputFieldID.text, inputFieldPW.text, callback =>

여기서 callback이 안되는 것으로 추정이 되는데, 원인을 알수 없는 상태입니다.

확인 해주시면 감사하겠습니다.~

추가 적으로 비동기식으로 적용을 하려면 초기화 부분에서 아래와 같이 적용해도 문제가 없는지 검토 부탁드립니다. 감사합니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using BackEnd;



public class BackendManager : MonoBehaviour
{

    void Start()
    {
        var customSetting = new BackendCustomSetting();
        customSetting.useAsyncPoll = true;

        Backend.InitializeAsync(customSetting, callback => {
        
            if (callback.IsSuccess())
            {
                Debug.Log("초기화 성공 : " + customSetting); // 성공일 경우 statusCode 204 Success
            }
            else
            {
                Debug.LogError("초기화 실패 : " + customSetting); // 실패일 경우 statusCode 400대 에러 발생
            }

        });

    }
        void Awake()
    {
        DontDestroyOnLoad(gameObject);
        BackendSetup(); // 뒤끝 서버 초기화
    }

    void Update()
    {
        if (Backend.IsInitialized) Backend.AsyncPoll(); //서버 호출
    }

    void BackendSetup()
    {
        var customSetting = Backend.Initialize(true);

        if (customSetting.IsSuccess()) Debug.Log($"초기화 성공 : {customSetting}"); // 초기화에 성공하면 204가 정상 호출
        else Debug.LogError($"초기화 실패 : {customSetting}"); // 초기화에 실패하면 400번대 에러 호출

    }
}
  1. Backend.Initialize()가 정상적으로 성공했는지,
  2. inputField에 오브젝트가 정상적으로 연결되어있는지
    확인하여 이용해 주시면 감사하겠습니다.

추가로 말씀해주신 비동기 코드를 커스텀 세팅으로 이용하고자 할때는
아래와 같이 세팅값에 대한 인자값(클라이언트 앱 아이디, 시그니처 키 등…)들을 직접 설정해 주셔야 합니다.

using BackEnd;

void Start()
{
    // 네 번째 방법(비동기)
    // SDK 설정값
    BackendCustomSetting settings = new BackendCustomSetting();
    settings.clientAppID = "클라이언트 앱 아이디";
    settings.signatureKey = "시그니처 키";
    settings.functionAuthKey = "뒤끝펑션 키";
    settings.isAllPlatform = true;
    settings.sendLogReport = true;
    settings.timeOutSec = 100;
    settings.useAsyncPoll = true;

    Backend.InitializeAsync(settings, callback => {
        if(callback.IsSuccess())
        {
            // 초기화 성공 시 로직
        }
        else
        {
            // 초기화 실패 시 로직
        }    
    });
}

답변 주신대로 세팅시 해당하는 문제를 해결 할 수 있었습니다. 도움 감사드립니다.