Unity登录模块

使用now.gg的Unity登录模块,您可以在Unity上的应用程序/游戏中实现now.gg登录功能。

要使用now.gg的Unity登录模块实现登录功能,请按以下步骤操作:

  1. 下载并导入now.gg登录Unity模块。
  2. 添加所需的依赖项。
  3. 将now.gg登录实现到您的工程中。

下载并导入模块

now.gg登录的Unity模块包含在一个名为 nowgg-payments-login.unitypackage 的Unity包文件中。

将模块添加到您的 Unity 工程中:

  1. 下载包 含有最新版本的now.gg登录Unity模块。
  2. 下载模块后,将其导入到您的Unity工程中。操作如下:
    • 点击 Assets > Import Package > Custom Package,如下所示:
    • 选择之前下载的 nowgg-payments-login.unitypackage
    • 选择所有列出的文件,然后点击Import

一旦所有模块文件都导入完成,一个名为 ‘NowGGSdk‘ 的文件夹将被添加到您的工程中。您可以在 Assets folder 文件夹的根目录找到它。

注意:请不要修改 NowGGSdk 文件夹,因为它包含所有与now.gg登录相关的资源。

添加所需的依赖项

此操作将使用Unity外部依赖管理器(External Dependency Manager)下载并将所有需要的依赖项添加到工程的 Assets/Plugins/Android 目录中。

要添加所需的依赖项,请按以下步骤操作:

  • 点击 Assets > External Dependency Manager > Android Resolver > Resolve

实现now.gg登录

一旦now.gg登录模块被导入并添加依赖项后,您现在应该实现代码以将now.gg登录集成到您的应用程序/游戏中。

1. 显示 now.gg 登录按钮

1.1 下载 now.gg 登录按钮资源

now.gg 登录按钮资源包含在 now.gg SDK 包Assets/Login目录下。

1.2 选择登录按钮选项
  • 推荐的登录按钮: 使用提供的按钮资源以获得标准的外观和感觉。
  • 自定义登录按钮: 使用提供的仅包含标志的资源和您自己的文字,创建一个符合您应用程序风格的“使用 now.gg 登录”按钮。

重要信息

  • 在用户初次登录时,必须显示‘now.gg 登录按钮’并通过点击触发登录。对于后续登录,将用户的信息保存到应用程序的数据库或共享偏好设置中,以跳过登录过程。

2. 开始登录流程

创建一个包含now.gg登录实现的类,并将其附加到您可以用来启动登录流程的游戏对象上。

要实现now.gg登录,您可以使用以下两种流程之一:

2.1 基本登录流程

通过此流程,您可以实现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(令牌),以及用户的电子邮件。

2. 高级登录流程

通过此流程,您可以实现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 回调函数中收到错误码和错误信息。您可以根据收到的错误信息进一步调查该错误。

没有nowGG账户

如果登录失败并出现错误 “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,并参考 此章节 以获取登录用户的个人资料。

重要信息

  • 不要使用用户的电子邮件地址或用户ID来与您应用程序的后端服务器通信。而应将用户的ID token发送到您的后端服务器并 在服务器上验证该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;
 }
LoginTokenVerification 类:

您可以在模块演示工程中找到该类。

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

获取用户详情后,您应该将其保存在应用的数据库中,并在下次用户启动应用时,使用保存的信息跳过登录流程。

注意:

  • 建议不要使用电子邮件地址来标识用户。请使用userId
  • 如果您的应用程序没有后端服务器,您可以在客户端使用 userDataVerified.userId 来获取userId
  • 如果您的应用程序有后端服务器,您可以调用 验证令牌API,并从响应中的用户数据取得userId。

获取用户和会话信息 | 高级登录流程

使用高级登录流程:

  • 您的应用程序通过发送授权码(code)到您的后端服务器,以获得授权。
  • 然后您的后端服务器将交换授权码,以从now.gg服务器获取 token 和 refresh_token
    • 这使得您的应用程序后端服务器能够在用户离线时对now.gg服务器进行API调用。

注意:

  • 这是一个更安全的登录认证流程,仅适用于具有后端服务器的应用程序
  • 如果您的应用程序没有后端服务器,您可以继续使用 基本登录流程

1. 生成令牌和刷新令牌

一旦您获得授权码(code),将其发送到您应用程序的后端服务器,并使用 生成令牌API,以使用授权码与now.gg服务器交换 token 和 refresh_token

  • 使用 token 调用now.gg API(用户信息和会话信息)。
  • 存储 refresh_token 以在令牌过期时获取新的 token
2. 使用令牌获取用户信息和会话信息

您有了令牌,就可以使用它来获取用户信息和会话信息。

  • 要获取用户信息,您可以使用 UserInfo API。
  • 要获取会话信息,您可以使用 SessionInfo API。
3. 刷新令牌

如果您的 token 已过期,您可以使用 refresh_token 调用 生成令牌 API来生成新的令牌。

需要帮助?

请通过 dev-support@now.gg 联系我们,我们很乐意为您提供帮助。

×
文本已复制到剪贴板
copyLinkText
有疑问?请通过以下方式联系我们: dev-support@now.gg