본문으로 건너뛰기

계정 인증

이메일과 비밀번호로 로그인하는 API입니다.

URL 확인

이 API는 service-account.playnanoo.com 도메인을 사용합니다.

API 정보

  • URL: https://service-account.playnanoo.com/api/v20240101/email/signin
  • Method: PUT
  • 인증 필요: 아니오

요청 파라미터

파라미터타입필수설명
linked_idstring필수이메일 주소
linked_passwordstring필수비밀번호
platformstring필수플랫폼 (예: "aos", "ios")
device_idstring필수기기 고유 ID
device_modelstring필수기기 모델명
device_osstring필수기기 OS
device_languagestring필수기기 언어 (예: "KO", "EN")
DeviceInfo 상속

이 API의 Req 클래스는 DeviceInfo를 상속받습니다. DeviceInfo의 모든 속성이 자동으로 포함됩니다.

응답 데이터

Res 클래스

필드타입설명
TokenSerializeTokenData토큰 정보
PlayerSerializePlayerData플레이어 정보

SerializeTokenData 구조

필드타입설명
AccessTokenstring액세스 토큰
RefreshTokenstring리프레시 토큰

SerializePlayerData 구조

필드타입설명
UserUniqueIDstring사용자 고유 ID
OpenIDstring오픈 ID
Nicknamestring닉네임
LinkedIDstring연동 ID
LinkedTypestring연동 타입
PurchaseCountint구매 횟수
PurchaseCurrencyCodestring구매 통화 코드
PurchaseTotalPricedouble총 구매 금액
PurchaseVoidedCountint환불 횟수
PurchaseVoidedCurrencyCodestring환불 통화 코드
PurchaseVoidedTotalPricedouble총 환불 금액
Countrystring국가
Timezonestring타임존
Offsetint시간 오프셋
JoinPeriodint가입 기간

Unity C# 구현

BaseResponse 클래스

모든 API 응답의 기본 클래스입니다.

public class BaseResponse
{
public string ErrorCode;
public string Message;
public string WithdrawalKey;
public string BlockKey;
}

필드 설명:

  • ErrorCode: 에러 코드
  • Message: 에러 메시지
  • WithdrawalKey: 탈퇴 유예 상태인 경우 복구에 필요한 키 (탈퇴 유예 중인 계정만 제공)
  • BlockKey: 차단된 계정인 경우 제공되는 키 (차단된 계정만 제공)

이메일 로그인 클래스

using System;
using System.Collections;
using UnityEngine.Networking;

public class EmailSignin
{
static string path = "https://service-account.playnanoo.com/api/v20240101/email/signin";

[Serializable]
public class Req : DeviceInfo
{
public string linked_id;
public string linked_password;

public IEnumerator Send(
string linked_id,
string linked_password,
Action<Res> onSuccess,
Action<BaseResponse> onError)
{
if (!string.IsNullOrEmpty(linked_id)) this.linked_id = linked_id;
if (!string.IsNullOrEmpty(linked_password)) this.linked_password = linked_password;

yield return HttpClient.Send<Req, Res>(
UnityWebRequest.kHttpVerbPUT,
path,
requireToken: false,
body: this,
onSuccess: onSuccess,
onError: onError
);
}
}

[Serializable]
public class Res : BaseResponse
{
public SerializeTokenData Token;
public SerializePlayerData Player;
}

[Serializable]
public class SerializeTokenData
{
public string AccessToken;
public string RefreshToken;
}

[Serializable]
public class SerializePlayerData
{
public string UserUniqueID;
public string OpenID;
public string Nickname;
public string LinkedID;
public string LinkedType;
public int PurchaseCount;
public string PurchaseCurrencyCode;
public double PurchaseTotalPrice;
public int PurchaseVoidedCount;
public string PurchaseVoidedCurrencyCode;
public double PurchaseVoidedTotalPrice;
public string Country;
public string Timezone;
public int Offset;
public int JoinPeriod;
}
}

사용 예제

public void EmailLogin(string email, string password)
{
EmailSignin.Req req = new EmailSignin.Req();

StartCoroutine(req.Send(
linked_id: email,
linked_password: password,
onSuccess: res =>
{
// 토큰
Debug.Log($"AccessToken: {res.Token.AccessToken}");
Debug.Log($"RefreshToken: {res.Token.RefreshToken}");

// 플레이어 정보
Debug.Log($"UserUniqueID: {res.Player.UserUniqueID}");
Debug.Log($"OpenID: {res.Player.OpenID}");
Debug.Log($"Nickname: {res.Player.Nickname}");
Debug.Log($"LinkedID: {res.Player.LinkedID}");
Debug.Log($"LinkedType: {res.Player.LinkedType}");
Debug.Log($"Country: {res.Player.Country}");
},
onError: (error) =>
{
Debug.LogError($"이메일 로그인 실패: [{error.ErrorCode}] [{error.Message}]");

if (error.ErrorCode == "INVALID_CREDENTIALS")
{
Debug.LogError("이메일 또는 비밀번호가 올바르지 않습니다.");
}
}
));
}
비밀번호 보안

비밀번호는 항상 HTTPS를 통해 안전하게 전송되며, 서버에는 암호화되어 저장됩니다. 클라이언트에서도 비밀번호를 평문으로 저장하지 마세요.