একটি স্থানীয় বিজ্ঞপ্তি হল একটি বার্তা যা অ্যাপ রিমোট সার্ভারের অংশগ্রহণ ছাড়াই ব্যবহারকারীকে পাঠায়। সমস্ত ডেটা প্রাপকের ডিভাইসে সরাসরি প্রক্রিয়াজাত এবং প্রদর্শিত হয়। এই পদ্ধতিটি রিমাইন্ডার, টাইমার এবং অ্যালার্মের জন্য উপযুক্ত যখন অ্যাপ ব্যাকগ্রাউন্ডে বা বন্ধ থাকে। Apple Developer Documentation অনুসারে, UNUserNotificationCenter iOS-এ স্থানীয় বিজ্ঞপ্তিগুলির কেন্দ্রীভূত ব্যবস্থাপনা প্রদান করে।
মূল পয়েন্ট
স্থানীয় বিজ্ঞপ্তি是一个 ট্রিগার বার্তা যা অপারেটিং সিস্টেম দ্বারা একই ডিভাইসে তৈরি এবং প্রদর্শিত হয় যেখানে অ্যাপ ইনস্টল করা আছে। পুশ বিজ্ঞপ্তির বিপরীতে, স্থানীয় বিজ্ঞপ্তিগুলি বাহ্যিক সার্ভারের মধ্য দিয়ে যায় না — সমস্ত নির্ধারণ লজিক ক্লায়েন্টে চলে।
এই ধরনের বিজ্ঞপ্তিগুলি অ্যাপের অবস্থা নির্বিশেষে কাজ করে: সক্রিয়, ছোট করা বা সম্পূর্ণ বন্ধ। অপারেটিং সিস্টেম নির্ধারিত সময়ে বিতরণের যত্ন নেয়, যখন ডেভেলপার শুধুমাত্র সামগ্রী এবং ট্রিগার নির্দিষ্ট করে।
সিস্টেম নেটওয়ার্ক ছাড়াও স্থানীয় বিজ্ঞপ্তি বিতরণের নিশ্চয়তা দেয়। এটি পুশ বিজ্ঞপ্তির উপর একটি মূল সুবিধা, যার জন্য স্থিতিশীল ইন্টারনেট সংযোগ এবং কর্মক্ষম সার্ভার প্রয়োজন।
প্রতিটি স্থানীয় বিজ্ঞপ্তিতে তিনটি অংশ থাকে: সামগ্রী (শিরোনাম, মূল অংশ, শব্দ), ট্রিগার (সময় বা অবস্থানের শর্ত) এবং অনুরোধ শনাক্তকারী। শনাক্তকারী বিতরণের আগে বিজ্ঞপ্তি বাতিল বা আপডেট করার অনুমতি দেয়।
একজন ডেভেলপার iOS-এ প্রতি অ্যাপে 64টি স্থানীয় বিজ্ঞপ্তি এবং Android-এ সীমাহীন সংখ্যা নির্ধারণ করতে পারে। এই পার্থক্যটি অপারেটিং সিস্টেমের আর্কিটেকচারাল সীমাবদ্ধতার কারণে।
উভয় প্ল্যাটফর্ম স্থানীয় বিজ্ঞপ্তিগুলির সাথে কাজ করার জন্য নিজস্ব API প্রদান করে। iOS-এ, কেন্দ্রীয় উপাদান হল UNUserNotificationCenter, Android-এ — NotificationManager। বিভিন্ন ইন্টারফেস সত্ত্বেও, লজিক একই: অ্যাপ একটি অনুরোধ তৈরি করে, সিস্টেমে এটি নিবন্ধন করে, এবং OS নির্ধারিত সময়ে বিজ্ঞপ্তি বিতরণ করে।
iOS ক্যালেন্ডার ইভেন্টের জন্য UNCalendarNotificationTrigger, অন্তরালের জন্য UNTimeIntervalNotificationTrigger এবং অবস্থানের জন্য UNLocationNotificationTrigger ব্যবহার করে। Android AlarmManager, WorkManager এবং setExact-এর মাধ্যমে সঠিক নির্ধারণ প্রদান করে।
Android 12 থেকে — SCHEDULE_EXACT_ALARM-এর জন্য ব্যবহারকারীর কাছ থেকে বিশেষ অনুমতি প্রয়োজন। iOS-এ, UNUserNotificationCenter.requestAuthorization-এর মাধ্যমে একবার অনুমতি চাওয়া হয় এবং ব্যবহারকারী অ্যাক্সেস স্তর বেছে নেয়: ব্যানার, শব্দ, ব্যাজ।
স্থানীয় বিজ্ঞপ্তিগুলি সামগ্রীর পরিবর্তে ট্রিগার প্রকার অনুসারে শ্রেণীবদ্ধ করা হয়। প্রতিটি প্রকার নির্ধারণ করে কখন এবং কী শর্তে বিজ্ঞপ্তি ব্যবহারকারীকে দেখানো হবে।
iOS এবং Android-এ, ট্রিগার প্রকারগুলি ভিন্নভাবে প্রয়োগ করা হয়, যদিও যৌক্তিক শ্রেণীবিভাগ একই। iOS তারিখের জন্য UNCalendarNotificationTrigger, অন্তরালের জন্য UNTimeIntervalNotificationTrigger এবং অবস্থানের জন্য UNLocationNotificationTrigger ব্যবহার করে। Android setExact এবং setRepeating-সহ AlarmManager, পাশাপাশি বিলম্বিত কাজের জন্য WorkManager প্রদান করে।
| ট্রিগার প্রকার | বিবরণ | উদাহরণ |
|---|---|---|
| সময় অন্তরাল | শুরুর N সেকেন্ড পরে বিজ্ঞপ্তি | উল্টো গণনা টাইমার |
| ক্যালেন্ডার তারিখ | নির্দিষ্ট সময় এবং তারিখে বিজ্ঞপ্তি | মিটিং রিমাইন্ডার |
| অবস্থান | এলাকায় প্রবেশ/প্রস্থানে বিজ্ঞপ্তি | দোকানে রিমাইন্ডার |
| তাৎক্ষণিক | API কল করার সাথে সাথে বিতরণ | ডাউনলোড বিজ্ঞপ্তি |
iOS UNNotificationAttachment-ও সমর্থন করে — বিজ্ঞপ্তির মূল অংশে একটি ছবি, অডিও বা ভিডিও সংযুক্ত করা। Android NotificationCompat.Style-এর মাধ্যমে বোতাম এবং বড় ছবি-সহ কাস্টম টেমপ্লেট সমর্থন করে।
ট্রিগারের পছন্দ পরিস্থিতির উপর নির্ভর করে: ক্যালেন্ডার রিমাইন্ডার ক্যালেন্ডার ট্রিগারের সাথে সবচেয়ে ভাল কাজ করে, অবস্থান রিমাইন্ডার অবস্থানের সাথে। অন্তরাল ট্রিগার নির্দিষ্ট সময়ের সাথে পুনরাবৃত্ত ইভেন্টের জন্য উপযুক্ত।
iOS-এ, স্থানীয় বিজ্ঞপ্তিগুলি সিস্টেম দ্বারা বিতরণ করা হয় এমনকি অ্যাপ বন্ধ থাকলেও — UNUserNotificationCenter স্বাধীনভাবে সারি পরিচালনা করে। Android-এ, বিতরণ নির্বাচিত প্রক্রিয়ার উপর নির্ভর করে: AlarmManager স্ক্রিন বন্ধ থাকলেও কাজ করে, যখন WorkManager শক্তি সঞ্চয় বিবেচনা করে।
স্থানীয় বিজ্ঞপ্তিগুলি সেই কাজগুলি সমাধান করে যেখানে বাহ্যিক অবকাঠামো অতিরিক্ত বা অনুপলব্ধ। প্রধান পরিস্থিতি: রিমাইন্ডার, টাইমার, অনবোর্ডিং টিপস এবং বিলম্বিত ক্রিয়া।
Localytics-এর গবেষণা দেখায় যে স্থানীয় রিমাইন্ডার ব্যবহার করে এমন অ্যাপগুলি ইনস্টলেশনের প্রথম সপ্তাহে 35% বেশি ব্যবহারকারী ধরে রাখে। এটি স্থানীয় বিজ্ঞপ্তিগুলিকে একটি শক্তিশালী অনবোর্ডিং টুল করে তোলে।
ফ্রিকোয়েন্সির অপব্যবহার না করা গুরুত্বপূর্ণ — সিস্টেম নিজেই একই অ্যাপ থেকে বিজ্ঞপ্তিগুলি গ্রুপ করে এবং ব্যবহারকারী যদি সেগুলি বিরক্তিকর হয় তবে সমস্ত স্থানীয় বিজ্ঞপ্তি নিষ্ক্রিয় করতে পারে। অ-গুরুত্বপূর্ণ ইভেন্টের জন্য সর্বোত্তম ফ্রিকোয়েন্সি প্রতিদিন 2–3টি বিজ্ঞপ্তির বেশি নয়।
Android-এ স্থানীয় বিজ্ঞপ্তি নির্ধারণ করতে, AlarmManager-এর সাথে NotificationManager ব্যবহার করুন। Android 8+-এ, আপনাকে প্রথমে একটি বিজ্ঞপ্তি চ্যানেল তৈরি করতে হবে, অন্যথায় বিজ্ঞপ্তি প্রদর্শিত হবে না।
val channelId = "reminder_channel"
val notificationId = "task_reminder_42"
val channel = NotificationChannel(
channelId,
"রিমাইন্ডার",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "কাজের রিমাইন্ডারের জন্য চ্যানেল"
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
val intent = Intent(this, ReminderReceiver::class.java).apply {
putExtra("notification_id", notificationId)
putExtra("channel_id", channelId)
}
val pendingIntent = PendingIntent.getBroadcast(
this, notificationId.hashCode(),
intent, PendingIntent.FLAG_UPDATE_CURRENT
)
val alarmManager = getSystemService(AlarmManager::class.java)
alarmManager.setExact(
AlarmManager.RTC_WAKEUP,
triggerTimeMillis,
pendingIntent
)
Android 12+-এ, setExact কল করার আগে SCHEDULE_EXACT_ALARM অনুমতি পরীক্ষা করুন। যদি অনুমতি না দেওয়া হয় — setWindow ব্যবহার করুন, যা সময় উইন্ডোর মধ্যে বিতরণ নিশ্চিত করে।
যখন AlarmManager সক্রিয় হয়, সিস্টেম একটি ব্রডকাস্ট Intent পাঠায় যা BroadcastReceiver গ্রহণ করে। এর ভিতরে, আপনাকে NotificationManager-এর মাধ্যমে বিজ্ঞপ্তি তৈরি এবং দেখাতে হবে। নিশ্চিত করুন যে PendingIntent FLAG_UPDATE_CURRENT ব্যবহার করে, অন্যথায় ডেটা পরিবর্তন হলে পুরানো বিজ্ঞপ্তিগুলি পুরানো Intent ব্যবহার করতে থাকবে।
iOS-এ, স্থানীয় বিজ্ঞপ্তিগুলি UNUserNotificationCenter-এর মাধ্যমে UNMutableNotificationContent এবং একটি ট্রিগার ব্যবহার করে তৈরি করা হয়। নির্ধারণের আগে, আপনাকে ব্যবহারকারীর কাছ থেকে অনুমতি নিতে হবে।
import UserNotifications
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
guard granted else { return }
}
let content = UNMutableNotificationContent()
content.title = "কাজের রিমাইন্ডার"
content.body = "18:00 এর মধ্যে রিপোর্ট সম্পূর্ণ করতে ভুলবেন না"
content.sound = .default
content.userInfo = ["task_id": "42"]
let trigger = UNTimeIntervalNotificationTrigger(
timeInterval: 3600,
repeats: false
)
let request = UNNotificationRequest(
identifier: "task_reminder_42",
content: content,
trigger: trigger
)
center.add(request)
iOS একসাথে 64টি স্থানীয় বিজ্ঞপ্তি অনুরোধ সমর্থন করে। যদি সীমা অতিক্রম করা হয়, সিস্টেম নতুন অনুরোধ প্রত্যাখ্যান করে যতক্ষণ না সক্রিয় অনুরোধগুলি বিতরণ বা বাতিল হয়। বর্তমান সারি পরীক্ষা করতে getPendingNotificationRequests ব্যবহার করুন।
যখন ব্যবহারকারী iOS-এ স্থানীয় বিজ্ঞপ্তির সাথে ইন্টারঅ্যাক্ট করে, তখন UNUserNotificationCenterDelegate-এর userNotificationCenter:didReceive response পদ্ধতি কল করা হয়। এই পদ্ধতি অনুরোধ শনাক্তকারী, actionIdentifier (কোন বোতাম চাপা হয়েছে) এবং কাস্টম userInfo প্রদান করে। এটি একটি সাধারণ বিজ্ঞপ্তি খোলা এবং একটি নির্দিষ্ট অ্যাকশন বোতাম চাপার মধ্যে পার্থক্য করতে দেয়।
স্থানীয় বিজ্ঞপ্তিগুলিকে বিরক্তিকর না করে উপযোগী করতে, বেশ কয়েকটি মূল নিয়ম অনুসরণ করুন। প্রথম: ফ্রিকোয়েন্সি নিয়ন্ত্রণ করুন — অ-গুরুত্বপূর্ণ ইভেন্টের জন্য প্রতিদিন 2–3টি বিজ্ঞপ্তির বেশি নয়, অন্যথায় ব্যবহারকারী সমস্ত অ্যাপ বিজ্ঞপ্তি নিষ্ক্রিয় করবে।
দ্বিতীয়: ব্যবহারকারীকে পছন্দ দিন। ইন্টারফেসে নির্দিষ্ট ধরণের স্থানীয় বিজ্ঞপ্তি নিষ্ক্রিয় করার ক্ষমতা যোগ করুন। Android-এ, এর জন্য কম গুরুত্বের একটি পৃথক NotificationChannel ব্যবহার করুন; iOS-এ, অ্যাপ সেটিংসে একটি পৃথক বিভাগ ব্যবহার করুন।
তৃতীয়: প্রাসঙ্গিক প্রাসঙ্গিকতা — বিজ্ঞপ্তিটি তখনই দেখা উচিত যখন ব্যবহারকারীর প্রয়োজন হয়। অবস্থান ট্রিগার বাড়ির কাছে রিমাইন্ডারের জন্য আদর্শ, ক্যালেন্ডার ট্রিগার মিটিংয়ের জন্য, অন্তরাল ট্রিগার নিয়মিত কার্যকলাপ যেমন পানি পান বা স্ট্রেচিংয়ের জন্য। অপ্রয়োজনে প্রকারগুলি মিশ্রিত করবেন না।
চতুর্থ: বাস্তব ডিভাইসে পরীক্ষা করুন। iOS সিমুলেটর স্থানীয় বিজ্ঞপ্তি বিতরণের সমস্ত পরিস্থিতি অনুকরণ করে না, বিশেষ করে ব্যাকগ্রাউন্ডে। Android-এ, নির্ধারিত বিজ্ঞপ্তিগুলির সারি এবং তাদের প্যারামিটার পরীক্ষা করতে adb shell dumpsys notification ব্যবহার করুন। পঞ্চম: সর্বদা ব্যবহারকারীকে অ্যাপ ইন্টারফেসের মাধ্যমে বিজ্ঞপ্তি নিষ্ক্রিয় করার ক্ষমতা প্রদান করুন — এটি UX এবং App Store Review Guidelines-এর বাধ্যতামূলক প্রয়োজনীয়তা।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
স্থানীয় বিজ্ঞপ্তি সার্ভারের অংশগ্রহণ ছাড়াই ডিভাইস দ্বারা নির্ধারিত এবং বিতরণ করা হয়। একটি পুশ বিজ্ঞপ্তি-র জন্য বাহ্যিক পরিষেবা (FCM, APNS) এবং ইন্টারনেট সংযোগ প্রয়োজন। স্থানীয়গুলি অফলাইনে কাজ করে, পুশ শুধুমাত্র নেটওয়ার্ক অ্যাক্সেসের সাথে।
iOS একসাথে 64টি নির্ধারিত অনুরোধের মধ্যে সীমাবদ্ধ করে। Android-এর কোনও কঠোর সীমা নেই, তবে 500টির বেশি বিজ্ঞপ্তি সিস্টেমের কর্মক্ষমতা হ্রাস করতে পারে এবং বিতরণ সময়কে প্রভাবিত করতে পারে।
হ্যাঁ, iOS-এ অনুরোধ শনাক্তকারীর সাথে removePendingNotificationRequests ব্যবহার করুন। Android-এ, NotificationManager.cancel কল করুন বা AlarmManager-এর মাধ্যমে PendingIntent বাতিল করুন। বাতিলের জন্য একটি অনন্য শনাক্তকারী বাধ্যতামূলক।
iOS-এ, requestAuthorization-এর মাধ্যমে অনুমতি বাধ্যতামূলক। Android 13+ (Tiramisu)-এ, POST_NOTIFICATIONS অনুমতিও প্রয়োজন। পুরানো Android সংস্করণগুলির স্থানীয় বিজ্ঞপ্তিগুলির জন্য স্পষ্ট অনুমতির প্রয়োজন নেই।
iOS-এ, UNNotificationAction তৈরি করুন এবং এটি UNNotificationCategory-তে যোগ করুন। Android-এ, BroadcastReceiver-কে লক্ষ্য করে PendingIntent-সহ NotificationCompat.Builder.addAction ব্যবহার করুন। প্রতিটি বোতাম অ্যাপে একটি পৃথক ক্রিয়া ট্রিগার করে।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন