认证
将请求UUID与账号进行关联的API。
URL确认
此API使用 service-account.playnanoo.com 域名。
API信息
- URL:
https://service-account.playnanoo.com/api/v20240401/link - Method:
PUT - 需要认证: 是
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| request_uuid | string | 必填 | 请求唯一ID (UUID) |
| platform | string | 必填 | 平台 (例如: "aos", "ios") |
| device_id | string | 必填 | 设备唯一ID |
| device_model | string | 必填 | 设备型号 |
| device_os | string | 必填 | 设备OS |
| device_language | string | 必填 | 设备语言 (例如: "KO", "EN") |
响应数据
Status: 关联结果状态
Unreal C++实现
头文件 (CustomLink.h)
// CustomLink.h
#pragma once
#include "CoreMinimal.h"
#include "Json.h"
#include "JsonUtilities.h"
// 응답 콜백 델리게이트
DECLARE_DELEGATE_OneParam(FOnCustomLinkSuccess, const FString&);
DECLARE_DELEGATE_OneParam(FOnCustomLinkError, const FString&);
class YOURPROJECT_API FCustomLink
{
public:
// 요청 구조체 (디바이스 정보는 FPlayNANOOHelper::CreateRequestBody()에서 자동 생성)
struct FReq
{
FString request_uuid;
};
// 응답 구조체
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(
const FString& RequestUUID,
FOnCustomLinkSuccess OnSuccess,
FOnCustomLinkError OnError
);
};
实现文件 (CustomLink.cpp)
// CustomLink.cpp
#include "CustomLink.h"
#include "PlayNANOOHelper.h"
#include "Http.h"
void FCustomLink::Send(
const FString& RequestUUID,
FOnCustomLinkSuccess OnSuccess,
FOnCustomLinkError OnError)
{
// 요청 데이터 생성 (디바이스 정보는 자동 포함)
TSharedPtr<FJsonObject> JsonObject = FPlayNANOOHelper::CreateRequestBody();
// API 전용 파라미터 추가
JsonObject->SetStringField(TEXT("request_uuid"), RequestUUID);
JsonObject->SetStringField(TEXT("account_type"), TEXT("LINK"));
// 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/link"));
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::LinkCustomAccount(const FString& UUID)
{
FCustomLink::Send(
UUID,
FOnCustomLinkSuccess::CreateLambda([](const FString& Response)
{
FCustomLink::FRes Result;
if (Result.FromJson(Response))
{
UE_LOG(LogTemp, Log, TEXT("커스텀 계정 연동 완료: %s"), *Result.Status);
}
}),
FOnCustomLinkError::CreateLambda([](const FString& Error)
{
UE_LOG(LogTemp, Error, TEXT("커스텀 계정 연동 실패: %s"), *Error);
})
);
}
使用场景
此API在将特定请求UUID与当前登录账号关联时使用。例如,可以将网页上创建的UUID与游戏客户端关联,或在跨平台账号关联时使用。