JavaScript SDK - تهيئة الـ SDK
التثبيت
Section titled التثبيتسيؤدي تنفيذ السطر التالي إلى تثبيت المُتتبع وبالتالي الـ SDK لتتمكن من الاستفادة من جميع ميزات المُتتبع.
npm i @openreplay/tracker
التهيئة
Section titled التهيئةعند إنشاء نسخة من مُتتبع OpenReplay، هناك العديد من خيارات التهيئة التي يمكنك توفيرها لتخصيص العديد من جوانب التسجيل وتجربة التسجيل.
يجب عليك تحديد خيار projectKey في المُنشئ. يمكنك الحصول على هذه القيمة من لوحة تحكم OpenReplay تحت ‘التفضيلات > المشاريع’.
التطبيقات ذات الصفحة الواحدة (SPA)
Section titled التطبيقات ذات الصفحة الواحدة (SPA)إذا كان موقعك الإلكتروني عبارة عن تطبيق ذو صفحة واحدة (SPA)، استخدم الكود التالي:
import OpenReplay from '@openreplay/tracker';
//...
const tracker = new OpenReplay({
projectKey: PROJECT_KEY
});
tracker.start(); // يعود بوعد بمعلومات الجلسة (sessionID, sessionHash, userUUID)
التطبيقات المُقدمة من الخادم (SSR)
Section titled التطبيقات المُقدمة من الخادم (SSR)وإلا، إذا كان تطبيقك الويبي مُقدماً من الخادم (SSR) (مثل NextJS، NuxtJS)، استخدم الشظية البرمجية أدناه. تأكد من استدعاء tracker.start() بمجرد بدء التطبيق (في useEffect أو componentDidMount).
import OpenReplay from '@openreplay/tracker/cjs';
//...
const tracker = new OpenReplay({
projectKey: PROJECT_KEY,
});
//...
function MyApp() {
useEffect(() => { // استخدم componentDidMount في حالة مكون React الفئوي
tracker.start(); // يعود بوعد بمعلومات الجلسة (sessionID, sessionHash, userUUID)
}, [])
}
import OpenReplay from '@openreplay/tracker/cjs';
//...
const tracker = new OpenReplay({
projectKey: PROJECT_KEY,
ingestPoint: "https://openreplay.mydomain.com/ingest", // عند التعامل مع النسخة المستضافة ذاتياً من OpenReplay
capturePerformance: true,
__DISABLE_SECURE_MODE: true // للاختبار المحلي
});
خيارات التهيئة
Section titled خيارات التهيئةهناك مجموعة من الخيارات التي يمكنك تمريرها إلى المُنشئ. يُعد projectKey هو الخيار الوحيد المطلوب.
للأغراض العامة
Section titled للأغراض العامةprojectKey: stringمعرّف المشروع الذي تقوم بتتبعه.sessionHash?: stringهاش الجلسة الأولية. هذا مفيد عندما تعبر الجلسات عبر نطاقات فرعية مختلفة في تطبيقك الويبي، لكنك ترغب في دمجها في تسجيل واحد. في حالة عدم إمكانية الاستمرار في الجلسة (غير موجودة أو منتهية)، سيبدأ المتتبع تلقائياً جلسة جديدة. يتم أيضاً إرجاعها عند استدعاءstop(). المزيد من التفاصيل هنا.ingestPoint?: stringنطاق OpenReplay الخاص بك (مثل https://openreplay.mydomain.com/ingest)، الذي سيقوم المتتبع بإرسال الأحداث إليه. هذا اختياري لمستخدمي OpenReplay Cloud. الافتراضي:https://api.openreplay.com/ingest(يشير إلى OpenReplay Cloud).revID?: stringمعرّف الإصدار لتطبيق الويب الخاص بك. مفيد عند البحث عن المشاكل التي تحدث في إصدار معين من الإصدار.resourceBaseHref?: stringيشير إلى النطاق العام الذي يمكن الوصول إليه حيث يمكن لـ OpenReplay جلب الأصول (الأنماط، الخطوط والأيقونات). نظراً لأنها ضرورية لإعادة تشغيل الجلسة بشكل صحيح، فإن هذا الخيار مفيد للتغلب على القيود المتعلقة باستضافة موقعك (وبالتالي الأصول) في نطاق خاص. مثال:https://mysitepublic.com/assets/.captureIFrames?: booleanلالتقاط جميع الإطارات (iFrames) ذات النطاق المشترك في تطبيقك الويبي. إذا كنت ترغب في تتبع إطار محدد، فقط أضف السمة HTMLdata-openreplay-captureإلى علامة<iframe>. الافتراضي:true.disableClickmaps?: booleanلتعطيل خرائط النقر. الافتراضي:true.verbose?: booleanلتمكين السجلات. الافتراضي:false.autoResetOnWindowOpen?: booleanتمكين هذا الخيار لإعادة تعيين معرف الجلسة عند فتح علامة تبويب جديدة من تطبيقك. هذا يعدل طريقةwindow.openلتجنب تكرار معرّفات الجلسة بسبب تخزين الجلسات المشترك بين علامات التبويب في المتصفح. الافتراضي:false.forceSingleTab: booleanيعطل قدرات التسجيل في عدة علامات تبويب. الافتراضي:false.disableStringDict: booleanيعطل منطق قاموس السلاسل (لتحسين التخزين) في التسجيلات. الافتراضي:false.
الخصوصية
Section titled الخصوصيةrespectDoNotTrack?: booleanلا يبدأ المُتتبع إذا كان علم عدم التتبع مفعلاً في متصفح المستخدم. الافتراضي:false.obscureTextEmails?: booleanيخفي البريد الإلكتروني في عناصر النص. سيتم تحويل البريد الإلكتروني إلى سلسلة عشوائية من النجوم. الافتراضي:true.obscureTextNumbers?: booleanيخفي الأرقام في عناصر النص. ستتحول الأرقام إلى سلسلة عشوائية من النجوم. الافتراضي:false.obscureInputNumbers?: booleanيخفي الأرقام في حقول الإدخال. ستتحول قيم الأرقام إلى سلسلة عشوائية من النجوم. الافتراضي:false.obscureInputDates?: booleanيخفي التواريخ في حقول الإدخال. ستتحول قيم التواريخ إلى سلسلة عشوائية من النجوم. الافتراضي:false.defaultInputMode?: 0 | 1 | 2الوضع الافتراضي لالتقاط قيم الإدخال. على التوالي: واضح، مُخفى أو مُهمل. الافتراضي:1(مُخفى).
يرجى ملاحظة أن البيانات المستثناة يتم إخفاؤها أو قمعها قبل إرسالها إلى خوادم OpenReplay. التغييرات المطبقة على الخيارات المذكورة أعلاه لا يمكن أن تكون رجعية وستنطبق فقط على البيانات التي يتم جمعها حديثاً. انظر تنقية البيانات لمزيد من التفاصيل.
وحدة التحكم
Section titled وحدة التحكمconsoleMethods?: Array<'log' | 'info' | 'warn' | 'error' 'debug' | 'assert'> | nullيحدد قائمة طرق وحدة التحكم لالتقاط. الافتراضي:['log', 'info', 'warn', 'error', 'debug', 'assert']consoleThrottling?: numberالحد الأقصى لعدد إدخالات وحدة التحكم الملتقطة في الثانية. الافتراضي:30.
الاستثناءات
Section titled الاستثناءاتcaptureExceptions?: booleanيلتقط استثناءات JavaScript وتتبعات المكدس. الافتراضي:true.
التوقيتات
Section titled التوقيتاتcaptureResourceTimings?: booleanيسجل توقيتات الموارد. الافتراضي:true.capturePageLoadTimings?: booleanيسجل توقيتات تحميل الصفحة. الافتراضي:true.capturePageRenderTimings?: booleanيحسب مقاييس تقديم الصفحة مثل مؤشر السرعة والاكتمال البصري أو الوقت حتى التفاعل. يتطلبcaptureResourceTimings = true. الافتراضي:true.
الأداء
Section titled الأداءcapturePerformance?: booleanلالتقاط مقاييس الأداء مثل معدل الإطارات واستهلاك وحدة المعالجة المركزية والذاكرة. الافتراضي:true.
الشبكة
Section titled الشبكةتتعلق خيارات network بالتقاط الطلبات والحمولات الشبكية لـ fetch و XHR.
network?: {
failuresOnly: boolean;
sessionTokenHeader: string;
ignoreHeaders: Array<string> | boolean;
capturePayload: boolean; // تأكد من تنقية بياناتك قبل تمكينها
sanitizer: (RequestResponseData) => RequestResponseData | null;
captureInIframes: boolean;
axiosInstances: AxiosInstance[];
useProxy?: boolean;
tokenUrlMatcher?: (url: string) => boolean;
}
راجع خيارات الشبكة للاطلاع على الأمثلة ومزيد من التفاصيل حول كيفية تحرير البيانات الحساسة.
مؤشر الماوس
Section titled مؤشر الماوستتعلق خيارات mouse بالتقاط المحددات للنقرات لإنشاء خرائط النقر.
mouse?:
{
disableClickmaps?: boolean
minSelectorDepth?: number
nthThreshold?: number
maxOptimiseTries?: number
}
disableClickmaps?: booleanيعطل حساب المحدد تماماً. الافتراضي:false.minSelectorDepth?: numberالحد الأدنى لطول المحدد المُحسّن (افتراضي 2). مثال:body > div > div > p => body > pnthThreshold?: numberعدد محاولات المحدد قبل اللجوء إلى محددات nth-child. هذه عملية مكلفة وقد تؤدي إلى تكاليف إضافية كبيرة، لا تضعها أعلى من 2000. الافتراضي:1000.maxOptimiseTries?: numberعدد المحاولات لتحسين وتقصير المحدد. الافتراضي:10 000.
إعادة الاتصال
Section titled إعادة الاتصالconnAttemptCount?: numberالحد الأقصى لعدد محاولات إعادة الاتصال عندما تفشل طلبات HTTP للمُتتبع في الوصول إلى الخلفية. الافتراضي:10.connAttemptGap?: numberالمدة بين كل محاولة إعادة اتصال (مُعبّر عنها بالمللي ثانية). الافتراضي:8000.
الأمان
Section titled الأمان__DISABLE_SECURE_MODE?: booleanللسماح بالاتصال غير الآمن بين المتتبع والخلفية على المواقع بدون SSL. يجب استخدام هذا لأغراض التطوير فقط. الافتراضي:false.