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 ব্যবহারকারী অ্যাপগুলির জন্য (পুরানো অ্যাপ বা যারা Scene Delegates ব্যবহার করেন না): 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 লিঙ্ক যা আপনার ওয়েবসাইট এবং আপনার অ্যাপ উভয়ের জন্যই কাজ করে। যদি আপনার অ্যাপ ইনস্টল করা থাকে, লিঙ্কটি সরাসরি আপনার অ্যাপে খোলে; অন্যথায়, এটি Safari-তে খোলে। এটি একটি অনেক মসৃণ ব্যবহারকারীর অভিজ্ঞতা প্রদান করে।

সেটআপ:

  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-এ Associated Domains ক্ষমতা সক্ষম করুন:

    • Xcode-এ, আপনার প্রজেক্ট এবং টার্গেট নির্বাচন করুন।
    • "Signing & Capabilities" ট্যাবে যান।
    • "+ Capability" ক্লিক করুন এবং "Associated Domains" নির্বাচন করুন।
    • আপনার অ্যাপের পরিচালনা করা উচিত এমন প্রতিটি ডোমেনের জন্য একটি এন্ট্রি যোগ করুন, applinks: উপসর্গ সহ (যেমন applinks:yourdomain.com)।
  3. AppDelegate বা SceneDelegate-এ আগত URL পরিচালনা করুন:

    • ইউনিভার্সাল লিঙ্কগুলি NSUserActivity অবজেক্ট ব্যবহার করে পরিচালনা করা হয়।
    • AppDelegate-এর জন্য: application(_:continue:restorationHandler:) প্রয়োগ করুন।

      swift func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else { return false } print("Received Universal Link: \(url)") handleDeepLink(url) return true }

    • 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. ডিপ লিঙ্ক পরীক্ষা করা

আপনি ডিপ লিঙ্কগুলি পরীক্ষা করতে পারেন: * Safari-তে কাস্টম URL স্কিম প্রবেশ করে (যেমন myapp://product/123)। * iOS সিমুলেটরে URL খোলার জন্য আপনার টার্মিনালে xcrun simctl openurl booted <URL> কমান্ড ব্যবহার করে। * Safari-তে একটি ওয়েবপেজ থেকে ইউনিভার্সাল লিঙ্কগুলিতে ট্যাপ করে।