Skip to main content

Account Registration and Authentication

Register and authenticate using Google ID.
Available for both iOS and Android.

Call Information

AccountSocialSignIn(string googleIdToken, string accountType, PlayNANOODelegate callback) {}

Call Information Details

ParameterDescriptionType
googleIdTokenGoogle ID TokenString
accountTypeAccount typeString
callbackCommunication ResultPlayNANOODelegate

Source Code

using System;
using System.Threading.Tasks;
using Google;
using PlayNANOO;

public class PlayNANOOExample : MonoBehaviour
{
Plugin plugin;
Queue<bool> queue;
string token;
GoogleSignInConfiguration googleSignInConfiguration;

void Start()
{
plugin = Plugin.GetInstance();

queue = new Queue<bool>();
googleSignInConfiguration = new GoogleSignInConfiguration
{
RequestIdToken = true,
WebClientId = "Enter web client ID here.",
};
}

public void SignIn()
{
GoogleSignIn.Configuration = googleSignInConfiguration;
GoogleSignIn.Configuration.UseGameSignIn = false;
GoogleSignIn.Configuration.RequestIdToken = true;
GoogleSignIn.DefaultInstance.SignIn().ContinueWith(OnAuthenticationFinished);
}

void Update()
{
Services();
}

void Services()
{
while (queue.Count > 0)
{
bool isResult = queue.Dequeue();
if (isResult)
{
plugin.AccountSocialSignIn(task.Result.IdToken, Configure.PN_ACCOUNT_GOOGLE, (status, errorCode, jsonString, values) =>
{
if (status == Configure.PN_API_STATE_SUCCESS)
{
Debug.Log(values["access_token"].ToString());
Debug.Log(values["refresh_token"].ToString());
Debug.Log(values["uuid"].ToString());
Debug.Log(values["openID"].ToString());
Debug.Log(values["nickname"].ToString());
Debug.Log(values["linkedID"].ToString());
Debug.Log(values["linkedType"].ToString());
Debug.Log(values["country"].ToString());
}
else
{
if (values != null)
{
if (values["ErrorCode"].ToString() == "30007")
{
Debug.Log(values["WithdrawalKey"].ToString());
}
else if (values["ErrorCode"].ToString() == "70002")
{
Debug.Log(values["BlockKey"].ToString());
}
else
{
Debug.Log("Fail");
}
}
else
{
Debug.Log("Fail");
}
}
});
}
else
{
Debug.Log("Fail");
}
}
}

internal void OnAuthenticationFinished(Task<GoogleSignInUser> task)
{
if (task.IsFaulted)
{
using (IEnumerator<System.Exception> enumerator = task.Exception.InnerExceptions.GetEnumerator())
{
if (enumerator.MoveNext())
{
GoogleSignIn.SignInException error = (GoogleSignIn.SignInException)enumerator.Current;
Debug.Log("Got Error: " + error.Status + " " + error.Message);
queue.Enqueue(false);
}
else
{
Debug.Log("Got Unexpected Exception?!?" + task.Exception);
}
}
}
else if (task.IsCanceled)
{
Debug.Log("Canceled");
}
else
{
token = task.Result.IdToken;
queue.Enqueue(true);
}
}
}

Communication Result

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"Token" : {
"AccessToken" : "String",
"RefreshToken" : "String"
},
"Player" : {
"UserUniqueID" : "String",
"OpenID" : "String",
"Nickname" : "String",
"LinkedID" : "String",
"LinkedType" : "String",
"Country" : "String"
}
}

Communication Result Details

Data KeyDescriptionType
Token.AccessTokenPlayer access tokenstring
Token.RefreshTokenPlayer refresh tokenstring
Player.UserUniqueIDPlayer's unique IDstring
Player.OpenIDPlayer's unique open IDstring
Player.NicknamePlayer's nicknamestring
Player.LinkedIDPlayer's linked IDstring
Player.LinkedTypePlayer's link typestring
Player.CountryPlayer's country codestring
WithdrawalKeyAccount withdrawal query keystring

Error Information

No player information exists
ErrorCode : 30000
ErrorMessage : NotFoundAccountException

Player information is being used on another device
ErrorCode : 30006
ErrorMessage : DuplicatedDeviceException

Player has requested withdrawal
ErrorCode : 30007
ErrorMessage : WithDrawalException