1. เก็บรวบรวมในเบราว์เซอร์
ตัวโหลดแบบสาธารณะเป็นรุ่นสำหรับเบราว์เซอร์เพียงรุ่นเดียวที่ยืนยันแล้วในปัจจุบัน โดยส่งออกตัวระบุอุปกรณ์หรือสถานะข้อผิดพลาด และจะไม่รับข้อมูลรับรองของเซิร์ฟเวอร์
<script src="https://collect.noxtica.com/collector/noxtica-collector-core.js" data-site-key="pk_example_replace_me" data-extensions="auto" data-auto-init data-auto-check-once async></script>
<script>
document.addEventListener('noxtica:collected', (event) => {
const deviceId = event.detail?.fingerprintId;
document.dispatchEvent(new CustomEvent('app:noxtica-evidence', {
detail: deviceId ? { state: 'received', deviceId } : { state: 'invalid' },
}));
});
document.addEventListener('noxtica:error', () => {
document.dispatchEvent(new CustomEvent('app:noxtica-evidence', {
detail: { state: 'unavailable' },
}));
});
</script>
2. อ่านข้อมูลบนเซิร์ฟเวอร์ของคุณ
ส่งตัวระบุอุปกรณ์ไปยังแบ็กเอนด์ของคุณ แล้วเรียกเส้นทาง v1 ที่ผ่านการตรวจสอบสิทธิ์ด้วยคีย์ที่เก็บไว้บนเซิร์ฟเวอร์
export async function lookupDevice({ deviceId, apiKey, fetchImpl = fetch }) {
const response = await fetchImpl(
`https://collect.noxtica.com/v1/device/${encodeURIComponent(deviceId)}`,
{ headers: { Authorization: `Bearer ${apiKey}` } },
);
if (response.status === 404) return { state: 'missing' };
if (response.status === 429) return { state: 'rate_limited' };
if (!response.ok) return { state: 'unavailable' };
return { state: 'received', record: await response.json() };
}
3. แยกสถานะผลลัพธ์ออกจากกัน
เฉพาะระเบียนที่ได้รับครบถ้วนเท่านั้นที่จะเข้าสู่นโยบายเชิงตัวเลข สถานะไม่มีข้อมูล ไม่ถูกต้อง ถูกจำกัดอัตรา และไม่พร้อมใช้งาน จะดำเนินตามทางเลือกสำรองของลูกค้าที่กำหนดไว้อย่างชัดเจน
export function classifyLookup(result) {
if (!result || result.state === 'unavailable') return { state: 'unavailable' };
if (result.state === 'rate_limited') return { state: 'rate_limited' };
if (result.state === 'missing') return { state: 'missing' };
const record = result.record;
if (!record || typeof record.score !== 'number' || typeof record.confidence !== 'number') {
return { state: 'invalid' };
}
return {
state: 'received',
score: record.score,
riskLevel: record.riskLevel,
confidence: record.confidence,
};
}