Skip to Content
مستندات متریکس همواره در حال بهبود است! 🚀 آخرین به‌روزرسانی‌ها را از اینجا دنبال کنید.

راهنمای اتریبیوشن (Attribution) و ردیابی نشست (Session Tracking) در Web SDK

نمای کلی

Metrix Web SDK قابلیت‌های جامعی برای اتریبیوشن و ردیابی نشست ارائه می‌دهد:

  • Attribution: مشخص می‌کند کاربران از چه طریقی جذب شده‌اند (کمپین، ارگانیک و غیره)
  • Session Tracking: نشست‌های کاربر، نصب‌ها و میزان تعامل را ردیابی می‌کند
  • User Identification: شناسه یکتای کاربر متریکس را تولید و در اختیار شما قرار می‌دهد
  • Deep Linking Support: از سناریوهای PWA (Progressive Web App) پشتیبانی می‌کند؛ اپلیکیشن‌های TWA می‌توانند از پل نیتیو اندروید که در ادامه توضیح داده شده استفاده کنند

شروع سریع

import { init, getAttributionStatus, onMetrixUserIdReceived } from '@metrixorg/websdk'; // Initialize with session tracking init('APP_ID', 'API_KEY', { sessionTracking: { enabled: true, packageName: 'my-web-app', }, }); // Get Metrix user ID const metrixUserId = await onMetrixUserIdReceived(); console.log('Metrix User ID:', metrixUserId); // Check attribution status const attribution = await getAttributionStatus(); console.log('Attribution:', attribution);

بخش ۱: وضعیت اتریبیوشن

نمای کلی

Attribution مشخص می‌کند کاربر از چه مسیری جذب شده است. SDK متدهایی برای بررسی وضعیت اتریبیوشن کاربر فعلی ارائه می‌دهد تا بتوانید اثربخشی کمپین‌های بازاریابی خود را بهتر تحلیل کنید.

دریافت وضعیت اتریبیوشن

برای دریافت اطلاعات کامل اتریبیوشن، از getAttributionStatus() استفاده کنید:

import { getAttributionStatus, onMetrixUserIdReceived } from '@metrixorg/websdk'; // Wait for Metrix user ID to be available await onMetrixUserIdReceived(); // Get attribution information const attribution = await getAttributionStatus(); if (attribution) { console.log('Attribution Status:', attribution.attributionStatus); console.log('Source:', attribution.acquisitionSource); console.log('Campaign:', attribution.acquisitionCampaign); }

Method Signature

getAttributionStatus(): Promise<AttributionStatus | null>

خروجی:

  • AttributionStatus شامل داده‌های کامل اتریبیوشن
  • null اگر SDK مقداردهی اولیه نشده باشد یا شناسه کاربر متریکس هنوز در دسترس نباشد

منطق تلاش مجدد خودکار

وقتی سرور مقدار NOT_ATTRIBUTED_YET را برگرداند، SDK به‌صورت خودکار:

  1. ۱۰ ثانیه صبر می‌کند
  2. دوباره درخواست را ارسال می‌کند
  3. این روند را تا زمان دریافت وضعیت نهایی تکرار می‌کند

این مکانیزم باعث می‌شود در نهایت اطلاعات کامل اتریبیوشن را دریافت کنید.

AttributionStatus

interface AttributionStatus { acquisitionAd: string; // Ad identifier acquisitionAdSet: string; // Ad set identifier acquisitionCampaign: string; // Campaign name acquisitionSource: string; // Source (e.g., 'Google', 'Facebook') acquisitionSubId: string; // Additional tracking sub ID acquisitionAdNetwork: string; // Ad network (e.g., 'Google Ads') attributionStatus: string; // Current status (see below) trackerToken: string; // Metrix tracker token installTime: number; // Installation timestamp (ms) reinstalled: boolean; // Whether user reinstalled installedByImpression: boolean; // Whether attributed to impression }

مقادیر وضعیت اتریبیوشن

مقدارتوضیح
ATTRIBUTEDکاربر با موفقیت به یک کمپین یا منبع جذب نسبت داده شده است. نصب کاربر به یک کمپین بازاریابی مشخص متصل شده است.
NOT_ATTRIBUTED_YETپردازش اتریبیوشن هنوز کامل نشده است. SDK به‌صورت خودکار هر ۱۰ ثانیه دوباره تلاش می‌کند. این یک وضعیت موقتی است و معمولاً طی ۳۰ تا ۶۰ ثانیه نهایی می‌شود.
ATTRIBUTION_NOT_NEEDEDکاربر ارگانیک است و نیازی به اتریبیوشن کمپینی ندارد. کاربر بدون کلیک روی تبلیغ یا لینک کمپین وارد شده است.
UNKNOWNوضعیت اتریبیوشن قابل تشخیص نیست. سیستم نتوانسته وضعیت اتریبیوشن کاربر را تعیین کند.

مثال کامل

import { init, getAttributionStatus, onMetrixUserIdReceived } from '@metrixorg/websdk'; // Initialize SDK init('APP_ID', 'API_KEY', { sessionTracking: { enabled: true }, }); // Wait for Metrix ID const metrixUserId = await onMetrixUserIdReceived(); console.log('Device ID:', metrixUserId); // Get attribution with complete handling try { const attribution = await getAttributionStatus(); if (!attribution) { console.log('Attribution not available yet'); return; } switch (attribution.attributionStatus) { case 'ATTRIBUTED': console.log('✓ Attributed user'); console.log(' Campaign:', attribution.acquisitionCampaign); console.log(' Source:', attribution.acquisitionSource); console.log(' Network:', attribution.acquisitionAdNetwork); console.log(' Install Time:', new Date(attribution.installTime)); break; case 'NOT_ATTRIBUTED_YET': console.log('○ Attribution still processing...'); // SDK will retry automatically break; case 'ATTRIBUTION_NOT_NEEDED': console.log('Organic user - no campaign attribution'); break; case 'UNKNOWN': console.log('? Attribution status unknown'); break; } // Log for analytics analytics.logAttribution({ status: attribution.attributionStatus, source: attribution.acquisitionSource, campaign: attribution.acquisitionCampaign, }); } catch (error) { console.error('Failed to get attribution:', error); }

موارد استفاده

۱. User Onboarding

const attribution = await getAttributionStatus(); if (attribution?.attributionStatus === 'ATTRIBUTED') { // Show campaign-specific welcome message showWelcomeMessage(attribution.acquisitionCampaign); } else { // Show generic welcome showGenericWelcome(); }

۲. Conversion Tracking

function trackPurchase(amount) { getAttributionStatus().then(attribution => { analytics.trackPurchase({ amount, campaign: attribution?.acquisitionCampaign, source: attribution?.acquisitionSource, }); }); }

۳. Campaign ROI Analysis

async function calculateROI() { const attribution = await getAttributionStatus(); if (attribution?.attributionStatus === 'ATTRIBUTED') { const roi = calculateReturn(attribution.acquisitionCampaign); updateDashboard(attribution.acquisitionCampaign, roi); } }

۴. شناسایی تقلب

const attribution = await getAttributionStatus(); if (attribution?.reinstalled) { console.log('Warning: User reinstalled app'); // Apply additional fraud checks }

بخش ۲: ردیابی نشست

نمای کلی

ردیابی نشست، میزان تعامل کاربر با وب‌اپلیکیشن شما را پایش می‌کند:

  • Install Counting: اولین نشست به‌عنوان نصب در نظر گرفته می‌شود
  • Session Management: بازه‌های فعالیت کاربر ردیابی می‌شوند
  • Session Duration: مدت زمان فعال بودن کاربر اندازه‌گیری می‌شود
  • Inactivity Detection: پس از ۳۰ دقیقه یا بیشتر عدم فعالیت، نشست جدید آغاز می‌شود
  • URL Tracking: صفحاتی که کاربر بازدید می‌کند ثبت می‌شوند

فعال‌سازی ردیابی نشست

import { init } from '@metrixorg/websdk'; init('APP_ID', 'API_KEY', { sessionTracking: { enabled: true, // Required packageName: 'my-app', // Optional: identify your app }, });

پیکربندی

interface SessionTrackingConfig { enabled: boolean; // Enable/disable session tracking (required) packageName?: string; // App identifier for tracking (optional) }
فیلدنوعالزامیتوضیحپیش‌فرض
enabledboolean✓فعال‌سازی ردیابی نشستندارد
packageNamestringشناسه سفارشی اپندارد

نشست‌ها چگونه کار می‌کنند

چرخه عمر نشست

Session Lifecycle Diagram

مواردی که در نشست ردیابی می‌شوند

  1. بارگذاری صفحه / فوکوس

    • وقتی صفحه فعال می‌شود
    • بعد از ۳۰ دقیقه یا بیشتر عدم فعالیت
  2. وضعیت دیده‌شدن صفحه

    • وقتی صفحه hidden شود، نشست متوقف می‌شود
    • وقتی دوباره visible شود، نشست ادامه پیدا می‌کند
  3. تغییرات URL

    • هر URL بازدیدشده ثبت می‌شود
    • الگوی جابجایی کاربر بین صفحات ردیابی می‌شود
  4. مدت زمان

    • کل زمان فعال بودن روی صفحه
    • فاصله زمانی بین اقدامات
  5. عدم فعالیت

    • آستانه timeout برابر ۳۰ دقیقه
    • نشست قبلی بسته شده و نشست جدید به‌صورت خودکار آغاز می‌شود

شمارش نصب

وب‌اپ‌ها

اولین نشست کاربر به‌صورت خودکار به‌عنوان نصب ثبت می‌شود:

init('APP_ID', 'API_KEY', { sessionTracking: { enabled: true, }, }); // اولین بازدید کاربر → نصب ثبت می‌شود // بازدیدهای بعدی → نشست‌ها ردیابی می‌شوند

PWA (Progressive Web App)

نیاز به تنظیم خاصی ندارد. کافی است ردیابی نشست را فعال کنید تا اولین نشست = نصب محسوب شود:

init('APP_ID', 'API_KEY', { sessionTracking: { enabled: true, packageName: 'my-pwa', // Optional identifier }, });

SDK بدون نیاز به شناسه دستگاه، نصب‌ها را می‌شمارد؛ زیرا نصب PWA در سطح مرورگر انجام می‌شود.


بخش ۳: راه‌اندازی TWA (Trusted Web Activity)

نمای کلی

SDK اتریبیوشن اندروید از طریق کانال postMessage کروم، وب‌سایت داخل TWA را به اتریبیوشن و آنالیتیکس نیتیو متریکس متصل می‌کند. این روش به Chrome نسخه 115.0.5790.13 یا بالاتر و AndroidX Browser نسخه 1.6.0 یا بالاتر نیاز دارد. در TWA نمی‌توان از رابط جاوااسکریپت WebView استفاده کرد.

این پل نیتیو از Web SDK مستقل است. Web SDK همچنان در صورت فعال بودن sessionTracking.enabled پارامتر gps_adid را از URL می‌خواند، اما برای پل نیتیو نیازی به انتقال Advertising ID در URL نیست. اگر وب‌سایت برای مرورگر یا PWA از Web SDK هم استفاده می‌کند، مقداردهی اولیه آن را برای همان کاربرد نگه دارید و یک رویداد را هم‌زمان از هر دو SDK ارسال نکنید.

مرحله ۱: پیکربندی اپلیکیشن اندروید

SDK اتریبیوشن و Browser را به اپ اضافه کنید. اگر کد وب از طریق پل، فرمان‌های آنالیتیکس ارسال می‌کند، ماژول analytics را نیز اضافه کنید. نمونه اندروید TWA از نسخه 2.8.6 متریکس استفاده می‌کند؛ نسخه انتخابی باید MetrixAttributionTwaBridge را داشته باشد.

dependencies { implementation("androidx.browser:browser:1.6.0") implementation("ir.metrix.attribution:metrix:2.8.6") implementation("ir.metrix.analytics:metrix:2.8.6") }

طبق راهنمای پیاده‌سازی اندروید، ir.metrix.APPLICATION_ID و ir.metrix.API_KEY را در manifest اپلیکیشن تنظیم کنید. در صورت امکان، امضای SDK را در تنظیمات نیتیو نگه دارید. سرویس را داخل <application> و بخش queries را مستقیماً داخل <manifest> قرار دهید:

<queries> <intent> <action android:name="android.support.customtabs.action.CustomTabsService" /> </intent> </queries> <application> <service android:name="androidx.browser.customtabs.PostMessageService" android:exported="true" /> </application>

مرحله ۲: تأیید مبدأ وب‌سایت

فایل https://app.example/.well-known/assetlinks.json را از طریق HTTPS منتشر کنید و نام پکیج و اثرانگشت گواهی امضای اپ اندروید را جایگزین کنید:

[ { "relation": [ "delegate_permission/common.handle_all_urls", "delegate_permission/common.use_as_origin" ], "target": { "namespace": "android_app", "package_name": "com.example.twa", "sha256_cert_fingerprints": ["YOUR:APP:SIGNING:CERTIFICATE:SHA256:FINGERPRINT"] } } ]

handle_all_urls ارتباط TWA را برقرار می‌کند و use_as_origin اجازه کانال پیام را می‌دهد. در صورت استفاده از Google Play App Signing، اثرانگشت گواهی امضای اپ را ثبت کنید؛ برای تست نسخه‌های توسعه، اثرانگشت گواهی توسعه را نیز بیفزایید. مبدأ HTTPS پل باید دقیقاً با مبدأ وب‌سایت یکسان باشد و مسیر نداشته باشد.

مرحله ۳: راه‌اندازی با همان نشست مرورگر

MetrixAttributionTwaBridge را در ترد اصلی بسازید، آن را به newSession بدهید، همان نشست را به پل متصل کنید و TWA را با همان نشست اجرا کنید:

private var bridge: MetrixAttributionTwaBridge? = null private var browserBound = false private val browserConnection = object : CustomTabsServiceConnection() { override fun onCustomTabsServiceConnected(name: ComponentName, client: CustomTabsClient) { client.warmup(0L) val currentBridge = bridge ?: return val session = client.newSession(currentBridge) ?: run { currentBridge.disconnect() launchFallback() return } currentBridge.attach(session) TrustedWebActivityIntentBuilder(Uri.parse("https://app.example")) .build(session) .launchTrustedWebActivity(this@MainActivity) } override fun onServiceDisconnected(name: ComponentName) { bridge?.disconnect() } } private fun launchTwa() { bridge = MetrixAttributionTwaBridge( origin = "https://app.example", stateListener = MetrixAttributionTwaBridge.StateListener { state, error -> // Log READY or UNAVAILABLE, with its error, during device testing. Log.d("MetrixTwa", "Bridge: $state; error: $error") } ) val provider = CustomTabsClient.getPackageName(this, null) browserBound = provider != null && CustomTabsClient.bindCustomTabsService(this, provider, browserConnection) if (!browserBound) { bridge?.disconnect() launchFallback() } } private fun launchFallback() { CustomTabsIntent.Builder().build().launchUrl(this, Uri.parse("https://app.example")) finish() } override fun onDestroy() { bridge?.close() if (browserBound) unbindService(browserConnection) super.onDestroy() }

این نمونه در یک AppCompatActivity قرار می‌گیرد و به importهای ComponentName، Uri، Log، CustomTabsClient، CustomTabsIntent، CustomTabsServiceConnection، TrustedWebActivityIntentBuilder و MetrixAttributionTwaBridge نیاز دارد. launchTwa() را از onCreate فراخوانی کنید. اگر Bubblewrap یا Android Browser Helper مالک callback نشست است، callbackهای تأیید ارتباط، ناوبری، آماده‌شدن کانال و دریافت پیام را به پل منتقل کنید. برای هر نشست مرورگر، پل جدیدی بسازید.

مرحله ۴: اتصال از وب‌سایت

فایل metrix_attribution_twa.js را از مسیر attribution/src/main/assets/ در SDK اندروید به وب‌سایت کپی کنید و آن را پیش از آغاز غیرهم‌زمان اپلیکیشن بارگذاری کنید. TWA نسخه منتشرشده روی HTTPS را می‌خواند؛ به‌روزرسانی dependency اندروید به‌تنهایی این اسکریپت را تغییر نمی‌دهد.

<script src="/metrix_attribution_twa.js"></script> <script> const nativeMetrix = MetrixAttributionTwa.create({ origin: window.location.origin }); nativeMetrix.ready.then(async () => { await nativeMetrix.setUserIdListener(userId => console.log('Native user ID:', userId)); await nativeMetrix.setOnAttributionChangedListener(data => console.log('Native attribution:', data)); await nativeMetrix.setOnDeeplinkResponseListener(url => { // Route the deferred deep link in the website. console.log('Deferred deep link:', url); }, false); // false prevents the native SDK from also launching the link. // Optional: await nativeMetrix.newEventByName('TWA open', { source: 'web' }); }).catch(error => { // Normal browser visits and unsupported providers can continue without the bridge. console.log('Native Metrix unavailable:', error.message); }); // Call nativeMetrix.teardown() when permanently disposing this page's client. </script>

اطلاعات این listenerها از SDK نیتیو می‌آید. توابع Web SDK شامل getAttributionStatus() و onMetrixUserIdReceived() مربوط به هویت وب جداگانه هستند. پس از هر بار بارگذاری کامل صفحه، client جدید بسازید و listenerها را دوباره ثبت کنید؛ در مسیریابی تک‌صفحه‌ای می‌توان همان client را نگه داشت.

بررسی پیاده‌سازی

با اپ امضاشده و assetlinks.json منتشرشده، برنامه را در Chrome 115+ اجرا کنید و بررسی کنید وضعیت پل نیتیو READY شود و وب‌سایت callback شناسه کاربر و اتریبیوشن را دریافت کند. صفحه را بارگذاری مجدد کنید و دریافت callbackها در صفحه جدید را بررسی کنید. در صورت قطع ارتباط، یکسان‌بودن مبدأ، پکیج و اثرانگشت، رابطه use_as_origin، نسخه مرورگر و بارگذاری زودهنگام اسکریپت را بررسی کنید. وب‌سایت باید در صورت دردسترس‌نبودن کانال نیتیو نیز کار کند.


بخش ۴: دریافت شناسه کاربر متریکس

نمای کلی

Metrix برای هر دستگاه یک شناسه کاربر یکتا تولید می‌کند. این شناسه در موارد زیر مفید است:

  • ردیابی ایونت از سرور به سرور از طریق API
  • ردیابی بین دستگاهی
  • تحلیل کاربر
  • دیباگ

دریافت شناسه کاربر متریکس

import { onMetrixUserIdReceived } from '@metrixorg/websdk'; const metrixUserId = await onMetrixUserIdReceived(); console.log('Metrix User ID:', metrixUserId);

امضای متد

onMetrixUserIdReceived(): Promise<string>

خروجی: رشته یکتای شناسه کاربر متریکس

زمان‌بندی

شناسه کاربر متریکس مدت کوتاهی پس از مقداردهی اولیه SDK تولید می‌شود. برای منتظر ماندن تا آماده شدن آن، از onMetrixUserIdReceived() استفاده کنید:

import { init, onMetrixUserIdReceived } from '@metrixorg/websdk'; // Initialize SDK init('APP_ID', 'API_KEY', { sessionTracking: { enabled: true }, }); // Wait for ID (typically ready within 1-2 seconds) try { const metrixUserId = await onMetrixUserIdReceived(); console.log('Ready to use:', metrixUserId); } catch (error) { console.error('Failed to get Metrix user ID:', error); }

یکپارچه‌سازی Server-to-Server

از شناسه کاربر متریکس برای ردیابی ایونت در بک‌اند استفاده کنید:

// Frontend: Get the ID const metrixUserId = await onMetrixUserIdReceived(); // Send to backend fetch('/api/user/setup', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ metrixUserId }), });
# Backend: Use for server-to-server API calls import requests def send_event_to_metrix(metrix_user_id, event_name): response = requests.post( 'https://api.metrix.ir/v1/events', headers={'Authorization': 'Bearer YOUR_API_KEY'}, json={ 'userId': metrix_user_id, 'eventName': event_name, 'timestamp': datetime.utcnow().isoformat(), } ) return response.json()

ذخیره‌سازی شناسه

در بیشتر موارد نیازی نیست این شناسه را ذخیره کنید. SDK آن را به‌صورت خودکار مدیریت می‌کند. فقط اگر نیاز بک‌اند خاصی دارید، آن را ذخیره کنید:

const metrixUserId = await onMetrixUserIdReceived(); // Store in database if needed localStorage.setItem('metrix_user_id', metrixUserId); // Or send to backend analyticsAPI.setUserId(metrixUserId);

مثال کامل یکپارچه‌سازی

import { init, authorizeUser, getAttributionStatus, onMetrixUserIdReceived, newEvent, } from '@metrixorg/websdk'; // ========================================== // 1. INITIALIZE SDK // ========================================== init('APP_ID', 'API_KEY', { sessionTracking: { enabled: true, packageName: 'my-web-app', }, }); // ========================================== // 2. GET SYSTEM IDs // ========================================== const metrixUserId = await onMetrixUserIdReceived(); console.log('System User ID:', metrixUserId); // ========================================== // 3. CHECK ATTRIBUTION // ========================================== const attribution = await getAttributionStatus(); console.log('Attribution:', attribution?.attributionStatus); console.log('Campaign:', attribution?.acquisitionCampaign); console.log('Source:', attribution?.acquisitionSource); // ========================================== // 4. AUTHORIZE USER // ========================================== authorizeUser('customer@example.com'); // ========================================== // 5. TRACK EVENTS WITH CONTEXT // ========================================== newEvent('app_opened', { attribution_status: attribution?.attributionStatus, campaign: attribution?.acquisitionCampaign, }); // ========================================== // 6. SEND TO ANALYTICS // ========================================== analytics.init({ userId: metrixUserId, customerId: 'customer@example.com', campaign: attribution?.acquisitionCampaign, }); // ========================================== // 7. MONITOR SESSION // ========================================== document.addEventListener('visibilitychange', () => { if (document.hidden) { console.log('Session paused'); } else { console.log('Session resumed'); } });

Best Practices

۱. مقداردهی اولیه را زود انجام دهید

// ✓ Good - Initialize immediately import { init } from '@metrixorg/websdk'; init('APP_ID', 'API_KEY', { ... }); // ✗ Bad - Delayed initialization setTimeout(() => init(...), 5000);

۲. منتظر آماده‌شدن شناسه‌ها بمانید

// ✓ Good - Wait for IDs to be ready const id = await onMetrixUserIdReceived(); const attribution = await getAttributionStatus(); // ✗ Bad - Use immediately without waiting console.log(metrixUserId); // May be undefined

۳. ردیابی نشست را فعال کنید

// ✓ Good - Enable to count installs init('APP_ID', 'API_KEY', { sessionTracking: { enabled: true }, }); // ✗ Bad - Disabled, installs not tracked init('APP_ID', 'API_KEY', { sessionTracking: { enabled: false }, });

۴. خطاها را به‌درستی مدیریت کنید

// ✓ Good try { const attribution = await getAttributionStatus(); // Use attribution } catch (error) { console.error('Attribution unavailable:', error); // Graceful fallback } // ✗ Bad - Unhandled errors crash const attribution = await getAttributionStatus(); console.log(attribution.acquisitionCampaign); // Crashes if null

۵. در TWA از کانال پیام نیتیو استفاده کنید

نسخه منتشرشده metrix_attribution_twa.js را زود بارگذاری کنید و TWA را با همان نشست مرورگری که به MetrixAttributionTwaBridge متصل شده اجرا کنید.


عیب‌یابی

اطلاعات اتریبیوشن در دسترس نیست

مشکل: getAttributionStatus() مقدار null برمی‌گرداند

  • بررسی کنید: آیا SDK قبل از فراخوانی مقداردهی اولیه شده است؟
  • بررسی کنید: آیا شناسه کاربر متریکس آماده است؟ از onMetrixUserIdReceived() استفاده کنید
  • بررسی کنید: آیا اپ دارای API_KEY معتبر است؟
// Wait for ID first await onMetrixUserIdReceived(); const attribution = await getAttributionStatus();

دریافت شناسه کاربر متریکس خیلی طول می‌کشد

مشکل: onMetrixUserIdReceived() timeout می‌شود

  • راه‌حل: مدیریت timeout اضافه کنید
const idPromise = onMetrixUserIdReceived(); const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject('Timeout'), 5000)); try { const metrixUserId = await Promise.race([idPromise, timeoutPromise]); } catch { console.log('ID not available in time'); }

نشست‌ها شروع نمی‌شوند

مشکل: اولین نشست به‌عنوان نصب ثبت نمی‌شود

  • بررسی کنید: آیا sessionTracking.enabled روی true تنظیم شده است؟
  • بررسی کنید: آیا هنگام init شدن SDK، صفحه لود شده است؟
  • راه‌حل: SDK را پیش از بارگذاری کامل صفحه یا در ابتدای اجرا مقداردهی کنید
// در <head> یا ابتدای اجرای اپ قرار دهید init('APP_ID', 'API_KEY', { sessionTracking: { enabled: true }, });

پل نیتیو TWA در دسترس نیست

مشکل: وب‌سایت نمی‌تواند به SDK نیتیو متصل شود.

  • بررسی کنید: آیا assetlinks.json هر دو رابطه لازم و پکیج و اثرانگشت SHA-256 اپ امضاشده را دارد؟
  • بررسی کنید: آیا مبدأ HTTPS پل و وب‌سایت یکسان است و اسکریپت زود بارگذاری شده است؟
  • بررسی کنید: آیا Chrome 115+ در دسترس است و پل به همان نشست مورد استفاده برای راه‌اندازی TWA متصل شده است؟
  • بررسی کنید: آیا listener وضعیت پل در اندروید UNAVAILABLE را گزارش می‌کند؟ خطای همراه آن را بررسی کنید.

پشتیبانی

برای مشکلات مربوط به Attribution و Session Tracking:

  • شناسه در دسترس نیست؟ با onMetrixUserIdReceived() منتظر بمانید
  • Attribution مقدار null برمی‌گرداند؟ بررسی کنید شناسه کاربر متریکس آماده باشد
  • نشست‌ها ردیابی نمی‌شوند؟ مطمئن شوید sessionTracking.enabled: true تنظیم شده است
  • TWA اتریبیوشن نمی‌گیرد؟ اتصال پل نیتیو و تنظیمات Digital Asset Links را بررسی کنید
  • نصب‌ها شمرده نمی‌شوند؟ مطمئن شوید قبل از اولین نشست، ردیابی نشست فعال شده باشد