Notification Content Extension হল একটি iOS এক্সটেনশন যা স্ট্যান্ডার্ড push-বিজ্ঞপ্তির ইন্টারফেসকে একটি কাস্টম UIView দিয়ে প্রতিস্থাপন করতে দেয়। ডেভেলপার কন্টেন্ট প্রদর্শনের উপর সম্পূর্ণ নিয়ন্ত্রণ পায়: ছবি, ভিডিও, অ্যানিমেশন, কাস্টম ফন্ট এবং ইন্টারঅ্যাকটিভ উপাদান। Apple Developer, 2025-এর তথ্য অনুযায়ী, Notification Content Extension বিজ্ঞপ্তির সীমিত জায়গায় যেকোনো UIKit ইন্টারফেস সমর্থন করে।
প্রধান বিষয়
Notification Content Extension — iOS-এর একটি app এক্সটেনশন যা push-বিজ্ঞপ্তি প্রদর্শনের স্ট্যান্ডার্ড টেমপ্লেটকে একটি কাস্টম UIView দিয়ে প্রতিস্থাপন করে। সাধারণ বিজ্ঞপ্তির বিপরীতে, যেখানে কন্টেন্ট শিরোনাম, উপশিরোনাম এবং বডির মধ্যে সীমাবদ্ধ, এক্সটেনশনটি যেকোনো UIKit ইন্টারফেস প্রদর্শন করতে দেয়: স্থানাঙ্ক সহ ম্যাপ, গ্রাফ, ছবির গ্যালারি বা ইনপুট ফর্ম।
যখন iOS নির্দিষ্ট categoryIdentifier সহ একটি push-বিজ্ঞপ্তি পায়, তখন সিস্টেম পরীক্ষা করে দেখে যে এই ক্যাটাগরির জন্য কোনো এক্সটেনশন নিবন্ধিত আছে কিনা। থাকলে — সিস্টেম একটি আলাদা প্রক্রিয়ায় এক্সটেনশন চালু করে এবং এতে বিজ্ঞপ্তির কন্টেন্ট পাঠায়। এক্সটেনশন স্ট্যান্ডার্ডের পরিবর্তে নিজস্ব ইন্টারফেস প্রদর্শন করে। ব্যবহারকারী মূল অ্যাপ্লিকেশন না খুলেই কাস্টম ইন্টারফেসের সাথে ইন্টারঅ্যাক্ট করে।
Notification Content Extension-কে Notification Service Extension-এর সাথে গুলিয়ে ফেলা গুরুত্বপূর্ণ নয়। Service Extension বিজ্ঞপ্তি দেখানোর আগে কন্টেন্ট প্রক্রিয়া করে (অ্যাটাচমেন্ট ডাউনলোড, ডিক্রিপ্ট করা)। Content Extension প্রস্তুত কন্টেন্ট পাওয়ার পর ইন্টারফেস প্রতিস্থাপন করে। দুটি এক্সটেনশন একসঙ্গে কাজ করতে পারে: Service Extension ডেটা প্রস্তুত করে, Content Extension তা প্রদর্শন করে।
| বৈশিষ্ট্য | Content Extension | Service Extension |
|---|---|---|
| উদ্দেশ্য | কাস্টম বিজ্ঞপ্তি UI | প্রদর্শনের আগে কন্টেন্ট পরিবর্তন |
| সময়সীমা | যতক্ষণ ব্যবহারকারী বিজ্ঞপ্তি দেখে | পটভূমিতে 30 সেকেন্ড পর্যন্ত |
| ইন্টারফেস | সম্পূর্ণ UIKit UIView | কোনো ইন্টারফেস নেই |
| API | UNNotificationContentExtension | UNNotificationServiceExtension |
Notification Content Extension সীমিত রিসোর্স সহ একটি বিচ্ছিন্ন প্রক্রিয়ায় কাজ করে। এক্সটেনশনের App Group ব্যতীত NSUserDefaults-এর মাধ্যমে মূল অ্যাপ্লিকেশনের স্টোরেজে অ্যাক্সেস নেই। এক্সটেনশনের আকার আনপ্যাক করা অবস্থায় 50 MB-এর মধ্যে সীমাবদ্ধ। কন্টেন্ট প্রদর্শনের সময়ও সীমিত — যদি এক্সটেনশন একটি যুক্তিসঙ্গত সময়ের মধ্যে আপডেট সম্পূর্ণ না করে, সিস্টেম এটি বন্ধ করে দেয়।
এক্সটেনশন তৈরি করতে Xcode-এ Notification Content Extension টাইপের একটি নতুন target যোগ করতে হবে। Xcode স্বয়ংক্রিয়ভাবে MainInterface.storyboard তৈরি করবে একটি কন্ট্রোলার সহ যা UIViewController থেকে উত্তরাধিকার সূত্রে প্রাপ্ত এবং UNNotificationContentExtension বাস্তবায়ন করে।
Xcode-এ File → New → Target → Notification Content Extension নির্বাচন করুন। এক্সটেনশনের নাম, ভাষা (Swift বা Objective-C) উল্লেখ করুন এবং নিশ্চিত করুন যে প্রকল্পটি একই ডেভেলপার টিমের সাথে সংযুক্ত। target তৈরি করার পরে তিনটি ফাইল সহ একটি ফোল্ডার দেখা যাবে: MainInterface.storyboard, Info.plist এবং কন্ট্রোলার ফাইল।
এক্সটেনশনের Info.plist-এ অবশ্যই UNNotificationExtensionCategory কী সহ NSExtensionAttributes অ্যারে উল্লেখ করতে হবে। এই অ্যারেতে বিজ্ঞপ্তি ক্যাটাগরির আইডেন্টিফায়ার থাকে যার জন্য এক্সটেনশন সক্রিয় হবে। ঐচ্ছিক কী UNNotificationExtensionInitialContentSizeRatio সঠিক অবস্থানের জন্য কাস্টম ইন্টারফেসের প্রাথমিক আকৃতি অনুপাত নির্ধারণ করে।
target-এক্সটেনশনে পরিষ্কার আর্কিটেকচার বজায় রাখার পরামর্শ দেওয়া হয়: কন্ট্রোলারের জন্য আলাদা ফোল্ডার, কাস্টম View-এর জন্য আলাদা। যেহেতু এক্সটেনশন একটি পৃথক বাইনারি, মূল অ্যাপ্লিকেশনের কোড সরাসরি অ্যাক্সেসযোগ্য নয়। কোড ভাগ করে ব্যবহারের জন্য একটি পৃথক framework তৈরি করুন অথবা ডেটার জন্য App Group ব্যবহার করুন।
UNNotificationContentExtension — প্রোটোকল যা Notification Content Extension-এর কন্ট্রোলারকে বাস্তবায়ন করতে হবে। একমাত্র বাধ্যতামূলক মেথড — didReceive(_:with:), যা বিজ্ঞপ্তি পাওয়ার সময় কল হয়। কন্ট্রোলার notification এবং প্রস্তুত view controller পায় যা ডেটা দিয়ে আপডেট করতে হবে।
এক্সটেনশন কন্ট্রোলারকে UIViewController থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হতে হবে এবং UNNotificationContentExtension বাস্তবায়ন করতে হবে। Storyboard বা xib এই কন্ট্রোলারের সাথে সংযুক্ত থাকে। বিজ্ঞপ্তি প্রাপ্তির পর didReceive মেথড কন্টেন্ট পাঠায় এবং কন্ট্রোলার তার views আপডেট করে।
import UIKit
import UserNotifications
import UserNotificationsUI
class CustomNotificationViewController: UIViewController {
@IBOutlet var titleLabel: UILabel!
@IBOutlet var customImageView: UIImageView!
func didReceive(
notification: UNNotification
) {
let content = notification.request.content
titleLabel.text = content.title
loadAttachment(content.attachments.first)
}
private func loadAttachment(attachment: UNNotificationAttachment?) {
guard let url = attachment?.URL else { return }
if let image = UIImage(contentsOfFile: url.path) {
customImageView.image = image
}
}
}
extension CustomNotificationViewController: UNNotificationContentExtension {
func didReceive(
notification: UNNotification
) {
didReceive(notification: notification)
}
}
সিস্টেম Info.plist-এ UNNotificationExtensionInitialContentSizeRatio কী এবং বর্তমান কন্টেন্টের ভিত্তিতে কাস্টম ইন্টারফেসের আকার নির্ধারণ করে। ন্যূনতম প্রাথমিক আকারের জন্য এই কী 0.1 এ সেট করার পরামর্শ দেওয়া হয়, এবং কন্টেন্ট লোড হওয়ার পর preferredContentSize-এর মাধ্যমে আকার পরিবর্তন করুন।
Notification Content Extension ইন্টারফেস তৈরিতে সম্পূর্ণ স্বাধীনতা দেয়। যেকোনো UIKit উপাদান ব্যবহার করা যেতে পারে: UITableView, MKMapView, WKWebView, UIStackView। তবে বিজ্ঞপ্তির সীমিত জায়গা বিবেচনা করা এবং পারফরম্যান্স অপ্টিমাইজ করা গুরুত্বপূর্ণ।
একটি জনপ্রিয় ব্যবহারের ক্ষেত্র — অবস্থান সহ ম্যাপ প্রদর্শন। এর জন্য এক্সটেনশনের Storyboard-এ MKMapView যোগ করা হয় এবং কন্ট্রোলার বিজ্ঞপ্তির কন্টেন্ট থেকে স্থানাঙ্ক পাঠায়। এক্সটেনশনের target-এ MapKit যোগ করতে ভুলবেন না। ম্যাপ ব্যবহার করার সময় এক্সটেনশনের মেমরি সীমা বিবেচনা করুন — জটিল টাইল লোডিং উপলব্ধ রিসোর্স অতিক্রম করতে পারে।
Notification Content Extension UIView অ্যানিমেশন সমর্থন করে, যার মধ্যে আকার পরিবর্তন, স্থানান্তর এবং উপাদানের স্বচ্ছতা অন্তর্ভুক্ত। বিজ্ঞপ্তির বর্ধিত মোডে প্রবেশ করার সময় কন্টেন্ট উপস্থিতির অ্যানিমেশন শুরু করা যেতে পারে। অ্যানিমেশনগুলি সংক্ষিপ্ত হওয়া উচিত (0.5 সেকেন্ড পর্যন্ত) এবং ব্যবহারকারীর বিজ্ঞপ্তির সাথে ইন্টারঅ্যাকশনে বাধা দেওয়া উচিত নয়। অসীম অ্যানিমেশন এড়িয়ে চলুন — এগুলি ব্যাটারি খরচ করে এবং পারফরম্যান্স কমিয়ে দেয়।
যেহেতু এক্সটেনশন একটি পূর্ণাঙ্গ UIViewController, আপনি জেসচার এবং ট্যাপ হ্যান্ডলার যোগ করতে পারেন। UIKit gestures (UITapGestureRecognizer, UIButton) স্ট্যান্ডার্ডভাবে কাজ করে। অ্যাপ্লিকেশন খোলার প্রয়োজন এমন কর্মের জন্য এক্সটেনশন ডেলিগেট বা userNotificationCenter ব্যবহার করুন। ইন্টারঅ্যাকটিভ উপাদানগুলি সীমিত জায়গায় আরামদায়ক ট্যাপের জন্য যথেষ্ট বড় হওয়া উচিত — Apple-এর সুপারিশ অনুযায়ী ন্যূনতম touch target আকার 44x44 পয়েন্ট।
মিডিয়া কন্টেন্ট — Notification Content Extension-এর মূল ক্ষমতা। বিজ্ঞপ্তিতে ছবি, GIF, অডিও এবং ভিডিও থাকতে পারে যা কাস্টম ইন্টারফেসে প্রদর্শিত হয়। অ্যাটাচমেন্টগুলি UNNotificationAttachment-এর মাধ্যমে বিতরণ করা হয়, যা সার্ভার payload-এর মাধ্যমে অথবা ডাউনলোডের পর Notification Service Extension দ্বারা যোগ করা যেতে পারে। JPEG, PNG, MPEG-4 এবং MP3 ফর্ম্যাট সমর্থিত।
ছবি প্রদর্শনের জন্য বিজ্ঞপ্তির কন্টেন্ট থেকে UNNotificationAttachment নেওয়া এবং লোকাল URL থেকে লোড করা যথেষ্ট। মনে রাখবেন যে এক্সটেনশনের শুধুমাত্র লোকাল ফাইলে অ্যাক্সেস আছে — দূরবর্তী রিসোর্স আগেই Service Extension দ্বারা ডাউনলোড করা আবশ্যক। সর্বোচ্চ আকার — iOS 15+ এ 50 MB, পরবর্তী আপডেটগুলিতে সীমা পরিবর্তিত হয়। একাধিক ছবি সমর্থনের জন্য বিভিন্ন আইডেন্টিফায়ার সহ UNNotificationAttachment ব্যবহার করুন এবং UIPageViewController-এর মাধ্যমে প্রদর্শন করুন।
কাস্টম ইন্টারফেসে ছবি প্রদর্শনের জন্য এক্সটেনশন বিজ্ঞপ্তির কন্টেন্ট থেকে UNNotificationAttachment পায় এবং লোকাল URL থেকে লোড করে। অ্যাটাচমেন্টটি আগেই Notification Service Extension দ্বারা ডাউনলোড করা আবশ্যক — Content Extension-এর নেটওয়ার্ক অ্যাক্সেস নেই। সর্বোচ্চ মিডিয়া অ্যাটাচমেন্ট আকার — iOS 15+ এ 50 MB, পূর্ববর্তী সংস্করণে সীমা ছিল 10 MB। এক্সটেনশনের অ্যাটাচমেন্টের অনুপস্থিতি সঠিকভাবে পরিচালনা করা উচিত এবং fallback ইন্টারফেস প্রদর্শন করা উচিত। কম রেজোলিউশনের ছবি প্রিলোড করার জন্য Service Extension দ্বারা অ্যাটাচমেন্টের আগে তৈরি থাম্বনেইল সংস্করণ ব্যবহার করুন।
iOS AVPlayerLayer-এর মাধ্যমে Notification Content Extension-এ ভিডিও প্লেব্যাক সমর্থন করে। এক্সটেনশন বিজ্ঞপ্তির মধ্যে নিয়ন্ত্রণ বোতাম সহ একটি ভিডিও প্লেয়ার প্রদর্শন করতে পারে। এটি বিশেষ করে নজরদারি অ্যাপ্লিকেশন, স্ট্রিমিং বা কন্টেন্ট প্রিভিউর জন্য উপযোগী। অটোপ্লে শব্দ ছাড়া অনুমোদিত যদি ব্যবহারকারী এই বিজ্ঞপ্তিতে মিডিয়া কন্টেন্ট আশা করে। ভিডিও প্লেয়ার বাস্তবায়নের সময় নিয়ন্ত্রণ উপাদান যোগ করুন: play/pause, প্রোগ্রেস বার এবং বন্ধ বোতাম। নিশ্চিত করুন যে ভিডিও স্বয়ংক্রিয়ভাবে শব্দ সহ শুরু না হয় — এটি Apple-এর ব্যবহারকারী অভিজ্ঞতা সুপারিশ লঙ্ঘন করে। একাধিক ছবির স্লাইডশোর জন্য UIView.transition-এর মাধ্যমে পৃষ্ঠা উল্টানোর ট্রানজিশন বিকল্প সহ অ্যানিমেটেড ট্রানজিশন ব্যবহার করুন।
Notification Content Extension প্রায় 50 MB মেমরি সীমা সহ একটি সীমিত পরিবেশে কাজ করে। পারফরম্যান্স অপ্টিমাইজ করতে ছবির লেজি লোডিং ব্যবহার করুন, প্রধান থ্রেডে ভারী গণনা এড়িয়ে চলুন এবং সহজ কনস্ট্রেন্ট সহ Auto Layout প্রয়োগ করুন। ছবি প্রক্রিয়াকরণ বা ডেটা পার্সিংয়ের মতো ভারী অপারেশনগুলি ব্যাকগ্রাউন্ড কিউতে (DispatchQueue.global) সম্পাদন করুন। মেমরি সীমা অতিক্রম করলে সিস্টেম এক্সটেনশনটি বন্ধ করবে এবং ব্যবহারকারী স্ট্যান্ডার্ড বিজ্ঞপ্তি দেখতে পাবেন। প্রকাশের আগে Instruments (Allocations এবং Time Profiler) এর মাধ্যমে এক্সটেনশন প্রোফাইলিং করার এবং বিভিন্ন iOS সংস্করণের প্রকৃত ডিভাইসে মেমরি ব্যবহার পরীক্ষা করার পরামর্শ দেওয়া হয়।
সচরাচর জিজ্ঞাসিত প্রশ্ন
হ্যাঁ, iOS 16 থেকে Notification Content Extension UIHostingController-এর মাধ্যমে SwiftUI সমর্থন করে। তবে জটিল ইন্টারফেসের জন্য UIKit আরও স্থিতিশীল পছন্দ থাকে কারণ এক্সটেনশনে SwiftUI-এর সীমিত সমর্থন রয়েছে।
পরীক্ষা করুন যে বিজ্ঞপ্তির payload-এর categoryIdentifier এক্সটেনশনের Info.plist-এর UNNotificationExtensionCategory-এর সাথে মেলে। এছাড়াও নিশ্চিত করুন যে এক্সটেনশন main app target-এ যুক্ত করা হয়েছে এবং সঠিকভাবে স্বাক্ষরিত হয়েছে।
App Group ব্যবহার করুন — শেয়ার্ড স্টোরেজ (UserDefaults suite) বা ফাইল কন্টেইনার। মূল অ্যাপ্লিকেশন এবং এক্সটেনশন একই ডেভেলপার গ্রুপে থাকতে হবে এবং App Groups ক্যাপাবিলিটি সক্রিয় থাকতে হবে।
মিডিয়া নিয়ন্ত্রণের জন্য didReceive(_:with:) with UNNotificationContentExtensionMediaPlayPauseButtonType মেথড ব্যবহার করুন অথবা ডেলিগেটের মাধ্যমে আপডেটের অনুরোধ করুন। নতুন বিজ্ঞপ্তি ছাড়া সম্পূর্ণ কন্টেন্ট আপডেট সম্ভব নয়।
Xcode-এ এক্সটেনশনের target নির্বাচন করুন এবং সিমুলেটরে চালান। সাধারণ অ্যাপ্লিকেশনের মতো lldb এবং breakpoints ব্যবহার করুন। পরীক্ষার জন্য Firebase Console-এর মাধ্যমে push-বিজ্ঞপ্তি পাঠান অথবা স্থানীয়ভাবে Pusher-এর মাধ্যমে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন