获取用户和会话信息

本文档主要介绍了使用具有后端服务器的应用程序的授权码来获取用户和会话信息。

使用此流程:

  • 您的应用程序通过向应用程序后端服务器发送授权码,在客户端获得授权。
  • 您的应用程序后端服务器通过交换授权码,从now.gg服务器获得自己的 token 和 refresh_token
    • 这使得您的应用程序后端服务器可以在用户离线时对now.gg服务器进行API调用。

注意:

  • 这是一个更安全的登录验证流程,它只适用于具有后端服务器的应用程序
  • 如果您的应用程序没有后端服务器,您可以按照 此章节 继续使用基本的登录流程。

前提条件

  • 确认已完成 集成now.gg登录 章节中描述的步骤。
  • 一个带有后端服务器的应用程序。

1. 使用client_id生成授权码(Authorization Code)并为用户登录

授权码是一个一次性码,您的后端服务器可以使用它与now.gg服务器交换,以获得 token 和 refresh_token

要使用 client_id 生成授权码并为用户登录,请参阅以下实现:

 public static final String CODE = "code";
  public static final String CLIENT_ID = "your client id";
  public static final String ACCOUNT_TYPE = "now.gg";
  public static final String HOST_URL = "hostUrl";

  private void signIn() {
      Account account = getNowggAccount();
      if (account != null) {
          Bundle bundle = new Bundle();
          bundle.putString("client_id", CLIENT_ID);
          String authTokenType = CODE;
          AccountManager.get(getApplicationContext()).
                  getAuthToken(account, authTokenType, bundle, MainActivity.this, new OnTokenAcquired(), null);
      }
      else {
          addNowggAccount();
      }
   }

   private Account getNowggAccount() {
      Account[] accounts = AccountManager.get(getApplicationContext()).getAccountsByType(ACCOUNT_TYPE);
      if (accounts.length > 0) {
          Log.d(TAG, "getNowggAccount: account found");
          // 当前仅支持在系统中添加一个now.gg账户
          return accounts[0];
      }
      return null;
   }

   private void addNowggAccount() {
      try {
          Intent intent = new Intent();
          intent.setComponent(new ComponentName("gg.now.accounts", "gg.now.accounts.AuthenticatorActivity"));
          intent.setAction("IAP_ADD_ACCOUNT");
          startActivity(intent);
      } catch (ActivityNotFoundException e) {
          e.printStackTrace();
      }
   }

注意:这个过程将在 OnTokenAcquired() 函数中生成一个回调。

2. 获取授权码

用户登录后,您将在 OnTokenAcquired 回调函数中获得请求的授权码。要获取授权码,请参考以下示例:

private class OnTokenAcquired implements AccountManagerCallback {
         @Override
         public void run(AccountManagerFuture result) {
             try {
    
             Bundle bundle = result.getResult();
             boolean success = bundle.getBoolean(AccountManager.KEY_BOOLEAN_RESULT, false);
             if (success) {
                 final String code = bundle.getString(‘authorization_code’);
                 // 您需要将此code发送到您应用的后端服务器,并用它在应用后端服务器调用生成令牌API以获取refresh_token/token,并等待服务器响应。
             }
             else {
                 // 获取令牌失败
                 // 发生错误时,开发者可以显示错误或者展示其它登录方式。
                 Log.d(TAG, "run: get token failed " + bundle);
             }
             } catch (AuthenticatorException e) {
                 e.printStackTrace();
             } catch (IOException exception) {
                 exception.printStackTrace();
             } catch (OperationCanceledException e) {
                 e.printStackTrace();
             }
         }
     }

重要信息

  • 您必须将此授权码发送到您的后端服务器,并用它在您的后端服务器上调用生成令牌API以获取 refresh_token/token,并等待服务器的响应。

3. 生成令牌和刷新令牌

一旦您有了授权码,将其发送到您的应用程序后端服务器,并使用 生成令牌API 同now.gg服务器交换此授权码以获取 token 和 refresh_token

注意:

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

4. 使用令牌获取用户和会话信息

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

5. 刷新令牌

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

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