iOS पर Universal Links और Android पर App Links दोनों को आपके डोमेन की जड़ पर HTTPS से सर्व की गई JSON फ़ाइल चाहिए। iOS को /.well-known/apple-app-site-association चाहिए। Android को /.well-known/assetlinks.json चाहिए। localhost इनमें से किसी को भी ऐसे hostname पर सर्व नहीं कर सकता जिसे OS आपके ऐप से जोड़े। इसलिए हम tunnel करते हैं।
हर प्लेटफ़ॉर्म पर असली ज़रूरत
iOS Universal Links
आपका ऐप इंस्टॉल होने पर OS https://your-domain.com/.well-known/apple-app-site-association (या /apple-app-site-association) लाता है। यह सामग्री को आपके ऐप के associated domains entitlement के विरुद्ध जाँचता है। लाना असली HTTPS पर सफल होना चाहिए। iOS इस उद्देश्य के लिए self-signed सर्टिफ़िकेट पर भरोसा नहीं करता, और localhost पर भी नहीं।
Android App Links
Android https://your-domain.com/.well-known/assetlinks.json लाकर App Links सत्यापित करता है। फ़ाइल को आपके ऐप के SHA-256 fingerprint सूचीबद्ध करने चाहिए। सत्यापन इंस्टॉल समय और पहले लॉन्च पर होता है। वही बंधन: असली HTTPS, असली डोमेन।
localhost यह सीधे क्यों नहीं कर सकता
भले ही mkcert आपके लैपटॉप के ब्राउज़र में विश्वसनीय HTTPS दे, मोबाइल OS आपके लोकल CA पर भरोसा नहीं करता। और आपके apple-app-site-association में डोमेन को ऐप entitlement में associated-domain से मेल खाना चाहिए — जो एक असली, DNS-हल-योग्य डोमेन है, localhost नहीं।
कुछ टीमें एक समर्पित staging डोमेन से इसे टालती हैं। यह चलता है, पर पुनरावृत्ति लूप धीमा है। एक localhost टनल एक असली subdomain पर असली HTTPS URL देता है जिस तक मोबाइल डिवाइस बिना शिकायत पहुँचते हैं।
इसे कैसे जोड़ें
- अपने लोकल dev सर्वर से
/.well-known/परapple-app-site-associationऔरassetlinks.jsonसर्व करें। दोनों फ़ाइलें। दोनों रूट। npx portpreview 3000चलाएँ (या जो पोर्ट आपका dev सर्वर उपयोग करता है)।- टनल hostname नोट करें —
abc123.portpreview.devजैसा कुछ। - अपने iOS ऐप के associated domains entitlement में
applinks:abc123.portpreview.devजोड़ें। Android के intent filter में वही host। - असली डिवाइस पर ऐप बनाएँ और इंस्टॉल करें (simulator में Universal Link व्यवहार अजीब होता है)।
- URL को किसी और ऐप से खोलें — Notes, Mail, एक QR code — और देखें कि यह ब्राउज़र के बजाय आपके इंस्टॉल किए ऐप तक रूट करता है।
डीप लिंक के लिए tunnel का पेच: आरक्षित subdomain न होने तक टनल hostname सत्रों के बीच बदलता है। हर रोटेशन का मतलब नए associated-domain प्रविष्टि के साथ ऐप फिर से बनाना। यदि आप डीप लिंक व्यवहार पर अक्सर पुनरावृत्ति करते हैं, एक आरक्षित subdomain लें।
apple-app-site-association के लिए content-type मायने रखता है
iOS बिना एक्सटेंशन की फ़ाइल और या तो content-type application/json (नया iOS) या application/pkcs7-mime (पुराना, हस्ताक्षरित प्रारूप) की अपेक्षा करता है। लगभग सभी आधुनिक ऐप सादा JSON वैरिएंट उपयोग करते हैं। सुनिश्चित करें कि आपका dev सर्वर सही content-type लौटाए वरना iOS बिना उपयोगी त्रुटि के चुपचाप फ़ाइल अस्वीकार कर देता है।
पहले डेस्कटॉप ब्राउज़र से टेस्ट करें: https://your-tunnel.portpreview.dev/.well-known/apple-app-site-association खोलें और पुष्टि करें कि JSON रेंडर होता है और dev tools में content-type हेडर सही है। ग़लत हो तो simulator में Universal Link बग का पीछा करने से पहले ठीक करें।
अन्य डीप लिंक डीबगिंग जाल
ऐप entitlement बेमेल
यदि आपका associated-domains entitlement कहता है applinks:abc.portpreview.dev पर apple-app-site-association def.portpreview.dev सूचीबद्ध करता है, iOS नहीं लाता। hostname सुसंगत होना चाहिए।
Safari के भीतर से Universal Link
Safari के भीतर (वही ऐप जिसमें टैब है) Universal Link टैप करना कभी-कभी ऐप के बजाय Safari में खुलता है। यह डिज़ाइन से है — iOS "जब भी यूज़र लिंक क्लिक करे ऐप खोलो" चाल को रोकता है। इसके बजाय Notes या Mail से टेस्ट करें।
Android App Links और digital asset links
Android custom URL scheme (yourapp://path) भी समर्थन करता है, जिन्हें HTTPS या assetlinks.json की ज़रूरत नहीं। ये टेस्ट करना आसान पर कम सुरक्षित — कोई भी ऐप वही scheme रजिस्टर कर सकता है। प्रोडक्शन-गुणवत्ता डीप लिंकिंग के लिए App Links जवाब है।
हमारा मोबाइल टेस्टिंग flow
डीप लिंक के साथ iOS और Android दोनों शिप करने वाले प्रोजेक्ट के लिए:
.well-knownफ़ाइलें सर्व करने वाला backend शुरू करें।npx portpreview 3000से इसे tunnel करें।- एक बार सत्र के लिए टनल URL स्थिर हो (या आरक्षित subdomain उपयोग करें), ऐप की associated-domain प्रविष्टियाँ अपडेट करें और build करें।
- भौतिक डिवाइस पर QA — fresh install और update दोनों।
- OAuth-और-डीप-लिंक संयोजन के लिए (साइन-इन प्रदाता जो ऐप में वापस redirect करते हैं) इसे OAuth callback टेस्टिंग के साथ जोड़ें।
सेटअप पहली बार झुंझलाहट भरा है। उसके बाद, टनल URL बस Xcode और Gradle scheme में एक और env var है।
व्यापक मोबाइल टेस्टिंग पैटर्न के लिए देखें localhost टनल से मोबाइल टेस्टिंग। PortPreview वेटलिस्ट में शामिल हों।