유저 및 세션 정보 호출

인증 코드를 사용하여 백엔드 서버가 있는 앱에서 유저 및 세션 정보를 호출하는 방법입니다.

설명:

  • 앱 백엔드 서버에 인증 코드를 보내고 클라이언트 측에서 앱이 인증됩니다.
  • 이후 앱 백엔드 서버는 인증 코드를 교환하여 now.gg 서버에서 자체 tokenrefresh_token을 받습니다.
    • 이를 통해 앱 백엔드 서버는 유저가 오프라인일 때 now.gg 서버의 API를 호출할 수 있습니다.

중요:

  • 이는 백엔드 서버가 있는 앱에만 적용할 수 있는 보다 안전한 로그인 인증 프로세스입니다.
  • 앱에 백엔드 서버가 없는 경우 여기를 따라 기본 로그인 프로세스를 사용하실 수 있습니다.

요구 사항

1. client_id를 통한 인증 코드 생성 및 유저 로그인

인증 코드는 백엔드 서버가 now.gg 서버와 교환하여 tokenrefresh_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’);
                 // 해당 코드를 백엔드 서버로 보내고 토큰 생성 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 서버와 교환한 뒤 tokenrefresh_token을 수령합니다.

중요:

  • 토큰을 사용하여 now.gg API(유저 정보 및 세션 정보)를 호출합니다.
  • 토큰이 만료될 때 새 토큰을 얻으려면 refresh_token을 저장하시기 바랍니다.

4. 토큰으로 유저 및 세션 정보 호출

token 수령 후 이를 사용하여 유저 및 세션 정보를 가져오실 수 있습니다.

  • 유저 정보를 가져오기 위해 UserInfo API를 사용하실 수 있습니다.
  • 세션 정보를 가져오기 위해 SessionInfo API를 사용하실 수 있습니다.

5. 토큰 갱신

토큰이 만료된 경우 토큰 생성 API를 사용하여 refresh_token으로 토큰을 생성하실 수 있습니다.

×
클립보드에 복사된 텍스트
copyLinkText
질문이 있으신가요? 다음 주소로 문의하세요. dev-support@now.gg