Verified Parent Linking (VPL)
Verified parent linking (VPL)은 플레이어가 자신의 부모를 제품으로 초대할 수 있게 해 줍니다. 부모가 신원을 확인하면 그때부터 해당 플레이어의 컨트롤을 확인하고 설정할 수 있습니다. 예를 들어 스크린 타임이 있습니다.
VPL이란 무엇인가요?
Verified parent linking은 이미 제품 사용이 허용된 플레이어와 부모 사이에 보호자 관계를 성립시킵니다. 시작할지는 플레이어가 정합니다. 플레이어가 흐름을 시작하며, 부모가 수락하든 하지 않든 제품은 계속 동작합니다. 부모를 기다리지 않으며, 이것이 동의와 다른 점입니다.
게이트가 아니라 링크
이 구분이 기능 전체를 좌우하므로 분명히 밝혀 둘 필요가 있습니다.
Verifiable Parental Consent (VPC)는 게이트입니다. 플레이어가 허용되지 않은 동작에 도달하면 액세스가 차단되고, 신뢰할 수 있는 성인이 승인해야 다음으로 진행됩니다. 이는 데이터 처리에 대한 법적 동의입니다.
VPL은 링크입니다. 부모를 기다리지 않으며, 동의도 이루어지지 않습니다. VPL이 성립시키는 것은 법적 관계가 아니라 보호자 관계입니다.
| VPC | VPL | |
|---|---|---|
| 정식 명칭 | Verifiable Parental Consent | Verified parent linking |
| 발생 계기 | 가입 시점에 액세스 연령 미만이거나, GUARDIAN이 관리하는 기능에 도달 | 플레이어가 자신의 부모를 초대하기로 선택함 |
| 시작하는 주체 | 부모이며, 그동안 플레이어는 대기 | 플레이어가며, 부모는 아직 제품과 아무 관계가 없음 |
| 법적 성격 | 데이터 처리에 대한 동의(예: COPPA, GDPR-K) | 보호자 관계이며 데이터 처리에 대한 동의가 아님 |
| 강도 | 강함. 승인 전까지 기능 또는 제품이 차단됨 | 약함. 없어도 제품은 완전히 동작함 |
| 기록 대상 | 동의된 권한의 enabled 값 | 얼로원스와 스크린 타임 같은 컨트롤별 상태. 권한에는 기록하지 않음 |
| 기본 상태 | 승인 전까지 차단 | 연결되지 않음. 초대는 선택 사항 |
challenge.type | CHALLENGE_PARENTAL_CONSENT 또는 CHALLENGE_SESSION_UPGRADE | CHALLENGE_PARENT_INVITE |
| 호출하는 엔드포인트 | /age-gate/check 다음 /challenge/send-email, 또는 /session/upgrade | /age-gate/check 다음 /challenge/invite-parent |
VPC와 VPL은 상호 배타적입니다
VPC가 어떤 형태로든 적용될 수 있는 플레이어에게는 VPL이 제공되지 않습니다.
세션이 VPL 대상이 되려면 다음 두 가지가 모두 참이어야 합니다.
- 플레이어가 해당 관할권의 액세스 연령 이상이어서
/age-gate/check가PASS를 반환하고 세션이 생성되었습니다. - 그 세션의 어떤 권한도 플레이어의 관할권과 연령에서
managedBy: GUARDIAN이 아닙니다.
따라서 VPC가 발동할 수 있는 모든 경우는 VPL이 거부되는 경우입니다. 다음 표가 그 목록입니다.
| 플레이어의 상황 | VPC의 동작 | VPL을 사용할 수 없는 이유 |
|---|---|---|
| 관할권의 액세스 연령 미만 | /age-gate/check가 CHALLENGE_PARENTAL_CONSENT Challenge와 함께 CHALLENGE를 반환하고 세션은 생성되지 않음 | 세션이 없으면 부모를 초대할 대상이 없으므로 /challenge/invite-parent에 도달하지 않음 |
| 액세스 연령 미만이며 데이터 라이트 모드가 켜져 있음 | 동일한 CHALLENGE 응답에 childLiteAccessEnabled: true가 포함되며, 동의가 완료되기를 기다리는 동안 자체적인 안전 기본 경험으로 플레이어를 들여보내라는 신호가 됨 | 여전히 세션이 없으므로 초대에 도달하지 않음 |
액세스 연령 이상이지만 세션에 GUARDIAN 관리 권한이 있음 | 해당 권한이 잠긴 상태로 세션이 생성되고, 플레이어가 그 기능에 도달하면 /session/upgrade를 통해 VPC가 발동함 | 초대가 FEATURE_DISABLED로 거부됨. 호출하기 전에 세션의 permissions[]를 읽어 직접 확인할 수 있음 |
| 해당 관할권과 연령에서 제품이 금지됨 | /age-gate/check가 거부함 | 세션이 없음 |
실제로 VPL이 해당하는 것은, 구성된 관할권에 GUARDIAN 관리 권한이 없는 제품입니다.
하나의 제품이 플레이어에 따라 두 흐름을 모두 사용할 수도 있습니다. 제품 단위 스위치는 없으며, 어느 흐름이 적용되는지는 플레이어의 관할권, 연령, 제품의 권한 집합에 따라 세션마다 결정됩니다. 일부 관할권에만 GUARDIAN 관리 권한이 있는 제품이라면, 앞쪽 그룹의 플레이어는 VPC를 거치고 뒤쪽 그룹의 플레이어는 VPL 대상이 됩니다.
연결이 부여하는 것과 부여하지 않는 것
부모가 연결되면 흐름 중에 부모가 설정한 내용이 세션에 저장됩니다.
- 얼로원스는
GET /session/get에서 세션과 함께 반환됩니다. - 컨트롤별 상태, 예를 들어 스크린 타임 일정(일일 한도, 조용한 시간, 휴식 알림)은
GET /screentime/get-state에서 반환됩니다.
적용은 여러분의 몫입니다. k-ID는 부모가 설정한 상태를 알려주고, 제품이 그에 따라 동작합니다.
VPL은 permissions[]가 허용하는 내용을 바꾸지 않습니다. 값은 연령 게이트가 남긴 그대로 유지되며, 플레이어에게 무엇을 허용할지 바꾸는 일은 VPC만의 영역이기 때문입니다.
참고로 managedBy는 두 흐름 중 어느 것도 기록하는 값이 아닙니다. 플레이어의 연령과 관할권 구성으로부터 응답마다 도출되므로 동의가 완료되어도 바뀌지 않으며, 플레이어가 나이를 먹으면서 저절로 바뀔 수 있습니다. 실제로 바뀌는 것에 대해서는 권한을 참고하세요.
세션과 kuid
/age-gate/check에서 받는 sessionId는 제품에서 한 명의 플레이어를 가리키는 영구적인 핸들입니다. 연결, 연결 해제, 재연결을 거쳐도 그대로 유지됩니다. 자체 사용자 레코드는 이 값을 키로 삼으세요.
kuid는 세션이 연결된 영구 아동 프로필을 가리키는 k-ID의 식별자입니다. k-ID는 부모가 연결을 완료할 때 이를 할당하고, 이후 연결이 해제되면 세션에서 지웁니다. 따라서 kuid가 있다는 것은 그 세션에 부모가 연결되어 있음을 의미합니다.
| 단계 | sessionId | kuid | 세션 상태 |
|---|---|---|---|
| 연령 게이트만 거침, 최초 | 새로 생성되며 이후 변하지 않음 | 없음 | managedBy: PLAYER, hasApproverEmail: false |
| 부모가 연결함 | 동일 | 할당되며 Challenge.StateChange 웹훅으로 전달됨 | hasApproverEmail: true |
| 연결이 해제됨 | 동일 | 지워짐 | 세션은 ACTIVE 상태로 유지되고 권한과 전송된 데이터도 보존됨 |
| 다시 연결됨 | 동일 | 같은 프로필의 kuid가 복원됨 | 세션과 전송된 데이터는 이어지지만, 부모는 아무것도 없는 상태에서 시작해 컨트롤을 다시 설정함 |
플레이어당 세션 하나를 사용하고 재사용하세요. 같은 플레이어에게 두 번째 세션을 만들면 그 플레이어의 데이터가 두 세션으로 나뉩니다.
제공 여부
k-ID에 연락해 이 기능을 조직에서 활성화해 달라고 요청하세요.
다음 단계
- Verified Parent Linking 빠른 시작 가이드에서 초대, 취소, 연결 해제 호출을 처음부터 끝까지 살펴봅니다.
Session.Unlink는 어느 한쪽이 연결을 해제했을 때 이를 알려주는 웹훅입니다.