Notification Content Extension — এটি একটি iOS এক্সটেনশনের ধরন যা পুশ নোটিফিকেশনের স্ট্যান্ডার্ড টেমপ্লেটকে সম্পূর্ণ কাস্টম ইউজার ইন্টারফেস দিয়ে প্রতিস্থাপন করে। ডেভেলপার নোটিফিকেশনের ভিতরে ইমেজ, অডিও প্লেয়ার, অ্যাকশন বাটন, প্রোগ্রেস বার এবং কাস্টম অ্যানিমেশন প্রদর্শনের ক্ষমতা পান, যা স্ট্যান্ডার্ড ব্যানারটিকে একটি পূর্ণাঙ্গ মিনি-অ্যাপ্লিকেশনে বিস্তৃত করে। WWDC 2025-এর তথ্য অনুসারে, এক্সটেনশনটি UNNotificationContentExtension ব্যবহার করে এবং একটি নোটিফিকেশনে 4টি মিডিয়া অ্যাটাচমেন্ট পর্যন্ত সমর্থন করে, পাশাপাশি UNNotificationAction-এর মাধ্যমে ইন্টারঅ্যাকটিভ অ্যাকশন প্রক্রিয়াকরণ করে।
মূল বিষয়
Notification Content Extension — এটি একটি অ্যাপ এক্সটেনশন যা iOS-এ পুশ নোটিফিকেশনের প্রদর্শন ওভাররাইড করে। স্ট্যান্ডার্ড ব্যানার যার মধ্যে শিরোনাম, বার্তার মূল অংশ এবং বাটন থাকে, তার পরিবর্তে একটি ইন্টারফেস দেখানো যেতে পারে যা সম্পূর্ণরূপে Interface Builder-এ অথবা UIKit বা SwiftUI-এর মাধ্যমে প্রোগ্রামেটিকভাবে তৈরি করা হয়েছে।
Notification Service Extension-এর বিপরীতে, যা প্রদর্শনের আগে বিষয়বস্তু পরিবর্তন করে, Content Extension শুধুমাত্র ভিজ্যুয়াল উপস্থাপনা-এর জন্য দায়িত্বশীল। এক্সটেনশনটি সমস্ত পরিবর্তনের পরে প্রস্তুত নোটিফিকেশন গ্রহণ করে এবং সিদ্ধান্ত নেয় কীভাবে এটি প্রদর্শন করবে। এটি দুটি ধরণের নোটিফিকেশন এক্সটেনশনের মধ্যে মূল পার্থক্য।
এক্সটেনশনটি সক্রিয় হয় যখন ব্যবহারকারী সম্প্রসারণ জেসচার করেন — নোটিফিকেশনটি নিচে স্ক্রোল করেন বা এটিতে ক্লিক করেন (ডিভাইস মডেলের উপর নির্ভর করে)। iOS এক্সটেনশন প্রক্রিয়া শুরু করে, নির্দিষ্ট nib বা storyboard থেকে কন্ট্রোলার তৈরি করে এবং UNNotificationContentExtension-এর মাধ্যমে নোটিফিকেশন পাঠায়।
ডেভেলপমেন্ট শুরু হয় Xcode-এ Notification Content Extension টেমপ্লেট সহ একটি নতুন target যোগ করার মাধ্যমে। Xcode একটি MainInterface.storyboard ফাইল এবং UIViewController থেকে উত্তরাধিকারসূত্রে প্রাপ্ত একটি ক্লাস তৈরি করে যা UNNotificationContentExtension প্রোটোকল বাস্তবায়ন করে।
কাস্টম এলাকার সর্বোচ্চ উচ্চতা iPhone-এ 320 পয়েন্ট (বড় স্ক্রিনের মডেলের জন্য) এবং iPad-এ 352 পয়েন্ট। এই সীমা অতিক্রমকারী কন্টেন্ট কেটে ফেলা হয়। বিভিন্ন আকারের সাথে খাপ খাওয়ানোর জন্য স্ক্রোলযোগ্য কন্টেন্টের জন্য Auto Layout এবং UIScrollView ব্যবহার করার পরামর্শ দেওয়া হয়। প্রস্থ সবসময় নোটিফিকেশনের প্রস্থের সমান এবং ডিভাইস ঘোরানোর সময় স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়।
Apple Human Interface Guidelines সতর্ক করে: নোটিফিকেশন ইন্টারফেস সংক্ষিপ্ত হওয়া উচিত এবং এটিতে কেবল একটি প্রধান উপাদান থাকা উচিত — ইমেজ, প্লেয়ার, ম্যাপ বা দ্রুত ইনপুট ফর্ম। একাধিক ইন্টারঅ্যাকটিভ উপাদান ব্যবহারকারীকে ওভারলোড করে এবং মিথস্ক্রিয়াকে জটিল করে তোলে।
App Group — এক্সটেনশন এবং মূল অ্যাপ্লিকেশনের মধ্যে ডেটা আদান-প্রদানের একমাত্র প্রক্রিয়া। App Group-এর শেয়ার্ড ডিরেক্টরির মাধ্যমে ক্যাশে করা ইমেজ, টোকেন এবং সেটিংস স্থানান্তর করা যায়। প্রক্রিয়াগুলোর বিচ্ছিন্নতার কারণে মূল অ্যাপ্লিকেশনের API-তে সরাসরি কল বা তার UserDefaults-এ অ্যাক্সেস উপলব্ধ নয়।
class NotificationViewController: UIViewController {
func didReceive(
_ notification: UNNotification
) {
guard let attachment = notification
.request.content.attachments.first()
else { return }
if attachment.url.startAccessingSecurityScopedResource() {
imageView.image = UIImage(contentsOfFile:
attachment.url.path)
attachment.url.stopAccessingSecurityScopedResource()
}
}
}
UNNotificationContentExtension — প্রধান প্রোটোকল যা কাস্টম নোটিফিকেশনের জীবনচক্র নির্ধারণ করে। প্রোটোকলটি বিষয়বস্তু গ্রহণ, অ্যাকশন প্রক্রিয়াকরণ এবং ইন্টারফেস পরিচালনার জন্য মেথড সরবরাহ করে।
didReceive(_:with:) নোটিফিকেশন গ্রহণের সময় কল করা হয়। এক্সটেনশনটি মিডিয়া প্লেয়ার পরিচালনার জন্য UNNotification অবজেক্ট এবং UNNotificationContentExtensionMediaPlayPauseButtonType গ্রহণ করে। এই মেথডে ইন্টারফেস সেটআপ করতে হবে — ইমেজ লোড করা, প্লেয়ার ইনিশিয়ালাইজ করা বা ডেটা প্রদর্শন করা। সিস্টেম প্রতিবার রিয়েল-টাইমে নোটিফিকেশন আপডেট হলে এই মেথড কল করে।
এটি মনে রাখা গুরুত্বপূর্ণ যে এক্সটেনশনের সম্পাদনের জন্য সীমিত সময় আছে — সম্পূর্ণ প্রদর্শন চক্রের জন্য প্রায় 30 সেকেন্ড। যদি এই সময়ের মধ্যে ইন্টারফেস প্রস্তুত না হয়, iOS একটি সিস্টেম নোটিফিকেশন দেখাবে। ভারী সংস্থানগুলির জন্য — নেটওয়ার্ক থেকে ইমেজ লোড করা, ভিডিও ডিকোড করা — App Group-এর মাধ্যমে প্রি-ক্যাশিং সহ অ্যাসিনক্রোনাস অপারেশন ব্যবহার করার পরামর্শ দেওয়া হয়।
প্রোটোকলটিতে play/pause বাটনের জন্য ঐচ্ছিক মেথড অন্তর্ভুক্ত রয়েছে: mediaPlay, mediaPause এবং mediaPlayPauseButtonType। যদি নোটিফিকেশনটিতে অডিও বা ভিডিও কন্টেন্ট থাকে, এক্সটেনশনটি সিস্টেম কন্ট্রোল এলিমেন্ট সহ একটি বিল্ট-ইন প্লেয়ার দেখাতে পারে। উপযুক্ত বাটন টাইপ ফেরত দেওয়ার সময় iOS স্বয়ংক্রিয়ভাবে এক্সটেনশনের উপরের ডান কোণায় প্লে বাটন যোগ করে।
UNNotificationAttachment — একটি অবজেক্ট যা নোটিফিকেশনের সাথে সংযুক্ত মিডিয়া ডেটা ধারণ করে। ইমেজ, অডিও ফাইল এবং ভিডিও সার্ভারে বা Notification Service Extension-এ UNNotificationAttachment-এর মাধ্যমে নোটিফিকেশন তৈরির পর্যায়ে যোগ করা হয়।
ইমেজের জন্য: JPEG, PNG, GIF, HEIF। অডিওর জন্য: MP3, AAC, ALAC, WAV। ভিডিওর জন্য: MPEG-4, H.264, HEVC। প্রতিটি অ্যাটাচমেন্টের সর্বোচ্চ আকার — 50 MB, প্রতি নোটিফিকেশনে 4টি অ্যাটাচমেন্ট পর্যন্ত। সিস্টেম নোটিফিকেশন প্রদর্শনের আগে ব্যাকগ্রাউন্ডে স্বয়ংক্রিয়ভাবে অ্যাটাচমেন্ট ডাউনলোড করে এবং security-scoped রিসোর্সের মাধ্যমে এক্সটেনশনকে লোকাল URL-এ অ্যাক্সেস প্রদান করে।
Apple-এর মতে, এক্সটেনশনের নিজে মিডিয়া ডাউনলোড করা উচিত নয় — সিস্টেম দ্বারা ডাউনলোড সম্পূর্ণ হওয়ার পর UNNotificationAttachment-এ ইতিমধ্যে লোকাল URL থাকে। তবে, যদি অ্যাটাচমেন্টটি সময়মতো লোড না হয় (উদাহরণস্বরূপ, খারাপ সংযোগের কারণে), এক্সটেনশনটি একটি প্লেসহোল্ডার বা বিকল্প টেক্সট প্রদর্শন করতে পারে।
প্রতিটি UNNotificationAttachment একটি security-scoped URL সরবরাহ করে, যা এক্সটেনশনকে startAccessingSecurityScopedResource()-এর মাধ্যমে অ্যাক্সেস করতে হবে এবং stopAccessingSecurityScopedResource()-এর মাধ্যমে মুক্ত করতে হবে। এই মেথডগুলি জোড়ায় কল করতে হবে — অন্যথায় রিসোর্স মুক্ত হবে না এবং অ্যাক্সেস অধিকার লিক হবে।
let attachment = notification.request.content.attachments.first()
guard attachment.url.startAccessingSecurityScopedResource()
else { return }
defer { attachment.url.stopAccessingSecurityScopedResource() }
let data = try Data(contentsOf: attachment.url)
imageView.image = UIImage(data: data)
Notification Content Extension কাস্টম ইন্টারঅ্যাকটিভ অ্যাকশন সমর্থন করে — বাটন যা নোটিফিকেশন কন্টেন্টের নিচে প্রদর্শিত হয়। অ্যাকশনগুলি UNNotificationCategory-এর মাধ্যমে নোটিফিকেশন ক্যাটাগরি তৈরি করার সময় নিবন্ধিত হয় এবং ধ্বংসাত্মক, টেক্সট বা ব্যাকগ্রাউন্ড হতে পারে।
UNNotificationAction — শিরোনাম এবং ঐচ্ছিক ধ্বংসাত্মক ফ্লাগ সহ সরল অ্যাকশন। UNTextInputNotificationAction — টেক্সট ইনপুট ফিল্ড সহ অ্যাকশন, উদাহরণস্বরূপ বার্তায় দ্রুত উত্তর দেওয়ার জন্য। উভয় প্রকার UNNotificationActionOptions.authenticationRequired অপশন সমর্থন করে — সম্পাদনের আগে ডিভাইস আনলক করার প্রয়োজনীয়তা।
এক্সটেনশনটি নির্বাচিত অ্যাকশন didReceive(_:withCompletionHandler:) মেথডের মাধ্যমে গ্রহণ করে, যেখানে অ্যাকশন আইডেন্টিফায়ার এবং ঐচ্ছিক টেক্সট সহ UNNotificationResponse অবজেক্ট পাস করা হয়। এক্সটেনশনটি প্রতিক্রিয়া নিজে প্রক্রিয়া করতে পারে বা শেয়ার্ড App Group কন্টেইনারের মাধ্যমে মূল অ্যাপ্লিকেশনে পাঠাতে পারে।
let category = UNNotificationCategory(
identifier: "message",
actions: [
UNTextInputNotificationAction(
identifier: "reply",
title: "Reply",
options: .authenticationRequired
),
UNNotificationAction(
identifier: "mark_read",
title: "Mark Read",
options: .foreground
)
],
intentIdentifiers: []
)
সচরাচর জিজ্ঞাসিত প্রশ্ন
Content Extension নোটিফিকেশনের ভিজ্যুয়াল প্রদর্শনের জন্য দায়িত্বশীল, যেখানে Service Extension প্রদর্শনের আগে বিষয়বস্তু পরিবর্তনের জন্য দায়িত্বশীল। Content Extension Service Extension-এর পরে কাজ করে এবং নোটিফিকেশনের payload পরিবর্তন করতে পারে না।
Swift এবং Objective-C UIKit-এর জন্য। iOS 16 থেকে, SwiftUI-ও NotificationContentView-এর মাধ্যমে আকার এবং কনফিগারেশন মডিফায়ার সহ নোটিফিকেশন ইন্টারফেস তৈরি করতে সমর্থিত।
হ্যাঁ, iOS 16 থেকে এক্সটেনশনটি UIHostingController-এর মাধ্যমে SwiftUI ব্যবহার করতে পারে। তবে UIKit-এর সমস্ত দক্ষতা — আকার, সীমাবদ্ধতা, security-scoped রিসোর্স — preserved থাকে এবং SwiftUI কন্টেন্টে প্রযোজ্য হয়।
প্রতি নোটিফিকেশনে সর্বোচ্চ 4টি অ্যাটাচমেন্ট। প্রতিটি অ্যাটাচমেন্টের আকার 50 MB পর্যন্ত। সমর্থিত ফর্ম্যাট: ইমেজ (JPEG, PNG, HEIF), অডিও (MP3, AAC) এবং ভিডিও (MPEG-4, H.264)।
App Group-এর মাধ্যমে — ডিস্কে শেয়ার্ড ডিরেক্টরি। app group সাফিক্স সহ UserDefaults-ও কাজ করে। এক্সটেনশন প্রক্রিয়াগুলির বিচ্ছিন্নতার কারণে মূল অ্যাপ্লিকেশন API-তে সরাসরি কল উপলব্ধ নয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন