TRACIO odwzorowuje zbieranie sygnałów przeglądarki z FingerprintJS Pro v4, udostępniając
przy tym własne SDK (@tracio/sdk) i dostarczając wyniki po stronie serwera za pośrednictwem webhooków. Ten
przewodnik omawia proces migracji, szczegóły parytetu sygnałów oraz różnice w
SDK i formatach odpowiedzi, które trzeba będzie zaktualizować.
| Aspekt | FingerprintJS Pro | TRACIO | Zgodne |
|---|---|---|---|
| Zbieranie sygnałów | XOR + deflate + Base64 | Równoważne | Tak |
| Liczba sygnałów | ~133 | 130+ (zgodne z FingerprintJS + własnościowe) | Tak |
| Format sygnałów | { s: status, v: value } | Równoważny | Tak |
| SDK klienta | @fingerprintjs/fingerprintjs-pro | @tracio/sdk (Tracio.init) | Zmiana kodu |
| Kształt wyniku klienta | { visitorId, confidence, ... } | { visitorId, bot: { detected, ... } } | Zmiana kodu |
| Wyniki po stronie serwera | Server API (/events) | Dostarczane przez webhooki (brak klienckiego REST API do odczytu) | Zmiana kodu |
| Webhooki | Format webhooków FingerprintJS | Płaski ładunek camelCase, X-Tracio-Signature | Zmiana kodu |
| Mechanizm cookie | _iidt (365 dni) | _vid_t (365 dni, nieprzezroczysty UID) | Różny |
TRACIO odwzorowuje zbieranie sygnałów przeglądarki z FingerprintJS Pro v4, zweryfikowane za pomocą zautomatyzowanych testów porównawczych Playwright działających równolegle względem produkcyjnego punktu końcowego FingerprintJS Pro. Poza zestawem zgodnym z FingerprintJS TRACIO zbiera własnościowe sygnały (sygnały botów, manipulacji, antydetekcji i trwałości), których FingerprintJS nie oferuje.
TRACIO to zarządzana usługa chmurowa. Utwórz konto, wybierz region danych i skopiuj swój klucz publiczny z panelu. Pełny przewodnik znajdziesz w Cloud Deployment. Twój klucz publiczny można bezpiecznie umieścić w kodzie po stronie klienta.
Zanim przełączysz produkcyjny ruch, przetestuj z klienckim SDK TRACIO. Zwróć uwagę, że TRACIO używa własnego SDK i API — nie jest to bezpośredni zamiennik protokołu dla klienta FingerprintJS.
import { Tracio } from "@tracio/sdk"
const tracio = Tracio.init({ publicKey: "5ca175fc...",})
const result = await tracio.getResult()console.log(result)Porównaj wykryte urządzenie z istniejącą integracją FingerprintJS Pro, aby zweryfikować migrację.
W przypadku krytycznych wdrożeń uruchom oba systemy jednocześnie i porównaj wyniki:
// Temporary: run both systems and compareconst fpjsResult = await fpjsAgent.get() // FingerprintJS Pro agentconst tracioResult = await tracio.getResult() // TRACIO instance
// Compare visitor IDs (they will differ — different servers)// But bot detection should be equivalent for the same deviceconsole.log("FPJS visitorId:", fpjsResult.visitorId)console.log("TRACIO visitorId:", tracioResult.visitorId)console.log("FPJS bot:", fpjsResult.bot)console.log("TRACIO bot:", tracioResult.bot)Zwróć uwagę, że identyfikatory odwiedzających będą różnić się między systemami, ponieważ są obliczane z różnych baz danych po stronie serwera. Kluczową metryką zgodności jest to, że oba systemy konsekwentnie identyfikują to samo fizyczne urządzenie.
TRACIO dostarcza własne klienckie SDK (@tracio/sdk) i nie wykorzystuje ponownie
protokołu klienta FingerprintJS, więc jest to zmiana kodu, a nie podmiana DNS.
Usuń klienta FingerprintJS i zainicjuj TRACIO swoim kluczem publicznym:
// Before (FingerprintJS Pro)import * as FingerprintJS from "@fingerprintjs/fingerprintjs-pro"const fpAgent = await FingerprintJS.load({ apiKey: "fpjs-public-key" })const fpResult = await fpAgent.get()
// After (TRACIO)import { Tracio } from "@tracio/sdk"const tracio = Tracio.init({ publicKey: "5ca175fc..." })const result = await tracio.getResult()FingerprintJS Pro udostępnia Server API, które odpytujesz po requestId. TRACIO nie
oferuje równoważnego, dostępnego dla klienta punktu końcowego REST do odczytu — zamiast tego wyniki są
wypychane na Twój serwer jako webhooki w momencie zidentyfikowania odwiedzającego.
Zastąp logikę odpytywania obsługą webhooków:
// Before (FingerprintJS Pro) — pull by requestIdconst response = await fetch(`https://eu.api.fpjs.io/events/${requestId}`, { headers: { "Auth-API-Key": "fpjs-api-key" },})
// After (TRACIO) — receive a signed webhook per identificationapp.post("/webhook/tracio", (req, res) => { // verify req.headers["x-tracio-signature"], then act on req.body const event = req.body // { requestId, visitorId, bot, geo, network, decision, ... } res.status(200).send("OK")})Pełny ładunek i weryfikację podpisu znajdziesz w Webhooks.
Jeśli używasz webhooków, zarejestruj je w panelu TRACIO.
Ładunek webhooka to płaski dokument w formacie camelCase podpisany nagłówkiem
X-Tracio-Signature — różni się od formatu webhooków FingerprintJS,
więc odpowiednio zaktualizuj swoją obsługę.
Gdy TRACIO zostanie zweryfikowane na produkcji:
TRACIO i FingerprintJS używają różnych kształtów odpowiedzi — to główna rzecz, którą trzeba uwzględnić przy przenoszeniu kodu.
Klienckie SDK TRACIO rozwiązuje się do zwięzłego wyniku:
{ "visitorId": "X7fh2Hg9LkMn3pQr", "bot": { "detected": false, "confidence": 2, "reasons": [] }}Zamiast odpytywanej odpowiedzi Server API, TRACIO dostarcza płaski ładunek webhooka
w formacie camelCase na każdą identyfikację — a nie strukturę products z FingerprintJS:
{ "requestId": "1710432000_abc123def", "visitorId": "X7fh2Hg9LkMn3pQr", "identification": { "confidence": 0.95 }, "bot": { "result": "human", "type": "", "score": 0.02 }, "geo": { "country": "CZ", "city": "Prague" }, "network": { "vpn": false, "proxy": false, "tor": false, "datacenter": false }, "decision": { "action": "allow", "riskScore": 4 }}Pełny ładunek znajdziesz w Webhooks.
TRACIO nie jest bezpośrednim zamiennikiem protokołu dla FingerprintJS. Poza różnymi kształtami SDK i odpowiedzi opisanymi powyżej należy zauważyć:
Identyfikatory odwiedzających nie będą takie same między FingerprintJS Pro a TRACIO. Identyfikator odwiedzającego to hash sygnałów przeglądarki, a każdy system używa własnych parametrów haszowania i własnej bazy danych. Po migracji każdy odwiedzający pojawi się jako „nowy” odwiedzający w bazie danych TRACIO.
Środek zaradczy: Użyj pola linkedId, aby powiązać identyfikatory odwiedzających TRACIO z istniejącymi kontami użytkowników lub sesjami. Po okresie przejściowym baza danych odwiedzających TRACIO zbuduje się w naturalny sposób.
| System | Nazwa cookie | Wartość |
|---|---|---|
| FingerprintJS Pro | _iidt (przez proxy) | Token w postaci jawnej |
| TRACIO | _vid_t | Nieprzezroczysty UID (UUID) |
Istniejące cookie FingerprintJS Pro nie są przenoszone. Odwiedzający otrzymują nowe cookie _vid_t od TRACIO.
TRACIO zbiera dodatkowe własnościowe sygnały, których nie ma w FingerprintJS Pro. Zapewniają one dodatkowe możliwości wykrywania, ale nie wpływają na zgodność z istniejącymi integracjami.
FingerprintJS Pro dostarcza sealed_result w odpowiedzi (zaszyfrowany blob do weryfikacji po stronie serwera). TRACIO obecnie nie obsługuje sealed results. Zamiast tego użyj webhooków do weryfikacji po stronie serwera.
Po migracji wartości pewności mogą być nieco niższe przez pierwsze 24–48 godzin, gdy TRACIO buduje swoją bazę danych odwiedzających. Jest to oczekiwane i ustępuje, gdy odwiedzający powracają i ustanawiają tożsamości oparte na cookie.
Upewnij się, że zastąpiłeś klienta FingerprintJS przez @tracio/sdk oraz że
Tracio.init() jest wywoływane z prawidłowym kluczem publicznym dla
właściwego workspace.