Notification Category (নোটিফিকেশন ক্যাটাগরি) হল iOS-এর একটি মেকানিজম যা পুশ নোটিফিকেশনকে টাইপ অনুযায়ী গ্রুপ করে এবং সেগুলিতে কাস্টম অ্যাকশন সংযুক্ত করে। ক্যাটাগরি নির্ধারণ করে যে নোটিফিকেশনে 3D Touch বা লং-প্রেস ব্যবহার করলে কোন বাটনগুলো দেখানো হবে, পাশাপাশি সিস্টেম এই টাইপের আগত নোটিফিকেশন কীভাবে প্রসেস করে। Apple ডেভেলপার ডকুমেন্টেশন অনুযায়ী, UNNotificationCategory UNUserNotificationCenter-এ রেজিস্টার করা হয় এবং APNS পেলোডের category ফিল্ডের মাধ্যমে নোটিফিকেশনের সাথে সংযুক্ত করা হয়।
মূল বিষয়সমূহ
Notification Category হল iOS-এর একটি ফিচার (সংস্করণ 8.0 থেকে) যা ডেভেলপারদের পুশ নোটিফিকেশন শ্রেণীবদ্ধ করতে এবং সেগুলিতে ইন্টারঅ্যাকটিভ অ্যাকশন যোগ করতে দেয়। যখন একজন ব্যবহারকারী একটি নোটিফিকেশন পান এবং জোরে চাপ দেন (3D Touch) বা লং-প্রেস করেন, তখন ক্যাটাগরি দ্বারা নির্ধারিত বাটনগুলো দেখা যায়। এটি নোটিফিকেশনকে ইন্টারঅ্যাকটিভ করে তোলে এবং ব্যবহারকারীদের অ্যাপ না খুলেই পদক্ষেপ নিতে দেয়।
একটি ক্যাটাগরি UNNotificationCategory অবজেক্টের মাধ্যমে রেজিস্টার করা হয়, যাতে একটি আইডেন্টিফায়ার, অ্যাকশনের একটি অ্যারে এবং ঐচ্ছিক ডিসপ্লে প্যারামিটার থাকে। সিস্টেম APNS পেলোড থেকে ক্যাটাগরি আইডেন্টিফায়ার ব্যবহার করে রেজিস্টার করা ক্যাটাগরি খুঁজে বের করে এবং সংশ্লিষ্ট বাটনগুলো প্রদর্শন করে।
Android Notification Channel-এর বিপরীতে, iOS Category গুরুত্ব, শব্দ বা কম্পন পরিচালনা করে না। এর একমাত্র উদ্দেশ্য নোটিফিকেশনের জন্য ইন্টারঅ্যাকটিভ সক্ষমতা প্রদান করা: উত্তর, নিশ্চিতকরণ, বাতিল বা টেক্সট ইনপুট বাটন।
iOS-এ পুশ নোটিফিকেশন দেখানোর জন্য ক্যাটাগরি বাধ্যতামূলক নয়। নোটিফিকেশন যেভাবেই হোক দেখা যাবে — ক্যাটাগরি রেজিস্টার করা থাকলে বাটন সহ, অথবা বাটন ছাড়া। ক্যাটাগরি শুধুমাত্র নোটিফিকেশনে ইন্টারঅ্যাকটিভিটি যোগ করার জন্য প্রয়োজন।
ক্যাটাগরি মেকানিজম চারটি ধাপ নিয়ে গঠিত: ক্লায়েন্টে ক্যাটাগরি রেজিস্টার করা, ক্যাটাগরি সহ APNS পেলোড পাঠানো, সিস্টেম দ্বারা ক্যাটাগরি চিহ্নিত করা এবং ব্যবহারকারীর অ্যাকশন হ্যান্ডল করা।
ক্যাটাগরির অ্যাকশন দুই ধরনের হতে পারে: foreground (অ্যাপ খোলে) এবং background (পটভূমিতে এক্সিকিউট হয়)। পটভূমির অ্যাকশনের জন্য, অ্যাপ UNNotificationActionHandler-এ প্রসেস করতে সীমিত সময় (প্রায় 30 সেকেন্ড) পায়।
UNNotificationCategory options প্যারামিটারের মাধ্যমে বেশ কয়েকটি অপশন সমর্থন করে: customDismissAction — নোটিফিকেশন সোয়াইপ করলে ইভেন্ট পাওয়া, allowInCarPlay — CarPlay-এ অ্যাকশন দেখানো, hiddenPreviewsBodyPlaceholder — লুকানো প্রিভিউয়ের জন্য কাস্টম প্লেসহোল্ডার টেক্সট।
iOS নোটিফিকেশন ক্যাটাগরির জন্য দুই ধরনের অ্যাকশন প্রদান করে। প্রতিটি প্রকারের নিজস্ব উদ্দেশ্য এবং ব্যবহারকারীর সাথে যোগাযোগের পদ্ধতি রয়েছে।
| প্রকার | ক্লাস | বর্ণনা | উদাহরণ |
|---|---|---|---|
| সরল অ্যাকশন | UNNotificationAction | শিরোনাম এবং অপশন (destructive, foreground, authenticationRequired) সহ একটি বাটন | “মুছুন”, “দেখুন” |
| টেক্সট ইনপুট | UNTextInputAction | একটি বাটন যা প্লেসহোল্ডার সহ টেক্সট ইনপুট ফিল্ড খোলে | “উত্তর দিন”, “মন্তব্য করুন” |
UNTextInputAction হল iOS-এর একটি অনন্য ফিচার। যখন ব্যবহারকারী “উত্তর দিন” বাটন চাপেন, সিস্টেম একটি টেক্সট ফিল্ড দেখায় যেখানে ব্যবহারকারী তার উত্তর টাইপ করেন। প্রবেশ করানো টেক্সট অ্যাকশন আইডেন্টিফায়ারের সাথে ডেলিগেটকে পাঠানো হয়। এটি অ্যাপ না খুলেই দ্রুত উত্তর বাস্তবায়নের অনুমতি দেয়।
অ্যাকশন অপশন: options.authenticationRequired — ডিভাইস আনলক করা আবশ্যক, options.destructive — বাটন লাল রঙে হাইলাইট করে (বিপজ্জনক অ্যাকশনের জন্য), options.foreground — চাপার পর অ্যাপ খোলে।
ক্যাটাগরি অ্যাপ লঞ্চে রেজিস্টার করা হয়, সাধারণত didFinishLaunchingWithOptions মেথডে। রেজিস্ট্রেশন UNUserNotificationCenter-এর মাধ্যমে, নোটিফিকেশন অনুমতি অনুরোধের পরে করা হয়। ক্যাটাগরি প্রতিটি লঞ্চে আপডেট করা যেতে পারে — পুরোনো সংস্করণ নতুন দিয়ে প্রতিস্থাপিত হয়।
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func registerNotificationCategories() {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "উত্তর দিন",
options: [.foreground],
textInputButtonTitle: "পাঠান",
textInputPlaceholder: "বার্তা লিখুন..."
)
let deleteAction = UNNotificationAction(
identifier: "delete",
title: "মুছুন",
options: [.destructive]
)
let messageCategory = UNNotificationCategory(
identifier: "message",
actions: [replyAction, deleteAction],
intentIdentifiers: [],
options: [.customDismissAction]
)
UNUserNotificationCenter.current()
.setNotificationCategories([messageCategory])
}
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
UNUserNotificationCenter.current().delegate = self
registerNotificationCategories()
return true
}
}
ক্যাটাগরি রেজিস্টার করার পর, APNS পেলোডে category = “message” যুক্ত যেকোনো নোটিফিকেশন “উত্তর দিন” এবং “মুছুন” বাটন দেখাবে। ট্যাপ হ্যান্ডলিং userNotificationCenter:didReceive response-এ হয়, যেখানে actionIdentifier নির্ধারণ করে কোন বাটন চাপা হয়েছে।
যখন ব্যবহারকারী একটি ক্যাটাগরি বাটন চাপেন, iOS UNNotificationResponse অবজেক্ট সহ UNUserNotificationCenterDelegate-কে কল করে। response.actionIdentifier-এ চাপা বাটনের আইডেন্টিফায়ার থাকে, এবং response.notification.request.content.userInfo-এ পেলোড থেকে কাস্টম ডেটা থাকে।
Android Notification Channels-এর সাথে পরিচিত ডেভেলপাররা প্রায়ই সেগুলোকে iOS Notification Categories-এর সাথে গুলিয়ে ফেলেন। একই নাম থাকা সত্ত্বেও, এই মেকানিজমগুলো ভিন্ন কাজ সমাধান করে এবং ভিন্নভাবে কাজ করে।
উভয় প্ল্যাটফর্মই উভয় মেকানিজম একত্রিত করতে পারে: Android-এ, একটি নোটিফিকেশন NotificationCompat-এর অ্যাকশন সহ একটি চ্যানেলের অন্তর্ভুক্ত হতে পারে, যেখানে iOS-এ, একটি ক্যাটাগরি চ্যানেলের পরিপূরক হয়, যাকে iOS-এ thread-id বলা হয় এবং নোটিফিকেশন সেন্টারে নোটিফিকেশন গ্রুপ করার জন্য ব্যবহৃত হয়।
নোটিফিকেশন ক্যাটাগরি বাটন সহ প্রদর্শিত হওয়ার জন্য, সার্ভারকে APNS পেলোডে category কী অন্তর্ভুক্ত করতে হবে। এই কী ছাড়া, সিস্টেম জানবে না নোটিফিকেশনে কোন ক্যাটাগরি প্রয়োগ করতে হবে।
{
"aps": {
"alert": {
"title": "নতুন বার্তা",
"body": "আনা: হাই! কেমন আছেন?"
},
"category": "message",
"thread-id": "chat_123",
"badge": 5,
"sound": "default"
}
}
category কীকে ক্লায়েন্টে setNotificationCategories-এর মাধ্যমে রেজিস্টার করা আইডেন্টিফায়ারের সাথে হুবহু মেলাতে হবে। কেস গুরুত্বপূর্ণ — “message” এবং “Message” ভিন্ন ক্যাটাগরি হিসেবে গণ্য হয়। যদি ক্যাটাগরি খুঁজে না পাওয়া যায়, নোটিফিকেশন বাটন ছাড়া দেখা যায়, লগে কোনো ত্রুটি থাকে না।
যদি সার্ভার এমন একটি ক্যাটাগরি সহ নোটিফিকেশন পাঠায় যা ক্লায়েন্টে রেজিস্টার করা নেই, iOS ক্যাটাগরি উপেক্ষা করে এবং নোটিফিকেশন বাটন ছাড়া দেখায়। ত্রুটিটি লগ হয় না, এবং অ্যাপ অমিল সম্পর্কে জানতে পারে না। সার্ভার এবং ক্লায়েন্টের মধ্যে ক্যাটাগরির তালিকা সিঙ্ক্রোনাইজ করার পরামর্শ দেওয়া হয়।
iOS-এ নোটিফিকেশন ক্যাটাগরি ডিজাইন করার সময়, একটি ক্যাটাগরি — একটি দৃশ্যকল্প নীতি অনুসরণ করুন। প্রতিটি ক্যাটাগরি একটি নির্দিষ্ট ধরনের ইন্টারঅ্যাকশনের সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত: একটি বার্তার উত্তর দেওয়া, একটি অ্যাকশন নিশ্চিত করা বা একটি অনুরোধ প্রত্যাখ্যান করা। একই ক্যাটাগরিতে ভিন্ন ভিন্ন দৃশ্যকল্প মিশ্রিত করবেন না।
সেই দৃশ্যকল্পের জন্য UNTextInputAction ব্যবহার করুন যেখানে ব্যবহারকারীকে অ্যাপ না খুলেই টেক্সট ইনপুট করতে হবে: মেসেজিং উত্তর, মন্তব্য, দ্রুত নোট। টেক্সট অ্যাকশন ব্যস্ততা বাড়ায় — ব্যবহারকারী অ্যাপে 5+ এর পরিবর্তে 2 ট্যাপে একটি অর্থপূর্ণ অ্যাকশন সম্পাদন করে।
বিপজ্জনক অ্যাকশনের (মুছে ফেলা, ব্লক করা) জন্য destructive অপশন ব্যবহার করুন। iOS এই বাটনগুলো লাল রঙে হাইলাইট করবে, ব্যবহারকারীকে অ্যাকশনের অপরিবর্তনীয়তা সম্পর্কে সতর্ক করবে। যে অ্যাকশনগুলোর জন্য ডিভাইস আনলক করা প্রয়োজন (ব্যক্তিগত ডেটা দেখা), সেগুলির জন্য authenticationRequired নির্দিষ্ট করুন।
বিভিন্ন ডিভাইসে ক্যাটাগরি পরীক্ষা করুন: 3D Touch সহ iPhone-এ, 3D Touch ছাড়া iPhone-এ (লং-প্রেস), iPad-এ এবং Mac-এ। Apple প্ল্যাটফর্ম জুড়ে ক্যাটাগরির আচরণ সামান্য ভিন্ন হতে পারে। CarPlay-এ বিশেষ মনোযোগ দিন: ক্যাটাগরি বাটন গাড়ির স্ক্রিনে দেখা যায় এবং চালকের নিরাপত্তার জন্য ন্যূনতম টেক্সট সহ ডিজাইন করা উচিত।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
কোনো সীমা নেই — iOS UNNotificationCategory-এর সংখ্যার উপর কোনো সীমা আরোপ করে না। তবে, বাস্তবে, ডেলিগেট হ্যান্ডলিং জটিল না করতে 10–15-এর বেশি ক্যাটাগরি ব্যবহার না করার পরামর্শ দেওয়া হয়। প্রতিটি ক্যাটাগরিতে সর্বোচ্চ 4টি অ্যাকশন (বাটন) থাকতে পারে। 4টির বেশি অ্যাকশন সিস্টেম উপেক্ষা করে।
UNUserNotificationCenterDelegate প্রোটোকল এবং didReceive মেথড ইমপ্লিমেন্ট করুন। response.actionIdentifier চেক করুন: UNNotificationDismissActionIdentifier — খারিজ করতে সোয়াইপ, UNNotificationDefaultActionIdentifier — বডিতে ট্যাপ, অথবা আপনার কাস্টম বাটন আইডেন্টিফায়ার। টেক্সট ইনপুট বাটনের জন্য, টেক্সট response.userText-এর মাধ্যমে উপলব্ধ।
Category — নোটিফিকেশনের জন্য ইন্টারঅ্যাকটিভ অ্যাকশন (বাটন) নির্ধারণ করে। Thread-id — নোটিফিকেশন সেন্টারে নোটিফিকেশনকে বিষয় অনুযায়ী গ্রুপ করে। উভয় কী APNS পেলোডে নির্দিষ্ট করা হয়। Category এবং thread-id সম্পর্কিত নয়: একটি নোটিফিকেশনে ক্যাটাগরি থাকতে পারে কিন্তু thread-id নাও থাকতে পারে, এবং এর বিপরীতও হতে পারে।
হ্যাঁ, UNNotificationCategory macOS 10.14+ (Mojave)-এ UserNotifications ফ্রেমওয়ার্ক ব্যবহার করা অ্যাপে সমর্থিত। macOS-এ ক্যাটাগরির আচরণ iOS-এর মতো: নোটিফিকেশনে ক্লিক করলে বাটন দেখানো হয়, এবং হ্যান্ডলিং UNUserNotificationCenterDelegate-এর মাধ্যমে হয়।
সুপারিশ করা হয় setNotificationCategories-এর মাধ্যমে প্রতিটি অ্যাপ লঞ্চে ক্যাটাগরি রেজিস্টার করা। সিস্টেম প্রতিটি কলেই পুরোনো ক্যাটাগরি সেট নতুন দিয়ে প্রতিস্থাপন করে। যদি আপনি আপডেট না করেন, ক্যাটাগরি লঞ্চের মধ্যে টিকে থাকে, কিন্তু যখন কোড পরিবর্তন হয়, পুরোনো ক্যাটাগরি অপ্রত্যাশিত আচরণের কারণ হতে পারে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন