하나의 visitor ID, 어떻게 돌아오든
에이전트는 100개 이상의 기기 신호를 서버에서 visitor ID로 변환합니다. 시크릿 모드, 쿠키 삭제, 브라우저 업데이트는 새로운 방문자를 만들지 않습니다.
재방문 방문자가 변경할 수 있는 항목
ID는 기기를 가리키며, 쿠키나 연결이 아닙니다.
| 다음 정보와 함께 돌아옴 | 동일한 방문자 ID | 왜 |
|---|---|---|
| 비공개 창 또는 시크릿 창 | 동일 | 저장소는 비어 있지만 하드웨어는 그렇지 않습니다. |
| 쿠키 및 사이트 데이터 삭제됨 | 동일 | 하드웨어 앵커와 핑거프린트가 여전히 일치합니다. |
| 브라우저 업데이트 | 동일 | 새 버전에서 일부 신호가 바뀌지만, 퍼지 매칭이 이를 흡수합니다. |
| VPN 또는 새로운 IP 주소 | 동일 | IP는 ID의 일부가 아닙니다. 대신 flags에 표시됩니다. |
| 같은 기기의 새 계정 | 동일 | 다중 계정은 이렇게 나타납니다: 하나의 기기, 여러 external ID. |
| 같은 기기의 다른 브라우저 | 신규 방문자 | 브라우저마다 렌더링이 달라서 다른 핑거프린트가 됩니다. |
| 다른 기기 | 신규 방문자 | ID는 기기입니다. |
순서대로 일치
각 식별은 가장 확실한 일치부터 순서대로 프로젝트의 방문자와 대조되며, 이벤트에 일치한 항목이 표시됩니다.
- 저장된 ID
- 에이전트가 스토리지와 퍼스트파티 쿠키에 저장한 ID이며, 하드웨어가 일치하는 동안 유지됩니다.
- 하드웨어 앵커
- 브라우저 업데이트나 저장소 삭제로도 바뀌지 않는 그래픽, 코어, 메모리 및 플랫폼.
- 알려진 핑거프린트
- 프로젝트에서 이전에 확인된 것과 정확히 동일한 신호입니다.
- 유사 일치
- 같은 하드웨어의 최근 방문자와 구성 요소별로 비교하며, 차순위와 일정 차이를 둡니다.
- 노이즈 인식
- Brave나 비공개 창처럼 브라우저가 Canvas와 오디오를 무작위로 변경하면 이들은 제외됩니다.
import { start } from 'zeno-id'
const agent = start({ publicKey: 'pk_...' })
// A stable ID per device, and whether it was seen before.
const { visitorId, returning, requestId } = await agent.get({
externalId: user.id,
action: 'login',
})100개 이상의 신호
처음부터 수집됨, WebRTC 네트워크 주소 제외.
렌더링
Canvas, WebGL 벤더, 렌더러, 확장 기능 및 매개변수, WebGPU 어댑터, 오디오.
기기
화면, 색 심도, 픽셀 비율, 코어, 메모리, 터치, 플랫폼, client hints, 글꼴 및 음성.
설정
시간대, 언어, 달력, 미디어 설정, 저장소 할당량 및 권한 상태.
무결성
자동화 흔적, 대체된 네이티브 객체, 페이지, 워커, iframe 간에 다른 값.
한계에 대한 솔직함
판단의 근거로 쓸 수 있는 ID 신뢰도를 함께 알려주기 때문.
프로젝트당 ID 하나
ID는 프로젝트와 함께 해시되므로, 같은 기기라도 다른 곳에서는 다른 ID를 갖습니다. 누구도 서비스 간에 방문자를 추적할 수 없습니다.
모든 이벤트에 대한 신뢰도
일치 확실성(0~1). 흔한 기기에서의 퍼지 일치는 희귀한 하드웨어에서 저장된 ID보다 낮은 점수를 받습니다.
단서일 뿐, 증거는 아님
같은 휴대폰 모델과 같은 OS처럼 동일한 기기는 ID를 공유할 수 있습니다. 공유된 ID는 external IDs, 플래그, 연결 정보와 함께 검토하세요.
오늘 첫 방문자를 식별하세요
에이전트를 설치하고 서버에서 이벤트를 읽으면 끝입니다.