跳转到主要内容

v1 账号注册及认证(即将停止支持)

  • 该功能已被 Google 停止支持,仅可使用至 2025 年。
  • 使用 Google ID 进行会员注册和认证。
  • iOS、Android 均可使用。

调用信息

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

调用详细信息

参数说明类型
googleIdTokenGoogle ID TokenString
accountType账号类型String
callback通信结果PlayNANOODelegate

源代码

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 = "웹클라이언트 ID를 입력합니다.",
};
}

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.AccountManagerV20240401.SocialSignIn(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());
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");
}
}
});
}
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);
}
}
}

通信结果

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

通信结果详细信息

数据键说明类型
Token.AccessToken玩家访问令牌string
Token.RefreshToken玩家刷新令牌string
Player.UserUniqueID玩家唯一识别 IDstring
Player.OpenID玩家唯一识别 Open IDstring
Player.Nickname玩家昵称string
Player.LinkedID玩家关联识别 IDstring
Player.LinkedType玩家关联类型string
Player.PurchaseCount玩家支付次数integer
Player.PurchaseTotalPrice玩家支付累计金额double
Player.PurchaseCurrencyCode玩家支付货币string
Player.PurchaseVoidedCount玩家退款次数integer
Player.PurchaseVoidedTotalPrice玩家退款累计金额double
Player.PurchaseVoidedCurrencyCode玩家退款货币string
Player.Country玩家国家代码string
Player.Timezone玩家国家时区string
Player.Offset玩家时区时差(基于 UTC)integer
Player.JoinPeriod玩家注册时长integer
WithdrawalKey注销账号查询密钥string

错误信息

玩家信息不存在时。 ErrorCode : 30000 ErrorMessage : NotFoundAccountException

玩家信息在其他设备上使用中时 ErrorCode : 30006 ErrorMessage : DuplicatedDeviceException

玩家已申请注销时 ErrorCode : 30007 ErrorMessage : WithDrawalException