인증 코드를 사용하여 백엔드 서버가 있는 앱에서 유저 및 세션 정보를 호출하는 방법입니다.
설명:
token
과 refresh_token
을 받습니다.
인증 코드는 백엔드 서버가 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()
에 콜백을 생성하게 됩니다.
유저가 로그인하면 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를 사용하여 코드를 now.gg 서버와 교환한 뒤 token
과 refresh_token
을 수령합니다.
refresh_token
을 저장하시기 바랍니다.token
수령 후 이를 사용하여 유저 및 세션 정보를 가져오실 수 있습니다.
토큰이 만료된 경우 토큰 생성 API를 사용하여 refresh_token
으로 토큰을 생성하실 수 있습니다.
목차
목차
문서 Rev. 1.0