使用now.gg的Unity登录模块,您可以在Unity上的应用程序/游戏中实现now.gg登录功能。
要使用now.gg的Unity登录模块实现登录功能,请按以下步骤操作:
now.gg登录的Unity模块包含在一个名为 NowGGUnitySdk.unitypackage 的Unity包文件中。
将模块添加到您的 Unity 项目中:
NowGGUnitySdk.unitypackage 文件。Assets/Plugins/Android 目录中。一旦now.gg登录模块被导入并添加依赖项后,您现在应该实现代码以将now.gg登录集成到您的应用程序/游戏中。
创建一个包含now.gg登录实现的类,并将其附加到您可以用来启动登录流程的游戏对象上。
要实现now.gg登录,您可以使用以下两种流程之一:
通过此流程,您可以实现now.gg登录并获取用户的基本个人资料。
要启动此流程,请使用您的 client_id 调用 NowGGLoginSdkManager 的登录函数,如下所示:
private string CLIENT_ID = "your_client_id";
public void Start()
{
NowGGLoginSdkManager.Instance.OnLoginSuccess += OnLoginSuccess;
NowGGLoginSdkManager.Instance.OnLoginFailed += OnLoginFailed;
}
// 用户点击登录按钮时调用此方法。
public void OnLoginButtonClick()
{
NowGGLoginSdkManager.Instance.Login(CLIENT_ID);
}
private void OnLoginSuccess(string email, string token, string hostUrl)
{
Debug.Log($"Login success with email: {email} and token is: {token}");
}
private void OnLoginFailed(int errorCode, string errorMsg)
{
Debug.Log($"Login failed with error code: {errorCode} and message: {errorMsg}");
}
注意:与now.gg登录模块相关的响应可以使用 OnLoginSuccess 和 OnLoginFailed 回调函数接收。
用户成功登录后,您将在 OnLoginSuccess 回调函数中从令牌参数(token parameter)中获取请求的 token(令牌),以及用户的电子邮件。
通过此流程,您可以实现now.gg登录并获取详细的用户和会话信息。
这是一个使用授权码生成 token 和 refresh_token 的更安全的流程。
使用您的 client_id 以及 code 作为附加参数,调用 NowGGLoginSdkManager 类的登录函数,如下所示:
private string CLIENT_ID = "your_client_id";
public void Start()
{
NowGGLoginSdkManager.Instance.OnLoginSuccess += OnLoginSuccess;
NowGGLoginSdkManager.Instance.OnLoginFailed += OnLoginFailed;
}
// 用户点击登录按钮时调用此方法。
public void OnLoginButtonClick()
{
NowGGLoginSdkManager.Instance.Login(CLIENT_ID, "code");
}
private void OnLoginSuccess(string email, string token, string hostUrl)
{
Debug.Log($"Login success with email: {email} and authorization code is: {token}");
}
private void OnLoginFailed(int errorCode, string errorMsg)
{
Debug.Log($"Login failed with error code: {errorCode} and message: {errorMsg}");
}
注意:与now.gg登录模块相关的响应可以使用 OnLoginSuccess 和 OnLoginFailed 回调函数接收。
用户成功登录后,您将在 OnLoginSuccess 回调函数中,从令牌参数中获取请求的授权码,以及用户的电子邮件。
此部分列出了登录失败的场景,适用于基本登录流程和高级登录流程。
如果登录失败,您将在 OnLoginFailed 回调函数中收到错误码和错误信息。您可以根据收到的错误信息进一步调查该错误。
如果登录失败并出现错误 “No nowGG account present”,您可以调用 NowGGLoginSdkManager 类的 AddNowGGAccount 函数在运行时添加一个账户,如下所示:
private void OnLoginFailed(int errorCode, string errorMsg)
{
statusText.text = "Login Failed: " + errorMsg;
if (errorMsg.Equals("No nowgg account present") || errorCode == 1)
NowGGLoginSdkManager.Instance.AddNowGGAccount();
}
成功登录后,您现在获得了 token。您可以使用此令牌来获取用户个人资料(User Profile Information)。
我们推荐在您应用的后端服务器使用此 token,并参考 此章节 以获取登录用户的个人资料。
如果您的应用程序没有后端服务器,您可以按照以下章节来获取用户个人资料。
您可以查看我们的示例实现,使用“设备上的”(’on-device’)API调用获取已登录用户的个人资料。参考 演示工程。
例如,要获取已登录用户的个人资料,包括用户ID,您可以调用 LoginTokenVerification 类的 VerifyToken 函数,并在 TokenVerifyResponse 回调的 userDataVerified 对象中获取所需的信息。
以下代码说明了这一实现:
private void OnLoginSuccess(string email, string token, string hostUrl)
{
Debug.Log($"Login success with email: {email} and token is: {token}");
// 验证令牌以获取用户详情。我们推荐使用您的后端服务器来验证令牌以提高安全性。
StartCoroutine(LoginTokenVefication.VerifyToken(token, CLIENT_ID, TokenVerifyResponse));
}
private void TokenVerifyResponse(UserDataVerified userDataVerified)
{
Debug.Log($"User id: {userDataVerified.userId}");
string userId = userDataVerified.userId;
string name = userDataVerified.name;
string email = userDataVerified.email;
string picture = userDataVerified.picture;
}
您可以在模块演示工程中找到该类。
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class LoginTokenVerification : MonoBehaviour
{
public static IEnumerator VerifyToken(string token, string client_id, Action tokenVerifyResponse)
{
WWWForm form = new WWWForm();
form.AddField("token_type", "id_token");
form.AddField("token", token);
form.AddField("client_id", client_id);
UnityWebRequest www = UnityWebRequest.Post("https://now.gg/accounts/oauth2/v1/verify-token", form);
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log($"Error in token verification: {www.error}");
}
else
{
Debug.Log($"token verification response: {www.downloadHandler.text}");
TokenVerification tokenVerification = JsonUtility.FromJson(www.downloadHandler.text);
if (tokenVerifyResponse != null)
tokenVerifyResponse(tokenVerification.userData);
}
}
}
[System.Serializable]
public class TokenVerification
{
public string success;
public string code;
[SerializeField] private UserDataVerified decodedData;
public UserDataVerified userData { get { return decodedData; } }
public string msg;
}
[System.Serializable]
public class UserDataVerified
{
public string iss;
public string sub;
public string aud;
public string exp;
public string iat;
public string auth_time;
public string tokenId;
public string sessionId;
public string scope;
public string email;
public string name;
public string picture;
public string mobile;
public string userId;
}
获取用户详情后,您应该将其保存在应用的数据库中,并在下次用户启动应用时,使用保存的信息跳过登录流程。
注意:
userDataVerified.userId 来获取userId。使用高级登录流程:
token 和 refresh_token。
一旦您获得授权码(code),将其发送到您应用程序的后端服务器,并使用 生成令牌API,以使用授权码与now.gg服务器交换 token 和 refresh_token。
token 调用now.gg API(用户信息和会话信息)。refresh_token 以在令牌过期时获取新的 token。您有了令牌,就可以使用它来获取用户信息和会话信息。
如果您的 token 已过期,您可以使用 refresh_token 调用 生成令牌 API来生成新的令牌。
请通过 dev-support@now.gg 联系我们,我们很乐意为您提供帮助。
用户帐户服务
用户帐户服务
文档版本 1.0