يطابق TRACIO جمع إشارات المتصفح في FingerprintJS Pro v4 مع توفير حزمة SDK
الخاصة به (@tracio/sdk) وتسليم النتائج من جانب الخادم عبر webhooks. يغطي هذا
الدليل عملية الترحيل، وتفاصيل تكافؤ الإشارات، والاختلافات في
صيغ SDK والاستجابة التي ستحتاج إلى تحديثها.
| الجانب | FingerprintJS Pro | TRACIO | متوافق |
|---|---|---|---|
| جمع الإشارات | XOR + deflate + Base64 | مكافئ | نعم |
| عدد الإشارات | ~133 | 130+ (مطابقة لـ FingerprintJS + مملوكة) | نعم |
| صيغة الإشارة | { s: status, v: value } | مكافئ | نعم |
| SDK العميل | @fingerprintjs/fingerprintjs-pro | @tracio/sdk (Tracio.init) | تغيير في الكود |
| شكل نتيجة العميل | { visitorId, confidence, ... } | { visitorId, bot: { detected, ... } } | تغيير في الكود |
| النتائج من جانب الخادم | Server API (/events) | تُسلَّم عبر webhooks (لا توجد واجهة REST للقراءة للعميل) | تغيير في الكود |
| Webhooks | صيغة webhook الخاصة بـ FingerprintJS | حمولة مسطحة بصيغة camelCase، X-Tracio-Signature | تغيير في الكود |
| آلية Cookie | _iidt (365 يومًا) | _vid_t (365 يومًا، UID غير شفاف) | مختلفة |
يطابق TRACIO جمع إشارات المتصفح في FingerprintJS Pro v4، وهو ما تم التحقق منه عبر اختبارات مقارنة آلية باستخدام Playwright تعمل جنبًا إلى جنب مقابل نقطة نهاية FingerprintJS Pro الإنتاجية. وبالإضافة إلى المجموعة المطابقة لـ FingerprintJS، يجمع TRACIO إشارات مملوكة (إشارات البوت، والعبث، ومكافحة الكشف، والاستمرارية) التي لا يوفرها FingerprintJS.
TRACIO هو خدمة سحابية مُدارة. أنشئ حسابك، واختر منطقة بياناتك، وانسخ المفتاح العام الخاص بك من لوحة التحكم. راجع نشر السحابة للحصول على الشرح الكامل. من الآمن شحن مفتاحك العام في الكود من جانب العميل.
قبل تحويل حركة المرور الإنتاجية الخاصة بك، اختبر باستخدام حزمة SDK للعميل من TRACIO. لاحظ أن TRACIO يستخدم SDK وAPI خاصتين به — فهو ليس بديلًا مباشرًا للبروتوكول لعميل FingerprintJS.
import { Tracio } from "@tracio/sdk"
const tracio = Tracio.init({ publicKey: "5ca175fc...",})
const result = await tracio.getResult()console.log(result)قارِن الجهاز المكتشف مع تكاملك الحالي مع FingerprintJS Pro للتحقق من الترحيل.
بالنسبة للعمليات الحرجة، شغّل كلا النظامين في آنٍ واحد وقارِن النتائج:
// 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)لاحظ أن معرّفات الزوّار ستختلف بين النظامين لأنها تُحسب من قواعد بيانات مختلفة من جانب الخادم. مقياس التوافق الأساسي هو أن يتعرّف كلا النظامين على الجهاز المادي نفسه باتساق.
يوفر TRACIO حزمة SDK للعميل الخاصة به (@tracio/sdk) ولا يعيد استخدام
بروتوكول عميل FingerprintJS، لذا فهذا تغيير في الكود وليس تبديلًا لـ DNS.
أزِل عميل FingerprintJS وهيّئ TRACIO باستخدام مفتاحك العام:
// 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 واجهة Server API تستعلم عنها عبر requestId. لا يوفر TRACIO
نقطة نهاية REST للقراءة موجّهة للعميل مكافئة — بدلًا من ذلك، تُدفع النتائج
إلى خادمك على شكل webhooks في اللحظة التي يُتعرَّف فيها على الزائر.
استبدل منطق الاستطلاع (polling) لديك بمعالِج webhook:
// 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")})راجع Webhooks للاطلاع على الحمولة الكاملة والتحقق من التوقيع.
إذا كنت تستخدم webhooks، فسجّلها في لوحة تحكم TRACIO. إن
حمولة webhook هي مستند مسطح بصيغة camelCase موقّع بترويسة
X-Tracio-Signature — وهي تختلف عن صيغة webhook الخاصة بـ FingerprintJS،
لذا حدّث معالِجك وفقًا لذلك.
بمجرد التحقق من TRACIO في بيئة الإنتاج:
يستخدم TRACIO وFingerprintJS أشكال استجابة مختلفة — وهذا هو الأمر الرئيسي الذي يجب مراعاته عند نقل الكود.
تحسم حزمة SDK لعميل TRACIO إلى نتيجة مُدمجة:
{ "visitorId": "X7fh2Hg9LkMn3pQr", "bot": { "detected": false, "confidence": 2, "reasons": [] }}بدلًا من استجابة Server API المُسترجَعة عبر الاستطلاع، يسلّم TRACIO حمولة webhook مسطحة بصيغة
camelCase لكل عملية تعرّف — وليس بنية products الخاصة بـ 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 }}راجع Webhooks للاطلاع على الحمولة الكاملة.
TRACIO ليس بديلًا مباشرًا للبروتوكول عن FingerprintJS. إلى جانب اختلاف أشكال SDK والاستجابة أعلاه، لاحظ ما يلي:
لن تكون معرّفات الزوّار متطابقة بين FingerprintJS Pro وTRACIO. معرّف الزائر هو تجزئة (hash) لإشارات المتصفح، ويستخدم كل نظام معلمات التجزئة وقاعدة البيانات الخاصة به. بعد الترحيل، سيظهر كل زائر بوصفه زائرًا "جديدًا" في قاعدة بيانات TRACIO.
التخفيف: استخدم حقل linkedId لربط معرّفات زوّار TRACIO بحسابات المستخدمين أو الجلسات الحالية لديك. بعد فترة انتقالية، ستُبنى قاعدة بيانات الزوّار في TRACIO بشكل طبيعي.
| النظام | اسم Cookie | القيمة |
|---|---|---|
| FingerprintJS Pro | _iidt (عبر proxy) | رمز نصي صريح |
| TRACIO | _vid_t | UID غير شفاف (UUID) |
لا تُنقل ملفات cookie الحالية الخاصة بـ FingerprintJS Pro. يتلقى الزوّار ملف cookie جديدًا باسم _vid_t من TRACIO.
يجمع TRACIO إشارات مملوكة إضافية غير موجودة في FingerprintJS Pro. توفر هذه الإشارات قدرات كشف إضافية لكنها لا تؤثر على التوافق مع التكاملات الحالية.
يوفر FingerprintJS Pro sealed_result في الاستجابة (كتلة مشفّرة للتحقق من جانب الخادم). لا يدعم TRACIO حاليًا النتائج المختومة. استخدم webhooks للتحقق من جانب الخادم بدلًا من ذلك.
بعد الترحيل، قد تكون درجات الثقة أقل قليلًا خلال أول 24–48 ساعة بينما يبني TRACIO قاعدة بيانات الزوّار الخاصة به. هذا أمر متوقع ويزول مع عودة الزوّار وترسيخ هويات قائمة على ملفات cookie.
تأكد من أنك قد استبدلت عميل FingerprintJS بـ @tracio/sdk وأن
Tracio.init() يُستدعى بمفتاح عام صالح لمساحة
العمل الصحيحة.