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 Scheme hijacking समस्या को समाप्त करता है, जहाँ कोई भी ऐप समान स्कीम रजिस्टर कर सकता है।
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 में सामान्य वेबपेज के रूप में खुलता है। यह ट्रैफ़िक खोए बिना आदर्श fallback प्रदान करता है।
Universal Link तंत्र में तीन चरण होते हैं: एसोसिएशन सत्यापन, लिंक हैंडलिंग और ब्राउज़र fallback। सही संचालन के लिए प्रत्येक चरण महत्वपूर्ण है। यदि एसोसिएशन कॉन्फ़िगर नहीं की गई है, तो 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) मॉडिफ़ायर के माध्यम से की जाती है। न केवल फ़ोरग्राउंड लॉन्च बल्कि उस स्थिति को भी संभालना महत्वपूर्ण है जब ऐप चल नहीं रहा था (cold start): इस मामले में Universal Link लॉन्च विकल्पों के माध्यम से ऐप खोलता है।
यदि ऐप इंस्टॉल नहीं है, तो iOS स्वचालित रूप से Universal Link को Safari में खोलता है। यह Custom URL Scheme से मुख्य अंतर है: उपयोगकर्ता को कोई त्रुटि नहीं दिखती। Fallback उसी डोमेन का मानक वेबपेज है। डेवलपर इस पेज पर App Store लिंक, उत्पाद जानकारी या वैकल्पिक सामग्री रख सकता है।
महत्वपूर्ण: fallback को 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 Scheme hijacking कहा जाता है।
Universal Link डोमेन सत्यापन के माध्यम से hijacking समस्या का समाधान करता है। केवल डोमेन स्वामी अपने सर्वर पर apple-app-site-association रख सकता है, एक विशिष्ट Bundle ID से कनेक्शन की पुष्टि करते हुए। दो ऐप एक ही Universal Link रजिस्टर नहीं कर सकते: यदि विरोध उत्पन्न होता है, तो iOS अंतिम इंस्टॉल किए गए ऐप को प्राथमिकता देता है या Safari खोलता है।
एक और अंतर: Fallback. Custom URL Scheme में कोई fallback नहीं है — यदि ऐप इंस्टॉल नहीं है, तो ब्राउज़र त्रुटि दिखाता है। Universal Link वेबसाइट खोलता है। एकीकृत URL का मतलब है कि लिंक का SEO मूल्य संरक्षित रहता है (Google लिंक को इंडेक्स करता है), और किसी भी डिवाइस वाला उपयोगकर्ता प्रासंगिक सामग्री प्राप्त करता है। Universal Link deep link से unified link की ओर एक विकासवादी कदम है।
| विशेषता | Custom URL Scheme | Universal Link |
|---|---|---|
| प्रारूप | myapp://path | https://domain/path |
| सत्यापन | नहीं | apple-app-site-association |
| सुरक्षा | हाइजैकिंग के लिए असुरक्षित | केवल डोमेन स्वामी |
| Fallback | त्रुटि | 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 उत्पन्न करते हैं और इसे अपने डोमेन पर होस्ट करते हैं। डेवलपर को केवल Branch डोमेन को Associated Domains में जोड़ना और 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 काम नहीं करेगा। पुराने उपकरणों के लिए fallback के रूप में 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें