SwiftUI-তে ডিপ লিঙ্ক কীভাবে হ্যান্ডেল করবেন

আপনার SwiftUI অ্যাপ্লিকেশনে ব্যবহারকারীদের নির্দিষ্ট কনটেন্টে নেভিগেট করার জন্য কাস্টম URL স্কিম এবং ইউনিভার্সাল লিঙ্ক উভয়ই কীভাবে বাস্তবায়ন ও পরিচালনা করবেন তা শিখুন।

Intermediate
SwiftUI-তে ডিপ লিঙ্ক হ্যান্ডলিং করার জন্য আপনার অ্যাপকে নির্দিষ্ট URL-এ সাড়া দেওয়ার জন্য কনফিগার করতে হয় এবং তারপর সেই URL-গুলো পার্স করে আপনার অ্যাপ্লিকেশনের উপযুক্ত কনটেন্টে নেভিগেট করতে হয়। ডিপ লিঙ্কের দুইটি প্রধান ধরন আছে: কাস্টম URL স্কিম এবং ইউনিভার্সাল লিঙ্ক।১. কাস্টম URL স্কিমসমূহ কাস্টম URL স্কিমসমূহ আপনাকে একটি অনন্য প্রিফিক্স (যেমন, myapp://) সংজ্ঞায়িত করতে দেয়, যা ট্যাপ করলে আপনার অ্যাপ্লিকেশনটি খুলবে। কনফিগারেশন: Xcode-এ URL টাইপ যোগ করুন: আপনার Xcode প্রকল্পে, আপনার টার্গেট নির্বাচন করুন। "Info" ট্যাবে যান। "URL Types"-এর অধীনে, নতুন একটি URL টাইপ যোগ করতে "+" বোতামে ক্লিক করুন। "Identifier" (যেমন, com.yourcompany.yourapp) সেট করুন। আপনার অ্যাপের বান্ডেল আইডিকে প্রিফিক্স হিসেবে ব্যবহার করাই সেরা অনুশীলন। "URL স্কিম" আপনার পছন্দের স্কিমে (যেমন, myapp) সেট করুন। SwiftUI-এ হ্যান্ডলিং: আপনি ইনকামিং URL-গুলো হ্যান্ডল করতে .onOpenURL ভিউ মোডিফায়ার ব্যবহার করেন। এই মোডিফায়ারটি iOS 14 থেকে উপলব্ধ। নোট: URL স্কিমের ক্ষেত্রে, `com.yourcompany.yourapp`-এর মতো আপনার অ্যাপের বান্ডেল আইডি ব্যবহার করুন। এতে আপনার অ্যাপটি নির্দিষ্ট URL স্কিমের জন্য অনুমোদিত হবে। URL স্কিমের নামের ক্ষেত্রে, `myapp`-এর মতো একটি স্বতন্ত্র নাম ব্যবহার করুন। উদাহরণ: নিম্নলিখিত উদাহরণে, `myapp` নামের একটি URL স্কিম সংজ্ঞায়িত করা হয়েছে: ```swift import SwiftUI let app = App() app.viewModifier(.onOpenURL) { openURL(url: URL(string. SwiftUI-তে হ্যান্ডলিং: আপনি ইনকামিং URL-গুলো হ্যান্ডল করতে .onOpenURL ভিউ মোডিফায়ার ব্যবহার করেন। এই মোডিফায়ারটি iOS 14 থেকে উপলব্ধ।
import SwiftUI struct ContentView: View {  @State privatevar 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 {
 টেক্সট("এখনও কোনো গভীর লিঙ্ক পাওয়া যায়নি।")  }  }
 .onOpenURL { url in  receivedURL = url
 print("প্রাপ্ত কাস্টম URL স্কিম: \(url)")  }
 } } 

২. ইউনিভার্সাল লিঙ্কসমূহ ইউনিভার্সাল লিঙ্কসমূহ হল স্ট্যান্ডার্ড 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)।
এই ফাইলে নির্দিষ্ট করা হয় আপনার ওয়েবসাইটের কোন পথগুলো আপনার অ্যাপ খুলবে। এই ফাইলের জন্য আপনার Team ID এবং Bundle ID প্রয়োজন।  উদাহরণস্বরূপ apple-app-site-association ফাইল:
json { "applinks": { "details": [ { "appIDs": [ "YOUR_TEAM_ID.com.yourcompany.yourapp" ], "components": [ { "/": "/products/*", "comment": "Matches any URL in /products/ path"
          }, { "/": "/profile/*", "comment": "Matches any URL in /profile/ path" } ] } ] } }
কাস্টম 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("এখনো কোনো ইউনিভার্সাল লিঙ্ক পাওয়া যায়নি।")  }  .onOpenURL { url in  receivedUniversalLink = url  print("ইউনিভার্সাল লিঙ্ক গ্রহণ করা হয়েছে: \(url)")  }  }
} 
৩. পার্সিং এবং নেভিগেশন আরও জটিল অ্যাপ্লিকেশনগুলির জন্য, আপনাকে ইনকামিং URL পার্স করতে হবে এবং ব্যবহারকারীকে সঠিক ভিউ-তে নির্দেশ দিতে SwiftUI-এর নেভিগেশন টুলস ব্যবহার করতে হবে।
import SwiftUI enum AppRoute: Hashable {
 case home  case product(id: String)  case profile(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.queryItems?.first(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))
 }  }
 // অন্যান্য পথের জন্য আরও রাউটিং লজিক যোগ করুন  } }