Universal Link ایک Apple طریقہ کار ہے (iOS 9+) جو Safari کو نظرانداز کرتے ہوئے ویب لنکس کو براہ راست ایپ میں کھولنے کی اجازت دیتا ہے۔ اگر ایپ انسٹال نہیں ہے تو لنک براؤزر میں بغیر کسی رکاوٹ کے کھل جاتا ہے۔ یہ اصطلاح Apple نے 2015 میں WWDC میں Handoff اور Continuity ایکو سسٹم کے حصے کے طور پر متعارف کروائی تھی۔ Apple Developer کے مطابق، Universal Link انتخاب کے ڈائیلاگ کے بغیر ویب اور مقامی ایپ کے درمیان متحد صارف کا تجربہ فراہم کرتا ہے۔
اہم نکات
Universal Link ایک معیاری HTTPS لنک ہے جیسے https://example.com/page، جسے iOS ڈیوائس سے ٹیپ کرنے پر Safari کے بجائے انسٹال شدہ ایپ کھلتی ہے۔ Custom URL Scheme سے بنیادی فرق: Universal Link کو کسٹم اسکیم (myapp://) رجسٹر کرنے کی ضرورت نہیں ہے — یہ ایک عام ڈومین استعمال کرتا ہے۔ یہ URL اسکیم ہائی جیکنگ کے مسئلے کو ختم کرتا ہے، جہاں کوئی بھی ایپ ایک ہی اسکیم رجسٹر کرسکتی ہے۔
Apple نے WWDC 2015 میں iOS 9 کے حصے کے طور پر Universal Link متعارف کروایا۔ یہ طریقہ کار Handoff اور Spotlight ایکو سسٹم کا حصہ بن گیا: Universal Link نہ صرف براؤزر میں بلکہ Spotlight تلاش کے نتائج، Mail، Messages اور دیگر سسٹم ایپس میں بھی کام کرتا ہے۔ اس کے علاوہ، Universal Link watchOS اور macOS پر بھی معاون ہے — صارف Mac پر لنک کے ذریعے iPhone پر ایپ کھول سکتا ہے۔
بنیادی فائدہ: واحد URL. ڈویلپر دو مختلف لنکس (ایک ویب کے لیے، دوسرا ایپ کے لیے) کا انتظام نہیں کرتا۔ Universal Link وہی https لنک ہے۔ اگر ایپ انسٹال ہے — تو ایپ کھلتی ہے۔ اگر نہیں — تو وہی لنک Safari میں عام ویب پیج کے طور پر کھلتا ہے۔ یہ ٹریفک کھوئے بغیر مثالی فال بیک فراہم کرتا ہے۔
Universal Link کے طریقہ کار میں تین مراحل ہیں: ایسوسی ایشن کی تصدیق، لنک ہینڈلنگ اور براؤزر فال بیک۔ درست کام کرنے کے لیے ہر مرحلہ اہم ہے۔ اگر ایسوسی ایشن ترتیب نہیں دی گئی تو iOS لنک کو Safari میں عام ری ڈائریکٹ کے طور پر پروسیس کرتا ہے۔ آئیے ہر مرحلے کا تفصیل سے جائزہ لیتے ہیں۔
لنک پر پہلے ٹیپ پر، iOS سرور سے https://example.com/.well-known/apple-app-site-association پر apple-app-site-association فائل ڈاؤن لوڈ کرتا ہے۔ فائل میں ایپ کے Team ID اور Bundle ID کے ساتھ JSON، نیز ان راستوں کی فہرست ہوتی ہے جنہیں ایپ کو کھولنا چاہیے۔ iOS اس فائل کو کیش کرتا ہے اور وقتاً فوقتاً اس کی تازگی چیک کرتا ہے (ایپ اپ ڈیٹ، ڈیوائس ری اسٹارٹ پر)۔
JSON فائل apple-app-site-association بغیر ری ڈائریکٹ کے HTTPS کے ذریعے قابل رسائی ہونی چاہیے۔ سرور کو Content-Type: application/json واپس کرنا چاہیے۔ اہم: فائل میں .json ایکسٹینشن نہیں ہے — iOS اسے سختی سے /.well-known/apple-app-site-association پر ڈھونڈتا ہے۔ Apple CDN میں Universal Link سپورٹ شامل کرنے اور یہ یقینی بنانے کی بھی سفارش کرتا ہے کہ فائل robots.txt کے ذریعے مسدود نہیں ہے۔
// apple-app-site-association — کم سے کم ترتیب
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAMID.com.example.app",
"paths": ["/product/*", "/profile/*", "/search"]
}
]
}
}
appID Team ID + Bundle ID (TEAMID.com.example.app) کے طور پر بنتا ہے۔ paths URL پیٹرن کی ایک صف ہے جسے ایپ کو ہینڈل کرنا چاہیے۔ *، ? اور NOT نوٹیشن استعمال کیا جا سکتا ہے: ["NOT /admin/*", "/product/*"]۔ راستوں کی ترتیب میں جانچ کی جاتی ہے: پہلا میچ رویے کا تعین کرتا ہے۔ اگر راستہ مماثل نہیں ہے — لنک Safari میں کھلتا ہے۔
کامیاب ایسوسی ایشن کی تصدیق کے بعد، iOS لنک کو ایپ میں بھیجتا ہے۔ ہینڈلنگ AppDelegate میں NSUserActivity کے لیے application(_:continue:restorationHandler:) طریقہ کے ذریعے، یا SceneDelegate میں scene(_:continue:) کے ذریعے کی جاتی ہے۔ ڈویلپر NSUserActivityTypeBrowsingWeb قسم کا NSUserActivity آبجیکٹ وصول کرتا ہے، URL نکالتا ہے اور متعلقہ اسکرین پر جاتا ہے۔
// AppDelegate میں Universal Link ہینڈلنگ
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping UIUserActivityRestorationHandler
) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL
else { return false }
// URL کے مطابق اسکرین پر جائیں
DeepLinkRouter.navigate(to: url)
return true
}
اوپر کی مثال میں DeepLinkRouter ایک کسٹم کلاس ہے جو URL کو پارس کرتی ہے اور متعلقہ نیویگیشن کوآرڈینیٹر کو کال کرتی ہے۔ SwiftUI کے لیے، ہینڈلنگ onOpenURL طریقہ یا environment(\.openURL) موڈیفائر کے ذریعے کی جاتی ہے۔ صرف پیش منظر لانچ ہی نہیں بلکہ اس صورت کو بھی ہینڈل کرنا ضروری ہے جب ایپ چل نہیں رہی تھی (کولڈ اسٹارٹ): اس صورت میں Universal Link لانچ آپشنز کے ذریعے ایپ کھولتا ہے۔
اگر ایپ انسٹال نہیں ہے تو iOS خود بخود Universal Link کو Safari میں کھولتا ہے۔ یہ Custom URL Scheme سے بنیادی فرق ہے: صارف کو کوئی خرابی نظر نہیں آتی۔ فال بیک اسی ڈومین کا معیاری ویب پیج ہے۔ ڈویلپر اس صفحے پر App Store لنک، مصنوعات کی معلومات یا متبادل مواد رکھ سکتا ہے۔
اہم: فال بیک کو iOS سطح پر اپنی مرضی کے مطابق نہیں بنایا جا سکتا۔ iOS صرف Safari میں URL کھولتا ہے۔ ایپ انسٹال والے اور بغیر ایپ والے صارفین کے لیے مختلف مواد دکھانے کے لیے، Smart App Banner (Safari کے لیے میٹا ٹیگ جو ایپ کھولنے کا مشورہ دیتا ہے) یا JavaScript انسٹالیشن ڈیٹیکشن استعمال کریں۔ Apple Universal Link کے ذریعے انسٹالیشن کی منسوبی کے لیے SKAdNetwork بھی فراہم کرتا ہے۔
Universal Link اور روایتی Deep Link (Custom URL Scheme) ایک ہی مسئلہ حل کرتے ہیں، لیکن آرکیٹیکچر اور سیکیورٹی میں بنیادی طور پر مختلف ہیں۔ Custom URL Scheme ایک کسٹم پروٹوکول (myapp://) ہے جو Info.plist میں رجسٹر ہوتا ہے۔ کوئی بھی ایپ ایک ہی اسکیم (myapp://) رجسٹر کرسکتی ہے، اور iOS تعین نہیں کرسکتا کہ کون سی ‘اصلی’ ہے۔ اسے URL اسکیم ہائی جیکنگ کہتے ہیں۔
Universal Link ڈومین تصدیق کے ذریعے ہائی جیکنگ کا مسئلہ حل کرتا ہے۔ صرف ڈومین مالک اپنے سرور پر apple-app-site-association رکھ سکتا ہے، ایک مخصوص Bundle ID سے کنکشن کی تصدیق کرتے ہوئے۔ دو ایپس ایک ہی Universal Link رجسٹر نہیں کر سکتیں: اگر تنازعہ پیدا ہوتا ہے تو iOS آخری انسٹال کردہ ایپ کو ترجیح دیتا ہے یا Safari کھولتا ہے۔
ایک اور فرق: فال بیک۔ Custom URL Scheme میں کوئی فال بیک نہیں ہے — اگر ایپ انسٹال نہیں ہے تو براؤزر خرابی دکھاتا ہے۔ Universal Link ویب سائٹ کھولتا ہے۔ واحد URL کا مطلب ہے کہ لنک کی SEO قدر محفوظ رہتی ہے (Google لنک کو انڈیکس کرتا ہے) اور کسی بھی ڈیوائس والا صارف متعلقہ مواد وصول کرتا ہے۔ Universal Link ڈیپ لنک سے یونیفائڈ لنک کی طرف ایک ارتقائی قدم ہے۔
| خصوصیت | Custom URL Scheme | Universal Link |
|---|---|---|
| فارمیٹ | myapp://path | https://domain/path |
| تصدیق | نہیں | apple-app-site-association |
| سیکیورٹی | ہائی جیکنگ کے لیے کمزور | صرف ڈومین مالک |
| فال بیک | خرابی | Safari میں ویب سائٹ |
| iOS ورژن | iOS 3+ | iOS 9+ |
ترتیب Universal Link میں سرور سائیڈ اور کلائنٹ سائیڈ حصے شامل ہیں۔ سرور سائیڈ — https://domain/.well-known/apple-app-site-association پر apple-app-site-association فائل رکھنا۔ کلائنٹ سائیڈ — Xcode میں Associated Domains میں ڈومین رجسٹر کرنا (Capabilities → Associated Domains → applinks:example.com)۔ اس کے بعد، ایپ خود بخود مخصوص ڈومین کے لیے تمام Universal Links وصول کرتی ہے۔
ترتیب کے اقدامات:
ڈیبگنگ Universal Link iOS ڈویلپرز کے لیے ایک عام سر درد ہے۔ کام نہ کرنے والے لنکس کی بنیادی وجوہات: apple-app-site-association فائل HTTPS کے ذریعے قابل رسائی نہیں، غلط appID، Content-Type application/json نہیں، /.well-known راستے سے ری ڈائریکٹ، پرانے ورژن کا کیشنگ (Settings → Developer → Associated Domains Development کے ذریعے ری سیٹ)۔ Apple ایسوسی ایشن کی جانچ کے لیے Apple Developer Console میں Validation Checker ٹول فراہم کرتا ہے۔
Branch اور دیگر MMP پلیٹ فارم Universal Link کی ترتیب کو آسان بناتے ہیں: وہ خود بخود apple-app-site-association تیار کرتے ہیں اور اسے اپنے ڈومین پر ہوسٹ کرتے ہیں۔ ڈویلپر کو صرف Associated Domains میں Branch ڈومین شامل کرنا اور SDK کو ضم کرنا ہوتا ہے۔ یہ خاص طور پر ان اسٹارٹ اپس کے لیے آسان ہے جن کے پاس AASA فائل ہوسٹ کرنے کے لیے اپنا سرور انفراسٹرکچر نہیں ہے۔
Universal Link کی کئی حدود ہیں۔ پہلی: apple-app-site-association فائل سختی سے HTTPS کے ذریعے قابل رسائی ہونی چاہیے (HTTP معاون نہیں ہے)۔ دوسری: لنک کو Associated Domains میں مخصوص کردہ اسی ڈومین کی طرف اشارہ کرنا چاہیے۔ کراس ڈومین Universal Links کام نہیں کرتے — ہر ڈومین کے لیے Capabilities میں علیحدہ اندراج اور علیحدہ AASA فائل درکار ہے۔ تیسری: Universal Link WKWebView میں کام نہیں کرتا — صرف Safari اور سسٹم اجزاء میں۔
مطابقت: iOS 9.0+ (Universal Link)، watchOS 6.0+ (Handoff Universal Link)، macOS 10.15+ (Catalyst اور Mac ایپس)۔ پرانے iOS ورژنز پر، لنک Safari میں کھلتا ہے۔ اس کا مطلب ہے کہ iOS 8 (1% سے کم ڈیوائسز) پر Universal Link کام نہیں کرے گا۔ پرانے ڈیوائسز کے لیے فال بیک کے طور پر Custom URL Scheme کو بھی سپورٹ کرنے کی سفارش کی جاتی ہے اگر آپ کے سامعین میں پرانے ورژن والے صارفین شامل ہیں۔
iOS 16+ تبدیلیاں: Apple نے SwiftUI کے لیے Universal Link ہینڈلنگ کو بہتر کیا۔ تاخیری پروسیسنگ کی صلاحیت کے ساتھ ایک نیا environment(\.openURL) موڈیفائر متعارف کرایا گیا۔ iOS 16 SFSafariViewController کے ذریعے بھی ایپ میں Universal Links کھولنے کی اجازت دیتا ہے۔ iOS 16 صارفین کے لیے، مکمل طور پر SwiftUI Universal Link ہینڈلنگ پر سوئچ کرنے کی سفارش کی جاتی ہے، AppDelegate کوڈ کو صرف پسماندہ مطابقت کے لیے چھوڑ کر۔
اکثر پوچھے گئے سوالات
Universal Link ایک معیاری HTTPS URL استعمال کرتا ہے اور سرور پر فائل کے ذریعے تصدیق شدہ ہوتا ہے۔ Custom URL Scheme تصدیق کے بغیر کسٹم پروٹوکول (myapp://) استعمال کرتا ہے، جو اسے اسی اسکیم کو رجسٹر کرنے والی کسی اور ایپ کے ذریعے مداخلت کے لیے کمزور بناتا ہے۔
فائل HTTPS سرور کی جڑ میں /.well-known/apple-app-site-association (.json ایکسٹینشن کے بغیر) پر رکھی جاتی ہے۔ سرور کو Content-Type: application/json واپس کرنا چاہیے۔ اہم: کوئی ری ڈائریکٹ نہیں، فائل براہ راست قابل رسائی ہونی چاہیے۔
بنیادی وجوہات: AASA فائل میں غلط Team ID یا Bundle ID، فائل HTTPS کے ذریعے قابل رسائی نہیں، ری ڈائریکٹ، غلط Content-Type، پرانے ورژن کا کیشنگ۔ Developer → Associated Domains Development کے ذریعے چیک کریں اور ڈیوائس کو ریبوٹ کرکے کیش صاف کریں۔
نہیں — Universal Link کے لیے apple-app-site-association ہوسٹ کرنے والا HTTPS سرور درکار ہے۔ ڈومین کے بغیر، Universal Link کام نہیں کرتا۔ متبادل: Custom URL Scheme (کم محفوظ) یا اپنے ڈومین والی تھرڈ پارٹی سروسز (Branch, Firebase)۔
نہیں — Universal Link iOS، iPadOS، watchOS اور macOS کے لیے Apple کی خصوصی ٹیکنالوجی ہے۔ Android پر، مساوی کو App Link (Android 6.0+) کہا جاتا ہے، جو apple-app-site-association کے بجائے Digital Asset Links (assetlinks.json) استعمال کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں