Skip to main content

Token Refresh

Issue a new access token using a refresh token.

URL Confirmation

This API uses the service-account.playnanoo.com domain.

API Information

  • URL: https://service-account.playnanoo.com/api/v20240401/token/refresh
  • Method: PUT
  • Authentication Required: No

Request Parameters

ParameterTypeRequiredDescription
refresh_tokenstringRequiredRefresh token
platformstringRequiredPlatform (e.g., "aos", "ios")
device_idstringRequiredDevice unique ID
device_modelstringRequiredDevice model name
device_osstringRequiredDevice OS
device_languagestringRequiredDevice language (e.g., "KO", "EN")

Response Data

Res Class

FieldTypeDescription
TokenFSerializeTokenDataToken information
PlayerFSerializePlayerDataPlayer information

FSerializeTokenData Structure

FieldTypeDescription
AccessTokenFStringAccess token
RefreshTokenFStringRefresh token

FSerializePlayerData Structure

FieldTypeDescription
UserUniqueIDFStringUser unique ID
OpenIDFStringOpen ID
NicknameFStringNickname
LinkedIDFStringLinked ID
LinkedTypeFStringLinked type
PurchaseCountint32Purchase count
PurchaseCurrencyCodeFStringPurchase currency code
PurchaseTotalPricedoubleTotal purchase amount
PurchaseVoidedCountint32Refund count
PurchaseVoidedCurrencyCodeFStringRefund currency code
PurchaseVoidedTotalPricedoubleTotal refund amount
CountryFStringCountry
TimezoneFStringTimezone
Offsetint32Time offset
JoinPeriodint32Join period

Code Example

void UMyGame::RefreshToken(const FString& RefreshToken)
{
// Create request body with player information
TSharedPtr<FJsonObject> Body = FPlayNANOOHelper::CreateRequestBody();
Body->SetStringField(TEXT("refresh_token"), RefreshToken);

// Convert to JSON string
FString JsonBody = FPlayNANOOHelper::ToJsonString(Body);

// HTTP request
TSharedRef<IHttpRequest> Request = FHttpModule::Get().CreateRequest();
Request->SetURL(TEXT("https://service-account.playnanoo.com/api/v20240401/token/refresh"));
Request->SetVerb(TEXT("PUT"));
FPlayNANOOHelper::SetCommonHeaders(Request, false); // No authentication token required
Request->SetContentAsString(JsonBody);

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))
{
// Token information
const TSharedPtr<FJsonObject>* TokenObject;
if (JsonObject->TryGetObjectField(TEXT("Token"), TokenObject))
{
FString NewAccessToken;
(*TokenObject)->TryGetStringField(TEXT("AccessToken"), NewAccessToken);
UE_LOG(LogTemp, Log, TEXT("Token refresh successful"));
}

// Player information
const TSharedPtr<FJsonObject>* PlayerObject;
if (JsonObject->TryGetObjectField(TEXT("Player"), PlayerObject))
{
FString Nickname;
(*PlayerObject)->TryGetStringField(TEXT("Nickname"), Nickname);
UE_LOG(LogTemp, Log, TEXT("Nickname: %s"), *Nickname);
}
}
}
});

Request->ProcessRequest();
}
When to Refresh Token

When the access token expires and you receive a 401 Unauthorized response, issue a new access token using the refresh token.