Skip to main content

Social Login

This API allows login with social accounts (Google, Facebook, Apple, etc.).

URL Confirmation

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

API Information

  • URL: https://service-account.playnanoo.com/api/v20240101/social/signin
  • Method: PUT
  • Authentication Required: No

Request Parameters

ParameterTypeRequiredDescription
request_uuidstringRequiredRequest unique ID (UUID)
account_typestringRequiredSocial account type (e.g., "google", "facebook", "apple")
account_tokenstringRequiredSocial account access token
platformstringRequiredPlatform (e.g., "aos", "ios")
device_idstringRequiredDevice unique ID
device_modelstringRequiredDevice model name
device_osstringRequiredDevice OS
device_languagestringRequiredDevice language (e.g., "KO", "EN")
DeviceInfo Inheritance

The Req class for this API inherits from DeviceInfo. All properties of DeviceInfo are automatically included.

Response Data

Res Class

FieldTypeDescription
TokenSerializeTokenDataToken information
PlayerSerializePlayerDataPlayer information

SerializeTokenData Structure

FieldTypeDescription
AccessTokenstringAccess token
RefreshTokenstringRefresh token

SerializePlayerData Structure

FieldTypeDescription
UserUniqueIDstringUser unique ID
OpenIDstringOpen ID
NicknamestringNickname
LinkedIDstringLinked ID
LinkedTypestringLinked type
PurchaseCountintPurchase count
PurchaseCurrencyCodestringPurchase currency code
PurchaseTotalPricedoubleTotal purchase amount
PurchaseVoidedCountintRefund count
PurchaseVoidedCurrencyCodestringRefund currency code
PurchaseVoidedTotalPricedoubleTotal refund amount
CountrystringCountry
TimezonestringTimezone
OffsetintTime offset
JoinPeriodintJoin period

Unity C# Implementation

BaseResponse Class

Base class for all API responses.

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

Field descriptions:

  • ErrorCode: Error code
  • Message: Error message
  • WithdrawalKey: Key required for recovery when the account is in withdrawal grace period (only provided for accounts pending withdrawal)
  • BlockKey: Key provided when the account is blocked (only provided for blocked accounts)

Social Login Class

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

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

[Serializable]
public class Req : DeviceInfo
{
public string request_uuid;
public string account_type;
public string account_token;

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

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;
}
}

Usage Examples

Google Login

public void GoogleSignIn(string googleAccessToken)
{
SocialSignin.Req req = new SocialSignin.Req();

StartCoroutine(req.Send(
request_uuid: Guid.NewGuid().ToString(),
account_type: "google",
account_token: googleAccessToken,
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}");
},
onError: (error) =>
{
Debug.LogError($"Google 로그인 실패: [{error.ErrorCode}] [{error.Message}]");
}
));
}

Facebook Login

public void FacebookSignIn(string facebookAccessToken)
{
SocialSignin.Req req = new SocialSignin.Req();

StartCoroutine(req.Send(
request_uuid: Guid.NewGuid().ToString(),
account_type: "facebook",
account_token: facebookAccessToken,
onSuccess: res =>
{
Debug.Log("Facebook 로그인 성공!");
Debug.Log($"UserUniqueID: {res.Player.UserUniqueID}");
},
onError: (error) =>
{
Debug.LogError($"Facebook 로그인 실패: [{error.ErrorCode}] [{error.Message}]");
}
));
}

Apple Login

public void AppleSignIn(string appleIdToken)
{
SocialSignin.Req req = new SocialSignin.Req();

StartCoroutine(req.Send(
request_uuid: Guid.NewGuid().ToString(),
account_type: "apple",
account_token: appleIdToken,
onSuccess: res =>
{
Debug.Log("Apple 로그인 성공!");
Debug.Log($"UserUniqueID: {res.Player.UserUniqueID}");
},
onError: (error) =>
{
Debug.LogError($"Apple 로그인 실패: [{error.ErrorCode}] [{error.Message}]");
}
));
}

Supported Social Account Types

account_typeDescriptionRequired Token
googleGoogle accountGoogle OAuth2 Access Token
facebookFacebook accountFacebook Access Token
appleApple accountApple ID Token
Social Login SDKs

To implement login for each social platform, you need the corresponding platform's SDK:

request_uuid

request_uuid is a UUID to uniquely identify each login request. You can generate it using Guid.NewGuid().ToString().