탈퇴 신청
계정 탈퇴를 요청하는 API입니다. 탈퇴 유예 기간 동안 계정이 보존됩니다.
URL 확인
이 API는 service-account.playnanoo.com 도메인을 사용합니다.
API 정보
- URL:
https://service-account.playnanoo.com/api/v20240401/token/withdrawal - Method:
PUT - 인증 필요: 예
요청 파라미터
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
| period | int | 필수 | 탈퇴 유예 기간 (일 단위) |
| account_token | string | 필수 | 계정 토큰 |
| memo | string | 필수 | 탈퇴 사유 메모 |
| platform | string | 필수 | 플랫폼 (예: "aos", "ios") |
| device_id | string | 필수 | 기기 고유 ID |
| device_model | string | 필수 | 기기 모델명 |
| device_os | string | 필수 | 기기 OS |
| device_language | string | 필수 | 기기 언어 (예: "KO", "EN") |
응답 데이터
Res 구조체
| 필드 | 타입 | 설명 |
|---|---|---|
| Status | FString | 상태 값 |
Unreal C++ 구현
헤더 파일 (WithDrawal.h)
// WithDrawal.h
#pragma once
#include "CoreMinimal.h"
#include "Json.h"
#include "JsonUtilities.h"
// 응답 콜백 델리게이트
DECLARE_DELEGATE_OneParam(FOnWithDrawalSuccess, const FString&);
DECLARE_DELEGATE_OneParam(FOnWithDrawalError, const FString&);
class YOURPROJECT_API FWithDrawal
{
public:
// 요청 구조체 (디바이스 정보는 FPlayNANOOHelper::CreateRequestBody()에서 자동 생성)
struct FReq
{
int32 period;
FString account_token;
FString memo;
};
// 응답 구조체
struct FRes
{
FString ErrorCode;
FString Message;
FString Status;
bool FromJson(const FString& JsonString)
{
TSharedPtr<FJsonObject> JsonObject;
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(JsonString);
if (FJsonSerializer::Deserialize(Reader, JsonObject) && JsonObject.IsValid())
{
JsonObject->TryGetStringField(TEXT("ErrorCode"), ErrorCode);
JsonObject->TryGetStringField(TEXT("Message"), Message);
JsonObject->TryGetStringField(TEXT("Status"), Status);
return true;
}
return false;
}
};
/**
* 회원 탈퇴 요청 전송
*/
static void Send(
int32 Period,
const FString& AccountToken,
const FString& Memo,
FOnWithDrawalSuccess OnSuccess,
FOnWithDrawalError OnError
);
};
구현 파일 (WithDrawal.cpp)
// WithDrawal.cpp
#include "WithDrawal.h"
#include "PlayNANOOHelper.h"
#include "Http.h"
void FWithDrawal::Send(
int32 Period,
const FString& AccountToken,
const FString& Memo,
FOnWithDrawalSuccess OnSuccess,
FOnWithDrawalError OnError)
{
// 요청 데이터 생성 (디바이스 정보는 자동 포함)
TSharedPtr<FJsonObject> JsonObject = FPlayNANOOHelper::CreateRequestBody();
// API 전용 파라미터 추가
JsonObject->SetNumberField(TEXT("period"), Period);
JsonObject->SetStringField(TEXT("account_token"), AccountToken);
if (!Memo.IsEmpty())
{
JsonObject->SetStringField(TEXT("memo"), Memo);
}
// JSON 변환
FString JsonBody;
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&JsonBody);
FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer);
// HTTP 요청 생성
TSharedRef<IHttpRequest> Request = FHttpModule::Get().CreateRequest();
Request->SetURL(TEXT("https://service-account.playnanoo.com/api/v20240401/token/withdrawal"));
Request->SetVerb(TEXT("PUT"));
FPlayNANOOHelper::SetCommonHeaders(Request, true); // 인증 토큰 포함
Request->SetContentAsString(JsonBody);
// 응답 처리
Request->OnProcessRequestComplete().BindLambda(
[OnSuccess, OnError](FHttpRequestPtr Req, FHttpResponsePtr Res, bool bSuccess)
{
if (bSuccess && Res.IsValid())
{
FString Response = Res->GetContentAsString();
FRes Result;
if (Result.FromJson(Response))
{
if (Result.ErrorCode.IsEmpty())
{
OnSuccess.ExecuteIfBound(Response);
}
else
{
OnError.ExecuteIfBound(Response);
}
}
else
{
OnError.ExecuteIfBound(TEXT("Failed to parse response"));
}
}
else
{
FString ErrorMsg = Res.IsValid() ? Res->GetContentAsString() : TEXT("Request failed");
OnError.ExecuteIfBound(ErrorMsg);
}
});
Request->ProcessRequest();
}
사용 예제
void UYourClass::RequestWithdrawal(const FString& AccessToken, const FString& Reason)
{
FWithDrawal::Send(
7, // 7일 유예 기간
AccessToken,
Reason,
FOnWithDrawalSuccess::CreateLambda([](const FString& Response)
{
FWithDrawal::FRes Result;
if (Result.FromJson(Response))
{
UE_LOG(LogTemp, Log, TEXT("회원 탈퇴 요청 완료: %s"), *Result.Status);
UE_LOG(LogTemp, Log, TEXT("7일 후 계정이 완전히 삭제됩니다."));
}
}),
FOnWithDrawalError::CreateLambda([](const FString& Error)
{
UE_LOG(LogTemp, Error, TEXT("회원 탈퇴 요청 실패: %s"), *Error);
})
);
}
탈퇴 유예 기간
탈퇴를 요청하면 지정한 유예 기간(period) 동안 계정이 보존됩니다. 유예 기간 내에 로그인하거나 복구 API를 호출하면 탈퇴를 취소할 수 있습니다. 유예 기간이 지나면 계정과 모든 데이터가 영구적으로 삭제됩니다.