콘텐츠로 이동

커스텀 계정 연동

현재 로그인한 Player ID에 커스텀 계정을 추가로 연결합니다. 연결한 뒤에는 사용자가 기존 로그인 수단과 커스텀 계정 중 어느 쪽으로 로그인해도 같은 Player ID로 로그인해 같은 플레이 데이터를 계속 이용합니다.

커스텀 계정 연동도 커스텀 계정으로 로그인과 마찬가지로 앱 서버가 발급받은 grant key를 사용합니다. 앱 클라이언트는 커스텀 인증 제공자의 인증 정보를 직접 다루지 않습니다.

커스텀 계정 연동은 앱 서버와 앱 클라이언트가 나누어 처리합니다.

  1. 앱 클라이언트가 사용자를 앱 서버 또는 앱이 사용하는 인증 시스템으로 인증합니다.
  2. 앱 서버가 사전 인가 키 발급으로 Hive Axyl 서버에 연동용 grant key 발급을 요청합니다. 이때 커스텀 인증 제공자 식별자, 그 제공자의 사용자 식별자, 연동 대상 Player ID를 함께 전달합니다.
  3. 앱 서버가 발급받은 grant key를 앱 클라이언트에 전달합니다.
  4. 앱 클라이언트가 grant key로 LinkCustomProviderAsync()를 호출합니다.
  5. Hive Axyl 인증 서버가 현재 로그인된 Player ID에 커스텀 계정을 연결합니다.

grant key는 발급 후 60초 동안만 유효하고 한 번만 사용할 수 있습니다. grant key의 개념과 앱 서버가 처리할 내용은 추가 보안 적용을 참조하세요.

호출하기 전에 사용자가 로그인하여 세션이 활성화된 상태여야 합니다. 연동은 현재 세션의 Player ID를 기준으로 처리됩니다.

Method

LinkCustomProviderAsync

LinkCustomProviderAsync()를 호출해 현재 로그인된 Player ID에 커스텀 계정을 연결합니다.

호출 파라미터

필드명 타입 필수 여부 설명
request CustomLinkRequest Required 커스텀 계정 연동 요청
context ApiCallContext Optional 호출 단위 설정 객체입니다. 생략하면 기본값이 사용됩니다.

CustomLinkRequest

필드명 타입 필수 여부 설명
GrantKey string Required 앱 서버가 연동용으로 발급받아 전달한 사전 인증 키

호출 예시

요청 수행이 불가능한 공통 실패(Failure)의 결과 모델과 처리 원칙은 공통 오류 처리를 참조하세요.

using Hive.Axyl.Auth;
using Hive.Axyl.Core;
using UnityEngine;

IAuthService auth = HiveCore.Resolve<IAuthService>();

var result = await auth.LinkCustomProviderAsync(new CustomLinkRequest {
    GrantKey = customLinkGrantKey,
});

switch (result)
{
    case AuthLinkCustomProviderResult.Success success:
        Debug.Log($"커스텀 계정 연동 완료: PlayerId={success.Data.PlayerId}");
        break;

    case AuthLinkCustomProviderResult.InvalidGrantKey:
        // grant key가 만료되었거나 이미 사용됨 → 앱 서버에서 새로 발급받아 재시도
        break;

    case AuthLinkCustomProviderResult.PlayerIdDoesNotMatch:
        // grant key의 연동 대상과 현재 세션의 Player ID가 다름
        break;

    case AuthLinkCustomProviderResult.ProviderOwnedByOther:
        // 이 커스텀 계정이 다른 Player ID에 이미 연동됨 → 계정 충돌 처리
        break;

    case AuthLinkCustomProviderResult.Failure failure:
        HiveError err = failure.Problem;
        Debug.LogError($"[{err.Code}] {err.Message} (trace: {err.TraceId})");
        break;

    // 안전망: 처리하지 않은 결과 및 알 수 없는 신규 결과(UnknownOutcome)
    default:
        Debug.LogWarning($"처리되지 않은 결과: {result.GetType().Name}");
        break;
}

응답 데이터

성공 시 AuthLinkCustomProviderResult.Success의 Data(ProviderLinkResponseData)에 연결된 커스텀 계정 정보가 담깁니다.

필드명 타입 필수 여부 설명
Data.PlayerId long Required 커스텀 계정이 연결된 Player ID
Data.ProviderId Provider Required 연결된 로그인 수단. 커스텀 계정은 CustomProvider입니다.
Data.ProviderUserId string Required 커스텀 인증 제공자의 사용자 식별자
Data.ProviderIndex int Required 연결된 로그인 수단을 나타내는 숫자 식별자

응답 예시

// Success 분기에서 success.Data 예시
// success.Data.PlayerId       = 10000021454
// success.Data.ProviderId     = Provider.CustomProvider
// success.Data.ProviderUserId = "custom-1234567890"
// success.Data.ProviderIndex  = 3

응답 상태

AuthLinkCustomProviderResult의 응답 케이스는 switch 구문으로 처리하는 것을 권장합니다.

응답 케이스 설명 앱 클라이언트 대응
Success 연동 성공 연동 상태 화면 갱신
InvalidGrantKey grant key가 만료되었거나 이미 사용되었거나 요청 정보와 맞지 않는 경우 앱 서버에서 grant key를 새로 발급받아 재시도
PlayerIdDoesNotMatch grant key의 연동 대상 Player ID와 현재 세션의 Player ID가 다른 경우 현재 세션과 발급 대상 확인
ProviderTypeAlreadyExists 현재 Player ID에 이미 커스텀 계정이 연동된 경우 기존 연동 상태 안내
ProviderOwnedByOther 이 커스텀 계정이 다른 Player ID에 이미 연동된 경우 계정 연동 시 충돌 처리
ProviderAlreadyConnected 이미 현재 Player ID에 연결된 계정인 경우 중복 요청으로 처리
ProviderNotSupported 커스텀 계정 연동이 지원되지 않는 경우 콘솔의 로그인 설정 확인
ProviderConfigNotFound 콘솔에 커스텀 계정 설정이 없는 경우 콘솔의 로그인 설정 확인
PlayerNotFound 연동 대상 Player ID를 찾을 수 없는 경우 현재 세션 확인
AppIdMismatch 요청의 앱 정보가 세션의 앱 정보와 다른 경우 SDK 초기화 상태 확인
InvalidGatewayContext 인증 정보가 요청에 실리지 않은 경우 세션 활성화 상태 확인
IpBlocked 접속 IP가 차단된 경우 정책 안내
AppNotFound 앱 정보를 찾을 수 없는 경우 콘솔의 앱 등록 상태 확인
TerminateService 서비스가 종료된 앱인 경우 서비스 운영 상태 확인
UnknownOutcome 이 SDK 버전이 알지 못하는 신규 결과 로깅 후 보수적으로 처리
Failure 공통 Failure입니다. 필수 파라미터 누락·형식 오류(invalid_parameter), 필수 필드 누락(missing_field), X-App-Id 헤더 누락(missing_app_id)도 여기로 분기하며 원인은 Failure.Problem.ExternalCode에 담깁니다. 공통 오류 처리를 참조하세요. 공통 오류 처리 기준에 따라 처리

다음 단계