راهنمای اتریبیوشن (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 بهصورت خودکار:
- ۱۰ ثانیه صبر میکند
- دوباره درخواست را ارسال میکند
- این روند را تا زمان دریافت وضعیت نهایی تکرار میکند
این مکانیزم باعث میشود در نهایت اطلاعات کامل اتریبیوشن را دریافت کنید.
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)
}| فیلد | نوع | الزامی | توضیح | پیشفرض |
|---|---|---|---|---|
enabled | boolean | ✓ | فعالسازی ردیابی نشست | ندارد |
packageName | string | شناسه سفارشی اپ | ندارد |
نشستها چگونه کار میکنند
چرخه عمر نشست

مواردی که در نشست ردیابی میشوند
-
بارگذاری صفحه / فوکوس
- وقتی صفحه فعال میشود
- بعد از ۳۰ دقیقه یا بیشتر عدم فعالیت
-
وضعیت دیدهشدن صفحه
- وقتی صفحه hidden شود، نشست متوقف میشود
- وقتی دوباره visible شود، نشست ادامه پیدا میکند
-
تغییرات URL
- هر URL بازدیدشده ثبت میشود
- الگوی جابجایی کاربر بین صفحات ردیابی میشود
-
مدت زمان
- کل زمان فعال بودن روی صفحه
- فاصله زمانی بین اقدامات
-
عدم فعالیت
- آستانه 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 را بررسی کنید
- نصبها شمرده نمیشوند؟ مطمئن شوید قبل از اولین نشست، ردیابی نشست فعال شده باشد