משתמש מקיש על קישור, עובר לחנות, מתקין את האפליקציה, ונוחת בדיוק על המסך הרצוי. ללא זה, עד 30% מהתנועה מקמפיינים פרסומיים אובדת. יישום לקוי של deep linking עולה לעסקים מיליוני דולרים בהמרות אבודות מדי שנה. הצוות שלנו, עם ניסיון של 10+ שנים ב-iOS ו-Android, מספק פתרון סוהר תוך 2–4 שבועות.
שלושה סוגי Deep Links: מה לבחור?
| סוג | דוגמה | אמינות | גיבוי | מתי להשתמש |
|---|---|---|---|---|
| Custom URL Scheme | myapp://product/123 |
נמוכה (יתכנו התנגשויות) | אין | תקשורת פנימית בין אפליקציות |
| Universal Links (iOS) / App Links (Android) | https://domain.com/product/123 |
גבוהה (אימות מערכת) | דפדפן | ייצור, כל תרחיש |
| Deferred Deep Link | קישור עם פרמטרים | תלוי ב-SDK | חנות + התקנה | קמפיינים פרסומיים, רכישת משתמשים חדשים |
Custom URL Scheme הוא הפשוט ביותר אך הכי פחות אמין. אם האפליקציה לא מותקנת, הדפדפן מציג שגיאה. מספר אפליקציות יכולות לרשום את אותו scheme — לא ניתן לדעת איזו תיפתח. זה מתאים רק לתרחישים פנימיים.
Universal Links (iOS) / App Links (Android) הם קישורי HTTP/HTTPS שהמערכת מיירטת ופותחת באפליקציה במקום בדפדפן. אם האפליקציה לא מותקנת, יש גיבוי לדפדפן. אמין, מאומת, עם גיבוי תקין. זהו התקן לייצור.
Deferred Deep Links שומרים על הקשר גם אם האפליקציה לא מותקנת. המשתמש מקיש → App Store → התקנה → פתיחה → מסך נכון. מיושם דרך Branch.io, Adjust, או AppsFlyer (Firebase Dynamic Links כבר לא נתמך).
איך להגדיר Universal Links ב-iOS?
נדרש קובץ apple-app-site-association (AASA) על השרת:
{
"applinks": {
"apps": [],
"details": [
{
"appIDs": ["TEAMID.com.company.app"],
"components": [
{
"/": "/product/*",
"comment": "Страницы товаров"
},
{
"/": "/profile/*"
},
{
"/": "/order/*"
},
{
"/": "/promo/*",
"?": {
"ref": "?"
}
}
]
}
]
}
}ה-AASA חייב להיות מוגש עם { "applinks": { "apps": [], "details": [ { "appIDs": ["TEAMID.com.company.app"], "components": [ { "/": "/product/*", "comment": "Страницы товаров" }, { "/": "/profile/*" }, { "/": "/order/*" }, { "/": "/promo/*", "?": { "ref": "?" } } ] } ] } } , ללא הפניות, סטטוס 200. מטמון Apple CDN שומר אותו עד 48 שעות. ב-iOS 16+ קיים מצב מפתח להאצת עדכונים בדיבוג. ב-Content-Type: application/json, ציין דומיינים תחת Info.plist, וטפל ב-com.apple.developer.associated-domains בתוך SceneDelegate. מידע נוסף ב-תיעוד Apple.
App Links ב-Android: הגדרה שלב אחר שלב
קובץ NSUserActivity על השרת:
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.company.app",
"sha256_cert_fingerprints": ["AA:BB:CC:..."]
}
}
]טביעת אצבע SHA256 מה-keystore: assetlinks.json. טביעות האצבע של דיבוג ושחרור שונות — הוסף את שתיהן ל-[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.company.app", "sha256_cert_fingerprints": ["AA:BB:CC:..."] } }] הייצור או השתמש בדומיינים שונים.
ב-keytool -list -v -keystore release.jks:
<activity android:name=".MainActivity">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="yourdomain.com" android:pathPrefix="/product/" />
</intent-filter>
</activity>assetlinks.json מפעיל אימות בעת התקנה. לבדיקה: AndroidManifest.xml. אם <activity android:name=".MainActivity"> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" android:host="yourdomain.com" android:pathPrefix="/product/" /> </intent-filter> </activity> — הכל עובד.
ראוטר בצד הלקוח: טיפול מרכזי
אין יותר android:autoVerify="true" מפוזרים בכל הקוד. ראוטר יחיד עם תור של deep links ממתינים למקרה שהניווט עדיין לא אותחל.
// Android class DeepLinkRouter {
fun handle(intent: Intent, navController: NavController) {
val uri = intent.data ?: return
val path = uri.path ?: return
val route = when {
path.matches(Regex("/product/(\\d+)")) -> Route.ProductDetail(uri.lastPathSegment ?: return)
path.matches(Regex("/order/(\\w+)")) -> Route.OrderDetail(uri.lastPathSegment ?: return)
path == "/profile" -> Route.Profile
path.startsWith("/promo/") -> {
val ref = uri.getQueryParameter("ref")
Route.Promo(uri.lastPathSegment ?: return, ref)
}
else -> {
openInBrowser(uri)
return
}
}
navController.navigate(route)
}
} // iOS final class DeepLinkRouter {
func handle(url: URL) {
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false) else { return }
let pathComponents = components.path.split(separator: "/").map(String.init)
switch pathComponents.first {
case "product" where pathComponents.count == 2:
navigationManager.push(.productDetail(id: pathComponents[1]))
case "order" where pathComponents.count == 2:
navigationManager.push(.orderDetail(id: pathComponents[1]))
case "profile":
navigationManager.push(.profile)
default:
UIApplication.shared.open(url)
}
}
} למה Deferred Deep Links קריטיים לפרסום?
Universal Link רגיל מאבד הקשר אם האפליקציה לא מותקנת. Deferred Deep Link זוכר פרמטרים (למשל, מזהה מוצר) ומעביר אותם לאחר ההתקנה. זה מגדיל את ההמרה הפרסומית ב-20–40%. בעלות ממוצעת לליד של $10, deep linking נכון חוסך עד $3,000 בחודש על 10,000 התקנות. ליישום, אנו משתמשים ב-Branch.io או Adjust — הם מספקים SDKs ולוחות מחוונים למעקב.
אילו שלבים כולל יישום Deep Linking?
- ביקורת על הניווט הנוכחי ו-URL scheme.
- עיצוב ראוטר עם תור של deep links ממתינים.
- הגדרת AASA (iOS) ו-assetlinks.json (Android).
- אינטגרציה של Universal Links / App Links + טיפול בקוד.
- חיבור Deferred Deep Links דרך SDK נבחר.
- בדיקות על מכשירים פיזיים (iOS ו-Android).
- תיעוד לתחזוקה וגישה.
- אחריות ל-30 יום לאחר המסירה.
הזמינו ביקורת ניווט — נעריך את מורכבות היישום תוך יומיים.
מהן הטעויות הנפוצות ביותר ב-Deep Linking?
- הפניה ל-CDN שוברת App Links. אם הדומיין מפנה ל-www, יש צורך ב-AASA בשניהם.
- Content-Type שגוי. AASA חייב להיות רק
adb shell pm get-app-links com.company.app. - חוסר טיפול ב-
STATE_APPROVEDב-Android. Deep link בפתיחה חמה מתעלם. - ניווט לפני ש-NavController מוכן. השתמש בתור.
השוואת ספקי Deferred Deep Link
| ספק | גודל SDK | Fingerprinting | חלון ייחוס | אינטגרציה |
|---|---|---|---|---|
| Branch.io | ~2 MB | כן | 7 ימים | פשוטה, SDK יחיד |
| Adjust | ~1.5 MB | לא | 30 ימים | ניתנת להתאמה אישית |
| AppsFlyer | ~1.8 MB | כן | 30 ימים | אנליטיקה רחבה |
| Airbridge | ~1.2 MB | לא | 14 ימים | קלילה, מהירה |
לוח זמנים ועלות
יישום של Universal Links + App Links + ראוטר + deferred deep links אורך 2 עד 4 שבועות. העלות מחושבת באופן אישי לאחר הערכת היקף העבודה. צרו קשר לייעוץ והערכה מוקדמת.
Deep link הוא מושג יסודי שבלעדיו אי אפשר לדמיין אפליקציות מובייל מודרניות. נעזור לכם ליישם אותו נכון וללא טרחה.







