使用now.gg的Unity登录模块,您可以在Unity上的应用程序/游戏中实现now.gg登录功能。
要使用now.gg的Unity登录模块实现登录功能,请按以下步骤操作:
now.gg登录的Unity模块包含在一个名为 nowgg-payments-login.unitypackage
的Unity包文件中。
将模块添加到您的 Unity 工程中:
nowgg-payments-login.unitypackage
。一旦所有模块文件都导入完成,一个名为 ‘NowGGSdk‘ 的文件夹将被添加到您的工程中。您可以在 Assets folder 文件夹的根目录找到它。
注意:请不要修改 NowGGSdk 文件夹,因为它包含所有与now.gg登录相关的资源。
此操作将使用Unity外部依赖管理器(External Dependency Manager)下载并将所有需要的依赖项添加到工程的 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 联系我们,我们很乐意为您提供帮助。