स्विफ्टयूआई में डीप लिंक को कैसे हैंडल करें

सीखें कि अपने SwiftUI एप्लिकेशन में उपयोगकर्ताओं को विशिष्ट सामग्री पर नेविगेट करने के लिए कस्टम URL स्कीम और यूनिवर्सल लिंक दोनों को कैसे लागू और संभालें।

Intermediate
SwiftUI में डीप लिंक को हैंडल करने में आपके ऐप को विशिष्ट URL पर प्रतिक्रिया देने के लिए कॉन्फ़िगर करना और फिर उन URL को आपके ऐप के भीतर उपयुक्त सामग्री पर नेविगेट करने के लिए पार्स करना शामिल है। डीप लिंक के दो प्राथमिक प्रकार हैं: कस्टम URL स्कीम और यूनिवर्सल लिंक।3. कस्टम URL स्कीम (Custom URL Schemes) कस्टम URL स्कीम आपको एक अद्वितीय उपसर्ग (जैसे, myapp://) परिभाषित करने की अनुमति देती हैं, जो टैप करने पर आपके एप्लिकेशन को खोलेगा। कॉन्फ़िगरेशन: Xcode में URL प्रकार जोड़ें: अपने Xcode प्रोजेक्ट में, अपने टारगेट का चयन करें। "Info" टैब पर जाएँ। "URL प्रकार" के अंतर्गत, एक नया URL प्रकार जोड़ने के लिए "+" बटन पर क्लिक करें। "Identifier" (जैसे, com.yourcompany.yourapp) सेट करें। अपने ऐप के बंडल आईडी का उपसर्ग के रूप में उपयोग करना सर्वोत्तम अभ्यास है। "URL स्कीम" को अपनी इच्छित स्कीम (जैसे, myapp) पर सेट करें। SwiftUI में हैंडलिंग: आप आने वाले URL को संभालने के लिए .onOpenURL व्यू मॉडिफायर का उपयोग करते हैं। यह मॉडिफायर iOS 14 से उपलब्ध है।
import SwiftUI struct ContentView: View {
 @State private var receivedURL: URL?  var body: some View {  VStack {  Text("Deep Link Handler")
 if let url = receivedURL {  Text("प्राप्त URL: \(url.absoluteString)")  // URL को पार्स करें और तदनुसार नेविगेट करें
 // उदाहरण: myapp://product?id=123  if url.host == "product",  let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
 let id = components.queryItems?.first(where: { $0.name == "id" })?.value {  Text("Product ID: \(id)")  }
 } else {
 Text("अभी तक कोई डीप लिंक प्राप्त नहीं हुआ है।")  }  }
 .onOpenURL { url in  receivedURL = url
 print("प्राप्त कस्टम URL स्कीम: \(url)")  }  } } 
2. यूनिवर्सल लिंक्स (Universal Links) यूनिवर्सल लिंक्स मानक HTTPS लिंक होते हैं (जैसे, https://yourwebsite.com/path) जो आपके ऐप को सीधे खोल सकते हैं यदि वह इंस्टॉल है, या नहीं होने पर आपकी वेबसाइट पर वापस जा सकते हैं। वे एक सहज उपयोगकर्ता अनुभव प्रदान करते हैं। कॉन्फ़िगरेशन: एसोसिएटेड डोमेन्स एंटाइटलमेंट: अपने Xcode प्रोजेक्ट में, अपने टारगेट को चुनें। "Signing & Capabilities" टैब पर जाएं। "+ Capability" पर क्लिक करें और "Associated Domains" जोड़ें। फ़ॉर्मैट applinks:yourwebsite.com में एक प्रविष्टि जोड़ें (उदाहरण के लिए, applinks:example.com)। apple-app-site-association फ़ाइल: एक JSON फ़ाइल बनाएँ जिसका नाम apple-app-site-association हो (बिना .json एक्सटेंशन के)। इस फ़ाइल को अपनी वेबसाइट पर रूट पर या .well-known डायरेक्टरी में होस्ट करें (उदाहरण के लिए, https://yourwebsite.com/apple-app-site-association या https://yourwebsite.com/.well-known/apple-app-site-association). यह फ़ाइल निर्दिष्ट करती है कि आपकी वेबसाइट पर कौन से पथ आपके ऐप को खोलेंगे। इस फ़ाइल के लिए आपको अपने टीम आईडी और बंडल आईडी की आवश्यकता होगी। उदाहरण apple-app-site-association फ़ाइल: json { "applinks": { "details": [ { "appIDs": [ "YOUR_TEAM_ID.com.yourcompany.yourapp" ], "components": [ { "/": "/products/*", "comment": "/products/ पथ में किसी भी URL से मेल खाता है" }, { "/": "/profile/*", "comment": "Matches any URL in /profile/ path" } ] } ] } }` SwiftUI में हैंडलिंग: कस्टम URL स्कीम की तरह ही, आप .onOpenURL मॉडिफायर का उपयोग करते हैं।
import SwiftUI

struct ContentView: View {  @State private var receivedUniversalLink: URL?

 var body: some View {  VStack {  Text("Universal Link Handler")
 if let url = receivedUniversalLink {  Text("प्राप्त यूनिवर्सल लिंक: \(url.absoluteString)")
 // URL पार्स करें और नेविगेट करें
 // उदाहरण: https://yourwebsite.com/products/123  if url.pathComponents.contains("products"  let productId = url.lastPathComponent {
 Text("यूनिवर्सल लिंक से उत्पाद आईडी: \(productId)&")  }
 } else {  Text("No universal link received yet.")  }  }
 .onOpenURL { url in  receivedUniversalLink = url  print("प्राप्त यूनिवर्सल लिंक: \(url)")  }
 } } 
3. पार्सिंग और नेविगेशन अधिक जटिल अनुप्रयोगों के लिए, आपको आने वाले URL को पार्स करने और उपयोगकर्ता को सही व्यू पर निर्देशित करने के लिए SwiftUI के नेविगेशन टूल का उपयोग करने की आवश्यकता होगी।
import SwiftUI

enum AppRoute: Hashable {  case home  case product(id: String)
 case प्रोफ़ाइल(id: String)  case settings }

class DeepLinkManager: ObservableObject {  @Published var navigationPath = NavigationPath()  func handleURL(_ url: URL) {
 guard let host = url.host else { return }  // कस्टम URL स्कीम के लिए उदाहरण: myapp://product?id=123
 // यूनिवर्सल लिंक का उदाहरण: https://yourwebsite.com/products/123  if host == "product" || url.pathComponents.contains("products") {
 if let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
 let id = components.queryItemsfirst(where: { $0.name == "id" })?.value ?? url.lastPathComponent {  navigationPath.append(AppRoute.product(id: id))
 }  } else if host == "profile" || url.pathComponents.contains("profile" {
 if let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
 let id = components.queryItems?.first(where: { $0.name == "id" })?.value ?? url.lastPathComponent {  navigationPath.append(AppRoute.profile(id: id))  }  }  // अन्य पथों के लिए अधिक राउटिंग लॉजिक जोड़ें
 } }