دیپلینک (Deep Link) — یک URL است که کاربر را به صفحهای مشخص یا محتوای داخل یک نرمافزار موبایل هدایت میکند و صفحه اصلی را دور میزند. به عکس یک لینک معمولی به یک وبسایت، دیپلینک نرمافزار را فعال کرده و بلافاصله محتوای مورد نظر را باز میکند. به گزارش Android Developers، دیپلینکهای بهدرست پیکربندیشده تبدیل را به عمل مورد نظر تا ۳۰–۵۰% افزایش میدهند چرا که تعداد مراحل تا محتوا کاهش مییابد.
نکات کلیدی
دیپلینک (Deep Link) — یک URI است که پس از کلیک به جای یک صفحه وب، صفحهای مشخص داخل یک نرمافزار موبایل را باز میکند. این فناوری مشکل بنیادین پلتفرمهای موبایل را حل میکند: مرورگر نمیتواند مستقیماً صفحهای نرمافزار را باز کند، و دیپلینک پلی بین وب و کد ناتیو ایجاد میکند. بدون دیپلینک، کاربر همیشه به صفحه اصلی میرود و باید دستی به محتوای مورد نظر برود.
معماری دیپلینک از دو بخش تشکیل شده است: سخیف (scheme) مشخص میکند کدام نرمافزار باید لینک را پردازش کند، و مسیر (path) به منبع مشخصی داخل نرمافزار اشاره میکند — محصول، مقاله، پروفایل کاربری یا بخش تنظیمات. پارامترهای پرسیشی (?source=push&campaign=summer) کتکست اضافی برای تحلیل، شخصیسازی و اسناد کمپین منتقل میکنند.
تمایز بین دیپلینک و لینک معمولی مهیم است. لینک معمولی (https://example.com/product/42) در مرورگر باز میشود و به نسخه وب صفحه میرود. دیپلینک (myapp://product/42) در صورت نصب نرمافزار، صفحه ناتیو را با همان محتوا باز میکند، و اگر نرمافزار وجود نداشته باشد — خطا نشان میدهد. دقیقاً برای حل مشکل fallback بدون مشکل بود که Universal Link (iOS) و App Link (Android) ایجاد شدند.
وظایف مختلف به انواع مختلف دیپلینک نیاز دارند. برخی لینکها فقط با نرمافزار نصبشده کار میکنند، دیگری میتوانند منتظر نصب بمانند، و سومی کتکست تحلیلی منتقل میکنند. انتخاب نوع بستگی به سناریو استفاده دارد: کمپین تبلیغاتی، اعلام push، اشتراک محتوا یا ارسال ایمیل.
Standard Deep Link — نوع پایه که فقط اگر نرمافزار از قبل روی دستگاه نصب شده باشد فعال میشود. کاربر روی لینک myapp://product/42 کلیک میکند، سیستم سخیف ثبتشده را تشخیص میدهد و نرمافزار را در صفحه مورد نظر باز میکند. اگر نرمافزار نصب نشده باشد — مرورگر خطای «صفحه پیدا نشد» را نشان میدهد یا هیچ کاری انجام نمیدهد. این نوع برای ناوبری داخلی در نرمافزار از قبل نصبشده مناسب است.
پیکربندی دیپلینک استاندارد ساده است: فقط باید URI-schema را در مانیفست (Android) یا Info.plist (iOS) ثبت کنید. نیازی به تایید سرور یا گواهینامه SSL نیست. اما دقیقاً به دلیل نبود fallback، این نوع برای کمپینهای بازاریابی منسوخ دانسته میشود — از دست رفتن ترافیک از کاربران بدون نرمافزار تا ۶۰% میرسد.
Deferred Deep Link مشکل اصلی دیپلینکهای معمولی را حل میکند: حتی اگر نرمافزار نصب نشده باشد هم کار میکند. کاربر روی لینک کلیک میکند → صفحهای (landing یا App Store/Google Play) را میبیند → نرمافزار را نصب میکند → در نخستین بار شروع، نرمافزار کتکست لینک اصلی را دریافت کرده و صفحه مورد نظر را باز میکند. این فناوری به SDK واسط (AppsFlyer، Branch، Adjust) نیاز دارد که کتکست را تا زمان نخستین شروع روی سرور ذخیره میکند.
Branch — یکی از محبوبترین پلتفرمها برای deferred deep link. آن یک لینک واحد ارائه میدهد که روی همه پلتفرمها کار میکند: سیستم عامل کاربر را تشخیص میدهد، به فروشگاه برنامهها هدایت میکند، و پس از نصب کتکست را منتقل میکند (کد تخفیف، شناسه محصول، منبع کمپین). به گزارش Branch (2024)، deferred deep link تبدیل کمپینهای تبلیغاتی را ۴۰–۷۰% افزایش میدهند.
Contextual Deep Link — یک دیپلینک معمولی یا معوق است که با پارامترهای کتکستی تکمیل شده: منبع ترافیک (source)، کمپین (campaign)، کد تخفیف، referrer، شناسه شریک. پارامترها در URL منتقل شده و توسط نرمافزار برای شخصیسازی پردازش میشوند: نشان دادن پاداش خوشآمدگویی، باز کردن محصول با تخفیف، ثبت آنالیتیک نصب.
برچسبهای UTM (utm_source, utm_medium, utm_campaign) — روش استاندارد انتقال کتکست. در موبایل، دیپلینکهای متنی برای اسناد حیاتی هستند: بدون آنها، صاحب نرمافزار نمیداند کدام کانال کاربر را آورده — ترافیک ارگانیک، تبلیغات Facebook، ارسال ایمیل یا کد QR. اسناد کیفی نیازمند یکپارچگی با MMP (Mobile Measurement Partner) است.
| نوع دیپلینک | نیازمند نصب | انتظار برای نصب | کتکست |
|---|---|---|---|
| Standard | بلی | خیر | فقط در URL |
| Deferred | خیر | بلی | ذخیره سرور |
| Contextual | هر کدوم | هر کدوم | UTM + پارامترها |
iOS از دیپلینک از طریق دو مکانیسم پشتیبانی میکند: Custom URL Scheme کهنه و Universal Link مدرن (iOS 9+). Custom URL Scheme بر اساس ثبت سخیف سفارشی در Info.plist کار میکند. نرمافزار myapp:// را ثبت میکند، و iOS پس از کلیک روی چنین لینکی، نرمافزار را باز میکند. مشکل: اگر سخیف توسط هیچ نرمافزاری ثبت نشده باشد، مرورگر خطا نشان میدهد.
پردازش deep link در iOS از طریق روش AppDelegate application(_:open:options:) یا SceneDelegate scene(_:openURLContexts:) انجام میشود. توسعهدهنده URL را استخراج میکند، مسیر و پارامترها را تجزیه و تحلیل میکند، سپس به صفحه مورد نظر ناوبری میکند. اگر از SwiftUI استفاده میشود، پردازش از طریق OpenURLAction یا onChange(of: openURL) انجام میشود. پردازش درست وضعیت مهیم است: نرمافزار ممکن است شروع نشده، کناره شده یا فعال باشد.
امنیت در iOS سفتگیرانه است: Custom URL Scheme میتواند توسط هر نرمافزاری که همان سخیف را ثبت کرده است مصادره شود. این یک آسیبپذیری پتانسیل است (URL Scheme hijacking). بنابراین Apple Universal Link را به عنوان یک جایگزین ایمنتر توصیه میکند: فقط صاحب دامنه تاییدشده میتواند لینکها را با نرمافزار مرتبط کند. بیشتر درباره Universal Link — در مقاله Universal Link.
Android دیپلینک را از طریق Intent Filter در AndroidManifest.xml پیادهسازی میکند. نرمافزار Activityای را تعریف میکند که سخیف مشخصی (myapp://) یا میزبانها و مسیرهای مشخصی را پردازش میکند. وقتی کاربر روی دیپلینک کلیک میکند، Android به دنبال Activity با Intent Filter مناسب میگردد و آن را باز میکند. اگر چند Activity مناسب وجود داشته باشد — سیستم کادر انتخاب نرمافزار را نشان میدهد.
// AndroidManifest.xml — Intent Filter برای Deep Link
<activity
android:name=".ui.ProductActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="myapp"
android:host="product"
android:pathPrefix="/" />
</intent-filter>
</activity>
پردازش deep link در Android در روش Activity.onCreate() یا onNewIntent() انجام میشود. توسعهدهنده Intent را دریافت میکند، URI را استخراج میکند و ناوبری را فراخوان میکند. برای Jetpack Navigation، مؤلفه Navigation Deep Link امکان توصیف دکلراتیوی deep link در گراف ناوبری را فراهم میکند. Android App Link (Android 6.0+) — تکامل deep link با تایید از طریق Digital Asset Links، که کادر انتخاب نرمافزار را برطرف میکند.
در نظر گرفتن تغییرات Android 12+ مهیم است: از API 31، سیستم تعیین exported=true را برای Activityهایی که deep link را پردازش میکنند ضروری میکند و صحت Intent Filter را بررسی میکند. Google Play Store در زمان منتشر کردن، App Link را بررسی میکند. بدون تایید، Google میتواند بهروزرسانی را اگر deep linkها به صفحات وجود نداشته سایت منتهی شوند، رد کند.
پیکربندی deep link یک سری مراحل مشترک برای هر دو پلتفرم را شامل میشود. گام اول — تعیین سخیف و ساختار URL. توصیه میشود از سخیف https (به جای سخیف سفارشی) برای سازگاری با Universal Link و App Link استفاده کنید. ساختار URL باید ساختار وبسایت را تکرار کند: /product/42، /profile/john، /settings/notifications. این پشتیبانی و نمایهسازی محتوا توسط موتورهای جستجو را آسان میکند.
مرحله دوم — پردازش deep link در کد نرمافزار. برای Android، Jetpack Navigation با deep linkهای دکلراتیو در nav_graph توصیه میشود. برای iOS — SwiftUI NavigationStack با پردازش OpenURLAction. پردازش سه وضعیت نرمافزار مهیم است: cold start (نرمافزار شروع نشده)، warm start (کناره شده) و active (روی صفحه نمایش). هر وضعیت منطق ناوبری مختلفی نیاز دارد.
آزمایش deep link — یک وظیفه جداگانه است. Android Studio ابزار App Links Assistant را برای بررسی Intent Filter ارائه میدهد. در iOS، آزمایش از طریق Xcode با ارسال URL از طریق آرگومانهای سخیف شروع انجام میشود. راهاندازی بررسی CI توصیه میشود: به طور خودکار از deep link عبور کرده و بررسی کنید که صفحه مورد انتظار باز شده. برای deferred deep link، آزمایش چرخه کامل «نصب → نخستین شروع → کتکست» را شامل میشود. بدون آزمایش، deep linkها در زمان بهروزرسانی ناوبری در نرمافزار اختلال مییابند.
سوالات متداول
لینک معمولی (https://site.com/page) در مرورگر باز میشود. Deep link (myapp://page یا https://site.com/page با تایید) صفحهای داخل نرمافزار موبایل را باز میکند. Deep link میتواند کتکست را نیز منتقل کند: کد تخفیف، منبع ترافیک، شناسه رفرال.
URI-schema — پیشوند URL است که مشخص میکند کدام نرمافزار باید لینک را پردازش کند (مثلاً myapp://، vk://، tg://). سیستم از سخیف برای مسیریابی استفاده میکند: نرمافزاری را که این سخیف را ثبت کرده پیدا کرده و URL را برای پردازش به آن میدهد.
کاربر روی لینک کلیک میکند → خدمت (Branch، AppsFlyer) کتکست را ذخیره میکند → به App Store/Google Play هدایت میکند → پس از نصب و نخستین شروع، SDK کتکست ذخیرهشده را به نرمافزار منتقل میکند → نرمافزار صفحه مورد نظر را باز میکند، گویی کاربر از قبل نرمافزار را داشته است.
دیپلینک معمولی — خیر. Deferred deep link — بله، از طریق یک صفحه واسط که به فروشگاه برنامهها هدایت میکند و کتکست را ذخیره میکند. Universal Link و App Link در صورت نبود نرمافزار، وبسایت را به عنوان fallback باز میکنند.
در Android از adb استفاده کنید: adb shell am start -W -a android.intent.action.VIEW -d “myapp://product/42”. در iOS — xcrun simctl openurl booted “myapp://product/42”. برای هر دو پلتفرم، کنسولهای آزمایش Firebase Dynamic Links و Branch در دسترس است.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید