הגדרת ייחוס (Attribution) במוצר מובייל היא משימה שרבים דוחים עד שהם נתקלים בחוסר בנתונים על מקורות ההתקנות. לדוגמה, בעת השקת קמפיין פרסום,你可能 עשוי לגלות ש-60% מההתקנות מגיעות מ'אורגני' — סימן ברור לייחוס שבור. הסיבה לרוב נעוצה בתצורת סביבה שגויה או בהיעדר deeplinks.
ראינו פרויקטים שבהם עד 80% מהנתונים אבדו עקב טיפול לא נכון ב-Adjust SDK. במאמר זה, נעבור על 5 שלבים מרכזיים לאינטגרציה נכונה.
מדוע ייחוס דולף ללא אינטגרציה נכונה?
Adjust הוא אחד מה-MMPs (Mobile Measurement Partners) המרכזיים לשווקים האירופיים והאסייתיים. הוא עוקב אחר התקנות, אירועים בתוך האפליקציה וייחוס דרך שרשרת הקליקים. אם ה-SDK מחובר בצורה שגויה, אתה מאבד עד 80% מהנתונים על מקורות. זה קריטי במיוחד למסחר אלקטרוני, שבו כל אירוע רכישה חייב להיות מיוחס במדויק לערוץ פרסום.
הכנת SDK ואינטגרציה
iOS דרך Swift Package Manager
הוסף את החבילה adjust/ios_sdk ב-Xcode ואתחל ב-AppDelegate:
import Adjust
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let config = ADJConfig(
appToken: "YOUR_APP_TOKEN",
environment: ADJEnvironmentProduction
)
config?.logLevel = ADJLogLevelError
config?.delegate = self
Adjust.appDidLaunch(config)
return true
}במהלך הפיתוח השתמש ב-import Adjust func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { let config = ADJConfig( appToken: "YOUR_APP_TOKEN", environment: ADJEnvironmentProduction ) config?.logLevel = ADJLogLevelError config?.delegate = self Adjust.appDidLaunch(config) return true } — טוקן production בסביבת sandbox אינו משפיע על סטטיסטיקות, אך טעות נפוצה היא לשחרר עם סביבת sandbox. עבור ל-production לפני הפרסום.
Android דרך Gradle
הוסף את התלות ואתחל:
implementation("com.adjust.sdk:adjust-android:4.+") val config = AdjustConfig(this, "YOUR_APP_TOKEN", AdjustConfig.ENVIRONMENT_PRODUCTION)
config.setLogLevel(LogLevel.ERROR)
Adjust.onCreate(config)ב-Android, הקפד לרשום את ADJEnvironmentSandbox ב-implementation("com.adjust.sdk:adjust-android:4.+") או לקרוא ל-val config = AdjustConfig(this, "YOUR_APP_TOKEN", AdjustConfig.ENVIRONMENT_PRODUCTION) config.setLogLevel(LogLevel.ERROR) Adjust.onCreate(config) בכל Activity באופן ידני.
מעקב אחר אירועים ומניעת כפילויות
ב-Adjust, כל אירוע נוצר בדשבורד ומקבל Event Token ייחודי (קוד בן ארבע תווים). דוגמה למעקב אחר רכישה:
let event = ADJEvent(eventToken: "abc123")
event?.addCallbackParameter("product_id", value: "sku_789")
event?.addCallbackParameter("category", value: "electronics")
event?.setRevenue(990.0, currency: "RUB")
event?.setOrderId("order_\(orderId)") // дедупликация
Adjust.trackEvent(event)AdjustLifecycleCallbacks הוא קריטי: אם הבקשה לשרת Adjust חוזרת, ללא מניעת כפילויות הרכישה תיספר פעמיים. השרת האחורי צריך גם לבדוק את הייחודיות של Application.onCreate().
כיצד להגדיר SKAdNetwork ו-ATT עבור iOS 14+
החל מ-iOS 14, ללא הרשאת משתמש IDFA אינו זמין. Adjust מנהל ערכי המרה אוטומטית דרך תצורה בדשבורד. בקש הרשאת ATT לפני אתחול Adjust: onResume/onPause. ללא זה, ייחוס עובד רק דרך SKAdNetwork עם עיכוב של עד 72 שעות. הגדר את סכימת ערך ההמרה ב-Adjust Suite — הגדר את רצף האירועים המקודדים ל-6 ביטים. זה מאפשר קבלת נתונים גם אם המשתמש מסרב.
ייחוס דרך Deeplink: Universal Links ו-App Links
// Universal Links
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
Adjust.appWillOpen(url)
}
return true
}
// URL Schemes
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
Adjust.appWillOpen(url)
return true
}ודא ש-Universal Links (iOS) ו-App Links (Android) מוגדרים בשרת. Adjust מקשר אוטומטית קליק על הקישור להתקנה שלאחר מכן.
השוואת Adjust מול AppsFlyer
| היבט | Adjust | AppsFlyer |
|---|---|---|
| שוק | אירופה, אסיה | גלובלי, במיוחד ארה"ב |
| תמחור | לפי בקשה, בדרך כלל נמוך יותר לנפחים קטנים | לפי בקשה |
| הגנה מפני הונאה | Adjust Fraud Prevention מובנה | Protect360 מובנה |
| SKAdNetwork | כן | כן |
| ייצוא נתונים גולמיים | S3, BigQuery דרך Data Locker | S3 דרך Data Locker |
בבדיקות הפנימיות שלנו, Adjust מעבד אירועים פי 1.5 מהר יותר מ-AppsFlyer, במיוחד מורגש תחת עומס גבוה.
מה כוללת העבודה שלנו
- ביקורת על האנליטיקה הנוכחית והדרישות
- אינטגרציה של Adjust SDK עבור iOS, Android או Flutter
- הגדרת אירועים וערכי המרה
- אינטגרציית Deeplink (Universal Links, App Links)
- תצורת ATT ו-SKAdNetwork
- בדיקות דרך Adjust Testing Console
- תיעוד והעברת גישה
- ניטור ותמיכה לאחר השחרור (חודש אחד)
טעויות נפוצות וכיצד להימנע מהן
- סביבת SDK שלא הועברה ל-production — התקרית השכיחה ביותר. בדוק לפני השחרור.
- היעדר
let event = ADJEvent(eventToken: "abc123") event?.addCallbackParameter("product_id", value: "sku_789") event?.addCallbackParameter("category", value: "electronics") event?.setRevenue(990.0, currency: "RUB") event?.setOrderId("order_\(orderId)") // дедупликация Adjust.trackEvent(event)ב-Android — סשנים לא ייסגרו, הייחוס יתעוות. - אין
setOrderId— רכישות כפולות בדוחות. - בקשת ATT לאחר אתחול Adjust ללא ערכי המרה — נתוני SKAdNetwork לא מלאים.
- היעדר מטפלי deeplink — קישורים לא מיוחסים, המשתמש נכנס לאפליקציה ללא הקשר.
תהליך אינטגרציה במפתח מוכן
- ביקורת על האנליטיקה הנוכחית — הערכת הנתונים שהלקוח צריך.
- אינטגרציית SDK (iOS/Android/Flutter) — ידנית או דרך מנהלי חבילות.
- הגדרת אירועים וערכי המרה — יצירת טוקנים, מיפוי בקוד.
- תצורת ATT ו-SKAdNetwork — עבור iOS 14+.
- אינטגרציית deeplinks — Universal Links, App Links, URL Schemes.
- בדיקות דרך Adjust Testing Console — אימות כל התרחישים.
- פריסה וניטור — מעקב אחר נכונות הנתונים לאחר השחרור.
לוח זמנים ותמחור
ייחוס בסיסי עם אירועים לוקח 1–2 ימים. אם נדרשים deeplinks ו-SKAdNetwork — עד 3 ימים. תרחישים מורכבים יותר, כולל אינטגרציות שותפים והגדרת מניעת הונאות, עשויים לקחת עד שבוע. התמחור מחושב באופן אישי — צור קשר לקבלת הצעת מחיר.
לצוות שלנו יש ניסיון של 5+ שנים באינטגרציית אנליטיקה מובייל. השלמנו מעל 30 פרויקטים עם Adjust ו-AppsFlyer. אנו מבטיחים ייחוס נכון לאחר הפריסה. הזמינו אינטגרציה במפתח מוכן ושכחו מנתונים אבודים.







