UIKit में डीप लिंक कैसे हैंडल करें

UIKit में डीप लिंक को हैंडल करने में दो मुख्य तंत्र शामिल हैं: **कस्टम URL स्कीम्स** (Custom URL Schemes) और **यूनिवर्सल लिंक्स** (Universal Links)। जबकि दोनों उपयोगकर्ताओं को आपके ऐप के भीतर विशिष्ट सामग्री पर सीधे नेविगेट करने की अनुमति देते हैं, यूनिवर्सल लिंक्स आम तौर पर उनके निर्बाध उपयोगकर्ता

Intermediate

UIKit में डीप लिंक को हैंडल करने में दो मुख्य तंत्र शामिल हैं: कस्टम URL स्कीम्स (Custom URL Schemes) और यूनिवर्सल लिंक्स (Universal Links)। जबकि दोनों उपयोगकर्ताओं को आपके ऐप के भीतर विशिष्ट सामग्री पर सीधे नेविगेट करने की अनुमति देते हैं, यूनिवर्सल लिंक्स आम तौर पर उनके निर्बाध उपयोगकर्ता अनुभव और बेहतर फॉलबैक व्यवहार के लिए पसंद किए जाते हैं।

1. कस्टम URL स्कीम्स

कस्टम URL स्कीम्स आपको अपने ऐप के URL के लिए एक अद्वितीय प्रीफिक्स (जैसे myapp://product/123) परिभाषित करने की अनुमति देते हैं। जब कोई उपयोगकर्ता इस स्कीम वाले लिंक पर टैप करता है, तो iOS आपके ऐप को लॉन्च करता है।

सेटअप:

  1. Xcode में URL स्कीम रजिस्टर करें:

    • Xcode में अपना प्रोजेक्ट खोलें।
    • प्रोजेक्ट नेविगेटर में अपना प्रोजेक्ट चुनें, फिर अपना लक्ष्य चुनें।
    • "Info" टैब पर जाएं।
    • "URL Types" सेक्शन के तहत, एक नया URL टाइप जोड़ने के लिए "+" बटन पर क्लिक करें।
    • "Identifier" के लिए, आप अपने ऐप का बंडल आईडी (जैसे com.yourcompany.yourapp) उपयोग कर सकते हैं।
    • "URL Schemes" के लिए, अपनी इच्छित कस्टम स्कीम (जैसे myapp) दर्ज करें।
  2. AppDelegate या SceneDelegate में आने वाले URL को हैंडल करें:

    • AppDelegate का उपयोग करने वाले ऐप्स के लिए (पुराने ऐप्स या जो सीन डेलीगेट्स का उपयोग नहीं करते हैं): application(_:open:options:) विधि लागू करें।

      swift func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { // Parse the URL and navigate to the appropriate content print("Received URL: \(url)") handleDeepLink(url) return true }

    • SceneDelegate का उपयोग करने वाले ऐप्स के लिए (iOS 13 और बाद के संस्करण): scene(_:openURLContexts:) या scene(_:continue:) लागू करें।

      ```swift func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { guard let url = URLContexts.first?.url else { return } print("Received URL: (url)") handleDeepLink(url) }

      // For Universal Links, you'll also use this method func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else { return } print("Received Universal Link: (url)") handleDeepLink(url) } ```

2. यूनिवर्सल लिंक्स

यूनिवर्सल लिंक्स मानक HTTPS लिंक हैं जो आपके वेबसाइट और आपके ऐप दोनों के लिए काम करते हैं। यदि आपका ऐप इंस्टॉल है, तो लिंक सीधे आपके ऐप में खुलता है; अन्यथा, यह सफारी में खुलता है। यह एक बहुत सहज उपयोगकर्ता अनुभव प्रदान करता है।

सेटअप:

  1. apple-app-site-association फ़ाइल बनाएं:

    • यह JSON फ़ाइल iOS को बताती है कि आपका ऐप किन URL को हैंडल कर सकता है।
    • इस फ़ाइल को अपने वेब सर्वर के रूट पर या .well-known सबडायरेक्टरी में होस्ट करें (जैसे https://yourdomain.com/apple-app-site-association)।
    • उदाहरण सामग्री: json { "applinks": { "apps": [], "details": [ { "appID": "TEAM_ID.com.yourcompany.yourapp", "paths": [ "/product/*", "/settings/*" ] } ] } } अपने वास्तविक मानों के साथ TEAM_ID और com.yourcompany.yourapp को बदलें।
  2. Xcode में एसोसिएटेड डोमेन कैपेबिलिटी सक्षम करें:

    • Xcode में, अपना प्रोजेक्ट और लक्ष्य चुनें।
    • "Signing & Capabilities" टैब पर जाएं।
    • "+ Capability" पर क्लिक करें और "Associated Domains" चुनें।
    • आपके ऐप को हैंडल करने वाले प्रत्येक डोमेन के लिए एक प्रविष्टि जोड़ें, जिसे applinks: से प्रीफिक्स किया गया हो (जैसे applinks:yourdomain.com)।
  3. AppDelegate या SceneDelegate में आने वाले URL को हैंडल करें:

    • यूनिवर्सल लिंक्स को NSUserActivity ऑब्जेक्ट का उपयोग करके हैंडल किया जाता है।
    • AppDelegate के लिए: application(_:continue:restorationHandler:) लागू करें।
    • SceneDelegate के लिए: ऊपर कस्टम URL स्कीम्स अनुभाग में दिखाए गए scene(_:continue:) विधि का उपयोग करें।

3. सामान्य डीप लिंक हैंडलिंग लॉजिक (handleDeepLink फ़ंक्शन)

चाहे आप कस्टम URL स्कीम्स या यूनिवर्सल लिंक्स का उपयोग करें, URL को पार्स करने और अपने ऐप के भीतर नेविगेट करने का मुख्य लॉजिक समान रहता है।

func handleDeepLink(_ url: URL) {
    guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false) else {
        return
    }

    // Example: myapp://product/123?color=red
    // Example: https://yourdomain.com/product/123?color=red

    if components.host == "product" {
        // Extract product ID from path components or query parameters
        let productID = components.path.replacingOccurrences(of: "/", with: "")
        let color = components.queryItems?.first(where: { $0.name == "color" })?.value

        // Navigate to product detail screen
        // (e.g., using a UINavigationController or presenting a new view controller)
        if let rootViewController = UIApplication.shared.windows.first?.rootViewController as? UINavigationController {
            let productViewController = ProductDetailViewController() // Your custom VC
            productViewController.productID = productID
            productViewController.selectedColor = color
            rootViewController.pushViewController(productViewController, animated: true)
        }
    } else if components.host == "settings" {
        // Navigate to settings screen
        if let rootViewController = UIApplication.shared.windows.first?.rootViewController as? UINavigationController {
            let settingsViewController = SettingsViewController() // Your custom VC
            rootViewController.pushViewController(settingsViewController, animated: true)
        }
    }
    // Add more conditions for different paths/hosts
}

4. सुरक्षा संबंधी विचार

डीप लिंक संभावित हमले का वेक्टर हो सकते हैं। हमेशा सभी URL पैरामीटर को मान्य करें और किसी भी गलत प्रारूप वाले URL को छोड़ दें। डीप लिंक के माध्यम से उपलब्ध क्रियाओं को उन तक सीमित करें जो उपयोगकर्ता डेटा को जोखिम में नहीं डालते हैं, और उन्हें कभी भी सीधे सामग्री हटाने या संवेदनशील जानकारी तक पहुंचने की अनुमति न दें।

5. डीप लिंक का परीक्षण करना

आप डीप लिंक का परीक्षण कर सकते हैं: * सफारी में कस्टम URL स्कीम दर्ज करके (जैसे myapp://product/123)। * अपने टर्मिनल में xcrun simctl openurl booted <URL> कमांड का उपयोग करके iOS सिम्युलेटर में URL खोलना। * सफारी में एक वेबपेज से यूनिवर्सल लिंक्स पर टैप करके।