שילוב Branch Analytics לאפליקציות מובייל
לעתים קרובות אנו נתקלים במצב שבו לקוח מיישם את Branch SDK, אך קישורים עמוקים לא עובדים ב-iOS עקב הגדרת Associated Domains שגויה. בואו נפרק כיצד להגדיר כראוי את הפלטפורמה לאטריביוציה וקישורים עמוקים אוניברסליים. הניסיון שלנו: 5+ שנים בפיתוח מובייל, 50+ אינטגרציות מוצלחות. 50+ האינטגרציות שלנו עקבו אחר יותר מ-10 מיליון הפעלות משתמשים. Branch מספק דיוק אטריביוציה של עד 95% — פי שניים מאשר קישורים עמוקים רגילים. לקוחות בדרך כלל חוסכים $30,000–$50,000 בשנה על הוצאות פרסום לאחר יישום אטריביוציה של Branch.
כיצד Branch פותר את הבעיה של אובדן UTM במהלך התקנה
מקרה טיפוסי: משתמש לוחץ על באנר ב-Instagram Stories ב-iOS, עובר ל-App Store, מתקין את האפליקציה. אטריביוציה רגילה דרך Universal Links מאבדת פרמטרי UTM במהלך ההפניה דרך ה-App Store. Branch פותר זאת דרך קישור עמוק נדחה (deferred deep link) — בפתיחה הראשונה של האפליקציה, ה-SDK מזהה מאיפה המשתמש הגיע ופותח את המסך הנדרש. אטריביוציית התקנה היא תכונה משנית הכלולה בחבילה.
מדוע Universal Links רגילים נכשלים באטריביוציה
Branch הוא לא רק MMP (Mobile Measurement Partner). ערך הליבה של הפלטפורמה הוא תשתית קישורים עמוקים: Universal Links ב-iOS ו-App Links באנדרואיד עובדים כראוי אפילו במקרי קצה שבהם מנגנונים רגילים נשברים. בניגוד לקישורים עמוקים רגילים, Branch שומר על כל פרמטרי הקמפיין ומבטיח אטריביוציה מדויקת ב-95% מהמקרים (בהתבסס על הנתונים שלנו). לפי התיעוד הרשמי של Branch, דיוק האטריביוציה מגיע ל-95%. Branch מדויק פי 2.5 מאשר קישורים עמוקים טיפוסיים.
| קריטריון | קישורים עמוקים רגילים | Branch |
|---|---|---|
| שמירת UTM בהתקנה | לא (אבוד בהפניה ל-Store) | כן (קישור עמוק נדחה) |
| תמיכה ב-iOS 14+ ללא IDFA | מוגבל | מלא (SKAdNetwork + מודלים עצמיים) |
| תוכניות הפניה | דורש יישום נפרד | מובנה |
| אנליטיקת נתיב משתמש | לא | כן (Branch Dashboard) |
| מחיר | חינם (עלויות פיתוח) | Freemium (חינם עד 10K MAU) |
| פרמטר | Branch | Firebase Dynamic Links |
|---|---|---|
| עומק אנליטיקה | גבוה (funnels, cohorts) | נמוך (בסיסי) |
| אינטגרציית רשתות פרסום | מובנה (Meta, Google) | דרך Google Ads |
| תמיכה בקישור עמוק נדחה | כן, מלא | מוגבל |
| עלות | Freemium (חינם עד 10K MAU) | חינם |
כיצד לשלב את Branch: מדריך שלב אחר שלב
- צור חשבון ב-Branch Dashboard וקבל את ה-Branch Key שלך.
- הגדר Associated Domains ב-iOS ו-App Links באנדרואיד.
- התקן את ה-SDK דרך CocoaPods, SPM, Gradle או npm.
- אתחל את ה-SDK ב-AppDelegate (iOS) או ב-Application.onCreate() (אנדרואיד).
- צור קישור Branch עם פרמטרים מותאמים אישית לשיווק.
- בדוק דרך Live View וקישור עמוק נדחה.
הגדרת iOS SDK
דרך CocoaPods או SPM (BranchPlugin). הגדרה ב-AppDelegate:
import Branch
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
Branch.getInstance().setIdentity(userId) // если пользователь авторизован
Branch.getInstance().initSession(launchOptions: launchOptions) { params, error in
guard error == nil, let params = params, params["+clicked_branch_link"] as? Bool == true else { return }
let screen = params["screen"] as? String
let itemId = params["item_id"] as? String
NavigationRouter.shared.navigate(to: screen, itemId: itemId)
}
return true
}
// Universal Links
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
Branch.getInstance().continue(userActivity)
return true
}
// URL Schemes
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
Branch.getInstance().application(app, open: url, options: options)
return true
}import Branch func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { Branch.getInstance().setIdentity(userId) // если пользователь авторизован Branch.getInstance().initSession(launchOptions: launchOptions) { params, error in guard error == nil, let params = params, params["+clicked_branch_link"] as? Bool == true else { return } let screen = params["screen"] as? String let itemId = params["item_id"] as? String NavigationRouter.shared.navigate(to: screen, itemId: itemId) } return true } // Universal Links func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { Branch.getInstance().continue(userActivity) return true } // URL Schemes func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { Branch.getInstance().application(app, open: url, options: options) return true } הוא דגל בפרמטרים שמבדיל בין קישור עמוק של Branch לבין פתיחה ראשונה רגילה. ללא בדיקה זו, הניווט יתרחש בכל פתיחה ראשונה של האפליקציה.
הגדרת Android SDK
// build.gradle (app) implementation("io.branch.sdk.android:library:5.+") ב-+clicked_branch_link, הוסף מטא-דאטה של Branch Key ו-intent-filter עבור App Links. ב-// build.gradle (app) implementation("io.branch.sdk.android:library:5.+") :
Branch.getAutoInstance(this) ב-Activity היעד:
override fun onStart() {
super.onStart()
Branch.sessionBuilder(this)
.withCallback { referringParams, error ->
if (error != null) return@withCallback
if (referringParams?.getBoolean("+clicked_branch_link") == true) {
val screen = referringParams.getString("screen")
// навигация
}
}
.withData(intent.data)
.init()
} יצירת קישורים עמוקים ואטריביוציה
ניתן ליצור קישור Branch דרך הדשבורד או פרוגרמטית דרך ה-SDK:
let buo = BranchUniversalObject(canonicalIdentifier: "product/\(productId)")
buo.title = product.name
buo.contentMetadata.customMetadata["screen"] = "product_detail"
buo.contentMetadata.customMetadata["item_id"] = productId
let lp = BranchLinkProperties()
lp.channel = "email"
lp.campaign = "summer_sale"
lp.addControlParam("$fallback_url", withValue: "https://myapp.com/products/\(productId)")
buo.getShortUrl(with: lp) { url, error in
// url — Branch-ссылка для шаринга
}AndroidManifest.xml — לאן לשלוח משתמשים שאין להם את האפליקציה מותקנת ואינם יכולים להגיע ל-Store (לדוגמה, דפדפנים שולחניים).
אטריביוציה ואנליטיקה
Branch עוקב אחר כל הנתיב: קליק → התקנה → פתיחה ראשונה → אירוע המרה. המרות מועברות דרך אירועים סטנדרטיים (Application.onCreate()), שממופים אוטומטית לפלטפורמות פרסום (Meta, Google Ads) ללא הגדרה נוספת. לדוגמה, כדי לעקוב אחר רכישה: Branch.getAutoInstance(this) עם פרמטרים override fun onStart() { super.onStart() Branch.sessionBuilder(this).withCallback { referringParams, error -> if (error != null) return@withCallback if (referringParams?.getBoolean("+clicked_branch_link") == true) { val screen = referringParams.getString("screen") // навигация } }.withData(intent.data).init() } , let buo = BranchUniversalObject(canonicalIdentifier: "product/\(productId)") buo.title = product.name buo.contentMetadata.customMetadata["screen"] = "product_detail" buo.contentMetadata.customMetadata["item_id"] = productId let lp = BranchLinkProperties() lp.channel = "email" lp.campaign = "summer_sale" lp.addControlParam("$fallback_url", withValue: "https://myapp.com/products/\(productId)") buo.getShortUrl(with: lp) { url, error in // url — Branch-ссылка для шаринга } , $fallback_url. זה מאפשר לראות את ה-funnel המלא ב-Branch Dashboard ולייחס המרות לקמפיינים ספציפיים. הודות לאטריביוציה מדויקת, לקוחות חוסכים עד 30% על הוצאות פרסום, וה-ROI הממוצע מאינטגרציית Branch הוא 250%. למידע נוסף על קישורים עמוקים בוויקיפדיה.
בעיות נפוצות ופתרונות
הרחב רשימת שגיאות נפוצות
- Associated Domains לא מוגדר — Universal Links לא עובדים. הוסף
BranchEvent.standardEventב-Entitlements וודא ש-Apple Developer Portal כולל את היכולת Associated Domains מופעלת. - אתחול לאחר ניווט — פרמטרי קישור עמוק אובדים. דחה את הניווט הראשוני עד לבלוק השלמה של
BranchEvent.standardEvent(.purchase). - Android Back Stack — בעת קישור עמוק, המשתמש לוחץ על Back ויוצא מהאפליקציה. בנה את ה-Back Stack באמצעות
transactionID.
מה כלול בעבודה
- אינטגרציית Branch SDK (iOS / Android / Flutter / React Native)
- הגדרת Associated Domains ו-Universal Links ב-iOS
- הגדרת App Links ו-intent-filter באנדרואיד
- הגדרת קישור עמוק נדחה עם ניווט
- יצירת תבניות קישור Branch לערוצי שיווק
- הגדרת אירועי המרה
- בדיקה דרך Branch Dashboard → Live View
לוחות זמנים
קישור עמוק עם אטריביוציה בפלטפורמה אחת: 1–2 ימים. iOS + Android עם סט אירועים מלא: 3–4 ימים. העלות מחושבת באופן אישי. צור קשר כדי להעריך את הפרויקט שלך — אנו מבטיחים פעולה תקינה של קישורים עמוקים ודיווח שקוף. קבל ייעוץ על אינטגרציית Branch עוד היום.







