UIKit-এ ডিপ লিঙ্কগুলি পরিচালনা করার মধ্যে দুটি প্রধান প্রক্রিয়া জড়িত থাকে: কাস্টম URL স্কিম (Custom URL Schemes) এবং ইউনিভার্সাল লিঙ্ক (Universal Links)। যদিও উভয়ই ব্যবহারকারীদের আপনার অ্যাপের মধ্যে নির্দিষ্ট কন্টেন্টে সরাসরি নেভিগেট করার অনুমতি দেয়, ইউনিভার্সাল লিঙ্কগুলি সাধারণত তাদের নির্বিঘ্ন ব্যবহারকারীর অভিজ্ঞতা এবং উন্নত ফলব্যাক আচরণের জন্য পছন্দ করা হয়।
1. কাস্টম URL স্কিম
কাস্টম URL স্কিমগুলি আপনাকে আপনার অ্যাপের URL-এর জন্য একটি অনন্য প্রিফিক্স (যেমন myapp://product/123) সংজ্ঞায়িত করতে দেয়। যখন কোনও ব্যবহারকারী এই স্কিম সহ একটি লিঙ্কে ট্যাপ করে, তখন iOS আপনার অ্যাপ চালু করে।
সেটআপ:
-
Xcode-এ URL স্কিম নিবন্ধন করুন:
- Xcode-এ আপনার প্রজেক্ট খুলুন।
- প্রজেক্ট নেভিগেটরে আপনার প্রজেক্ট নির্বাচন করুন, তারপর আপনার টার্গেট নির্বাচন করুন।
- "Info" ট্যাবে যান।
- "URL Types" বিভাগের অধীনে, একটি নতুন URL টাইপ যোগ করতে "+" বাটনে ক্লিক করুন।
- "Identifier" এর জন্য, আপনি আপনার অ্যাপের বান্ডেল আইডি (যেমন
com.yourcompany.yourapp) ব্যবহার করতে পারেন। - "URL Schemes" এর জন্য, আপনার কাঙ্ক্ষিত কাস্টম স্কিম (যেমন
myapp) লিখুন।
-
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-তে খোলে। এটি একটি অনেক মসৃণ ব্যবহারকারীর অভিজ্ঞতা প্রদান করে।
সেটআপ:
-
একটি
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প্রতিস্থাপন করুন।
-
Xcode-এ Associated Domains ক্ষমতা সক্ষম করুন:
- Xcode-এ, আপনার প্রজেক্ট এবং টার্গেট নির্বাচন করুন।
- "Signing & Capabilities" ট্যাবে যান।
- "+ Capability" ক্লিক করুন এবং "Associated Domains" নির্বাচন করুন।
- আপনার অ্যাপের পরিচালনা করা উচিত এমন প্রতিটি ডোমেনের জন্য একটি এন্ট্রি যোগ করুন,
applinks:উপসর্গ সহ (যেমনapplinks:yourdomain.com)।
-
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-তে একটি ওয়েবপেজ থেকে ইউনিভার্সাল লিঙ্কগুলিতে ট্যাপ করে।