社交登录
使用社交账号(Google、Facebook、Apple等)登录。
URL确认
此API使用 service-account.playnanoo.com 域名。
API信息
- URL:
https://service-account.playnanoo.com/api/v20240101/social/signin - Method:
PUT - 需要认证: 否
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| request_uuid | FString | 必填 | 请求唯一ID (UUID) |
| account_type | FString | 必填 | 社交账号类型 (例如: "google", "facebook", "apple") |
| account_token | FString | 必填 | 社交账号访问Token |
| platform | FString | 必填 | 平台 (例如: "aos", "ios") - 自动包含 |
| device_id | FString | 必填 | 设备唯一ID - 自动包含 |
| device_model | FString | 必填 | 设备型号 - 自动包含 |
| device_os | FString | 必填 | 设备OS - 自动包含 |
| device_language | FString | 必填 | 设备语言 (例如: "KO", "EN") - 自动包含 |
自动包含的设备信息
使用FPlayNANOOHelper::CreateRequestBody()时,platform、device_id、device_model、device_os、device_language将自动包含。
响应数据
FSocialSigninResponse
| 字段 | 类型 | 说明 |
|---|---|---|
| Token | FTokenData | Token信息 |
| Player | FPlayerData | 玩家信息 |
FTokenData
| 字段 | 类型 | 说明 |
|---|---|---|
| AccessToken | FString | 访问Token |
| RefreshToken | FString | 刷新Token |
FPlayerData
| 字段 | 类型 | 说明 |
|---|---|---|
| UserUniqueID | FString | 用户唯一ID |
| OpenID | FString | Open ID |
| Nickname | FString | 昵称 |
| LinkedID | FString | 关联ID |
| LinkedType | FString | 关联类型 |
| PurchaseCount | int32 | 购买次数 |
| PurchaseCurrencyCode | FString | 购买货币代码 |
| PurchaseTotalPrice | double | 总购买金额 |
| Country | FString | 国家 |
| Timezone | FString | 时区 |
| Offset | int32 | 时间偏移 |
| JoinPeriod | int32 | 注册时长 |
代码示例
Google登录
#include "PlayNANOOHelper.h"
#include "HttpModule.h"
#include "Interfaces/IHttpRequest.h"
#include "Interfaces/IHttpResponse.h"
void UMyGame::GoogleSignin(const FString& GoogleAccessToken)
{
FString RequestUUID = FGuid::NewGuid().ToString();
// 요청 데이터 생성 (기기 정보는 자동으로 포함됨)
TSharedPtr<FJsonObject> Body = FPlayNANOOHelper::CreateRequestBody();
Body->SetStringField(TEXT("request_uuid"), RequestUUID);
Body->SetStringField(TEXT("account_type"), TEXT("google"));
Body->SetStringField(TEXT("account_token"), GoogleAccessToken);
// JSON 문자열 변환
FString JsonBody;
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&JsonBody);
FJsonSerializer::Serialize(Body.ToSharedRef(), Writer);
// HTTP 요청
TSharedRef<IHttpRequest, ESPMode::ThreadSafe> Request = FHttpModule::Get().CreateRequest();
Request->SetURL(TEXT("https://service-account.playnanoo.com/api/v20240101/social/signin"));
Request->SetVerb(TEXT("PUT"));
Request->SetContentAsString(JsonBody);
// 공통 헤더 설정 (로그인 API이므로 인증 토큰 불필요)
FPlayNANOOHelper::SetCommonHeaders(Request, false);
Request->OnProcessRequestComplete().BindLambda(
[](FHttpRequestPtr Req, FHttpResponsePtr Res, bool bSuccess)
{
if (bSuccess && Res.IsValid())
{
TSharedPtr<FJsonObject> JsonObject;
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(Res->GetContentAsString());
if (FJsonSerializer::Deserialize(Reader, JsonObject))
{
// 토큰 정보
const TSharedPtr<FJsonObject>* TokenObject;
if (JsonObject->TryGetObjectField(TEXT("Token"), TokenObject))
{
FString AccessToken;
(*TokenObject)->TryGetStringField(TEXT("AccessToken"), AccessToken);
UE_LOG(LogTemp, Log, TEXT("Google 로그인 성공"));
}
// 플레이어 정보
const TSharedPtr<FJsonObject>* PlayerObject;
if (JsonObject->TryGetObjectField(TEXT("Player"), PlayerObject))
{
FString UserUniqueID, Nickname;
(*PlayerObject)->TryGetStringField(TEXT("UserUniqueID"), UserUniqueID);
(*PlayerObject)->TryGetStringField(TEXT("Nickname"), Nickname);
UE_LOG(LogTemp, Log, TEXT("Nickname: %s"), *Nickname);
}
}
}
});
Request->ProcessRequest();
}
支持的社交账号类型
| account_type | 说明 | 所需Token |
|---|---|---|
| Google 账号 | Google OAuth2 Access Token | |
| Facebook 账号 | Facebook Access Token | |
| apple | Apple 账号 | Apple ID Token |
社交登录SDK
要实现各社交平台的登录,需要相应平台的SDK或插件。
request_uuid
request_uuid是用于唯一标识每个登录请求的UUID。可以使用FGuid::NewGuid().ToString()生成。