Skip to main content

iOS Registration and Authentication

Use Apple ID for account registration and authentication.

Register Apple Authentication SDK

  • Download the Apple Authentication Unity Package.
  • Import the Apple Authentication Unity Package into your project.

Download Apple Authentication Unity Package

Call Information

SocialSignIn(string appleIdToken, string accountType, PlayNANOODelegate callback) {}

Call Details

ParameterDescriptionType
appleIdTokenApple ID TokenString
accountTypeAccount typeString
callbackCommunication ResultPlayNANOODelegate

Source Code

using AppleAuth;
using AppleAuth.Native;
using AppleAuth.Enums;
using AppleAuth.Extensions;
using AppleAuth.Interfaces;
using PlayNANOO;

public class PlayNANOOExample : MonoBehaviour
{
IAppleAuthManager _appleAuthManager;
Plugin plugin;

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

if (AppleAuthManager.IsCurrentPlatformSupported)
{
var deserializer = new PayloadDeserializer();
_appleAuthManager = new AppleAuthManager(deserializer);
}
}

private void Update()
{
_appleAuthManager?.Update();
}

public void SignIn()
{
var loginArgs = new AppleAuthLoginArgs();

this._appleAuthManager.LoginWithAppleId(
loginArgs,
credential =>
{
var appleIdCredential = credential as IAppleIDCredential;
if (appleIdCredential != null)
{
string idToken = Encoding.UTF8.GetString(appleIdCredential.IdentityToken, 0, appleIdCredential.IdentityToken.Length);
plugin.AccountManagerV20240401.SocialSignIn(idToken, Configure.PN_ACCOUNT_APPLE_ID, (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());
Debug.Log(values["purchaseCount"].ToString());
Debug.Log(values["purchaseTotalPrice"].ToString());
Debug.Log(values["purchaseCurrencyCode"].ToString());
Debug.Log(values["purchaseVoidedCount"].ToString());
Debug.Log(values["purchaseVoidedTotalPrice"].ToString());
Debug.Log(values["purchaseVoidedCurrencyCode"].ToString());
Debug.Log(values["country"].ToString());
Debug.Log(values["timezone"].ToString());
Debug.Log(values["offset"].ToString());
Debug.Log(values["joinPeriod"].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");
}
}
});
}
},
error =>
{
// Something went wrong
var authorizationErrorCode = error.GetAuthorizationErrorCode();
}
);
}
}

Response

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",
"PurchaseCount" : "Integer",
"PurchaseTotalPrice" : "Double",
"PurchaseCurrencyCode" : "String",
"PurchaseVoidedCount" : "Integer",
"PurchaseVoidedTotalPrice" : "Double",
"PurchaseVoidedCurrencyCode" : "String",
"Country" : "String",
"Timezone" : "String",
"Offset" : "Integer",
"JoinPeriod" : "Integer"
}
}

Response Details

Data KeyDescriptionType
Token.AccessTokenPlayer access tokenstring
Token.RefreshTokenPlayer refresh tokenstring
Player.UserUniqueIDPlayer unique IDstring
Player.OpenIDPlayer unique open IDstring
Player.NicknamePlayer nicknamestring
Player.LinkedIDPlayer linked IDstring
Player.LinkedTypePlayer link typestring
Player.PurchaseCountPlayer purchase countinteger
Player.PurchaseTotalPricePlayer cumulative purchase amountdouble
Player.PurchaseCurrencyCodePlayer purchase currencystring
Player.PurchaseVoidedCountPlayer refund countinteger
Player.PurchaseVoidedTotalPricePlayer cumulative refund amountdouble
Player.PurchaseVoidedCurrencyCodePlayer refund currencystring
Player.CountryPlayer country codestring
Player.TimezonePlayer country timezonestring
Player.OffsetPlayer timezone offset (based on UTC)integer
Player.JoinPeriodPlayer membership durationinteger
WithdrawalKeyWithdrawal account lookup keystring

Error Information

If player information does not exist. ErrorCode : 30000 ErrorMessage : NotFoundAccountException

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

If the player has requested withdrawal ErrorCode : 30007 ErrorMessage : WithDrawalException