인증 코드를 사용하여 백엔드 서버가 있는 앱에서 유저 및 세션 정보를 호출하는 방법입니다.
설명:
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