Notification Service Extension — পুশ বিজ্ঞপ্তি প্রক্রিয়াকরণ কীভাবে কাজ করে

লেখক: IT Sectr প্রকাশিত: 2026-06-16 পড়ার সময়: 9 মিনিট

Notification Service Extension একটি iOS এক্সটেনশন যা পুশ বিজ্ঞপ্তি পাওয়ার সাথে সাথেই কিন্তু ব্যবহারকারীকে দেখানোর আগেই তা আটকায়। এক্সটেনশনটি এনক্রিপ্টেড পেলোড ডিক্রিপ্ট করতে পারে, মিডিয়া ফাইল ডাউনলোড এবং সংযুক্ত করতে পারে এবং রিয়েল টাইমে বিজ্ঞপ্তির টেক্সট বা শিরোনাম পরিবর্তন করতে পারে। Apple ডেভেলপার ডকুমেন্টেশন (2025) অনুসারে, এক্সটেনশন সক্রিয় করতে সার্ভারকে বিজ্ঞপ্তি অ্যাট্রিবিউটে mutable-content:1 কী পাঠাতে হবে — এটি UNNotificationServiceExtension চালানোর একমাত্র শর্ত।

মূল বিষয়

  • Notification Service Extension একটি iOS ডিভাইসে ব্যবহারকারীকে দেখানোর আগে পুশ বিজ্ঞপ্তি পরিবর্তন করে
  • এক্সটেনশন সক্রিয় করতে সার্ভার বিজ্ঞপ্তি পেলোডে mutable-content:1 প্যারামিটার প্রয়োজন
  • মূল প্রোটোকল হল UNNotificationServiceExtension যার পদ্ধতি didReceive(_:withContentHandler:) এবং serviceExtensionTimeWillExpire()
  • এক্সটেনশন নেটওয়ার্ক থেকে মিডিয়া সংযুক্তি ডাউনলোড করতে পারে এবং UNNotificationAttachment-এর মাধ্যমে বিজ্ঞপ্তির সাথে সংযুক্ত করতে পারে
  • নির্বাহের সময় সীমিত — সিস্টেম একটি বিজ্ঞপ্তির সম্পূর্ণ প্রক্রিয়াকরণের জন্য প্রায় 30 সেকেন্ড বরাদ্দ করে

Notification Service Extension কী

Notification Service Extension iOS-এ একটি অ্যাপ এক্সটেনশন যা ডিভাইস পাশে আগত পুশ বিজ্ঞপ্তি আটকায় এবং ব্যবহারকারী দেখার আগে এর বিষয়বস্তু পরিবর্তন করতে দেয়। এটি একমাত্র ধরনের বিজ্ঞপ্তি এক্সটেনশন যা প্রদর্শনের পরিবর্তে বিষয়বস্তুর সাথে কাজ করে।

Notification Content Extension থেকে মূল পার্থক্য: Service Extension বিজ্ঞপ্তি দেখানোর আগে কাজ করে এবং শিরোনাম, বডি, সাউন্ড ফাইল এবং সংযুক্তি পরিবর্তন করতে পারে। Content Extension দেখানোর পরে কাজ করে এবং শুধুমাত্র প্রস্তুত বিজ্ঞপ্তির ভিজ্যুয়াল উপস্থাপনা পরিচালনা করে। এই দুটি এক্সটেনশন একসাথে কাজ করতে পারে: Service Extension একটি ছবি ডাউনলোড করে, এবং Content Extension এটি একটি কাস্টম ইন্টারফেসে প্রদর্শন করে।

এক্সটেনশনটি aps অভিধানে mutable-content:1 অ্যাট্রিবিউট সহ পুশ বিজ্ঞপ্তি পাওয়ার পর স্বয়ংক্রিয়ভাবে সক্রিয় হয়। iOS ব্যাকগ্রাউন্ডে এক্সটেনশন চালু করে, এটিকে মূল UNNotificationRequest পাঠায় এবং প্রদর্শনের জন্য পরিবর্তিত সংস্করণের অপেক্ষা করে।

পুশ বিজ্ঞপ্তিগুলির তাৎক্ষণিক প্রক্রিয়াকরণ

UNNotificationServiceExtension মূল বিষয়বস্তু সহ সম্পূর্ণ UNNotificationRequest গ্রহণ করে। এক্সটেনশনটি UNNotificationContent-এর যেকোনো ক্ষেত্র পরিবর্তন করতে পারে: title, subtitle, body, userInfo, attachments এবং sound। বিজ্ঞপ্তি দেখানোর আগে পরিবর্তনগুলি প্রয়োগ করা হয়।

সাধারণ ব্যবহারের পরিস্থিতি

বিষয়বস্তু ডিক্রিপশন — যদি পুশ বিজ্ঞপ্তিতে এনক্রিপ্টেড পেলোড থাকে, এক্সটেনশনটি প্রদর্শনের আগে এটি ডিক্রিপ্ট করে। মিডিয়া ডাউনলোড — বিজ্ঞপ্তির সাথে একটি ছবি বা ভিডিও সংযুক্ত করা। স্থানীয়করণ — ডিভাইসের আঞ্চলিক সেটিংস অনুযায়ী বিজ্ঞপ্তি টেক্সট অভিযোজিত করা। ডেটা সমৃদ্ধকরণ — স্থানীয় স্টোরেজ বা ক্যাশ থেকে অতিরিক্ত তথ্য যোগ করা।

Apple-এর মতে, অ্যাপগুলির মধ্যে সবচেয়ে সাধারণ পরিস্থিতি হল সমৃদ্ধ মিডিয়া বিজ্ঞপ্তির জন্য ছবি ডাউনলোড। সার্ভার পেলোডে একটি ছবির URL পাঠায়, এক্সটেনশনটি এটি একটি অস্থায়ী ডিরেক্টরিতে ডাউনলোড করে এবং একটি UNNotificationAttachment তৈরি করে, যা সিস্টেম একটি মানক বা কাস্টম ইন্টারফেসে প্রদর্শন করে।

টেক্সট এবং শিরোনাম পরিবর্তন

এক্সটেনশনটি সম্পূর্ণরূপে বিজ্ঞপ্তির টেক্সট পুনরায় লিখতে পারে, শিরোনাম প্রতিস্থাপন করতে পারে বা একটি উপশিরোনাম যোগ করতে পারে। উদাহরণস্বরূপ, একটি মেসেঞ্জার অ্যাপ একটি এনক্রিপ্টেড বিজ্ঞপ্তি গ্রহণ করতে পারে, এক্সটেনশনে এটি ডিক্রিপ্ট করতে পারে এবং পাঠযোগ্য টেক্সট প্রদর্শন করতে পারে। অথবা একটি সংবাদ অ্যাপ প্রদর্শনের আগে উপশিরোনামে একটি সংবাদ বিভাগ যোগ করতে পারে।

swift
override func didReceive(
    _ request: UNNotificationRequest,
    withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
) {
    let content = request.content.mutableCopy()
        as! UNMutableNotificationContent
    if let imageURL = content.userInfo["media-url"]
        as? String {
        downloadAndAttach(imageURL: imageURL,
            content: content,
            handler: contentHandler)
    }
}

UNNotificationServiceExtension প্রোটোকল

UNNotificationServiceExtension হল বেস ক্লাস যা থেকে Service Extension উত্তরাধিকার সূত্রে প্রাপ্ত হয়। ক্লাসটি দুটি জীবনচক্র পদ্ধতি সংজ্ঞায়িত করে: didReceive(_:withContentHandler:) — প্রধান প্রক্রিয়াকরণ পদ্ধতি, এবং serviceExtensionTimeWillExpire() — টাইমআউট হ্যান্ডলার।

পদ্ধতি didReceive:withContentHandler:

didReceive(_:withContentHandler:) একটি বিজ্ঞপ্তি প্রাপ্ত হলে কল করা হয়। এক্সটেনশনটি একটি UNNotificationRequest এবং contentHandler ক্লোজার গ্রহণ করে, যা পরিবর্তিত UNMutableNotificationContent-এর সাথে কল করতে হবে। এক্সটেনশনটি contentHandler কল করতে বাধ্য — যদি না করে, iOS টাইমআউট শেষ হওয়ার পরে মূল বিজ্ঞপ্তি দেখাবে।

গুরুত্বপূর্ণ: এক্সটেনশনটি একবারে শুধুমাত্র একটি বিজ্ঞপ্তি প্রক্রিয়া করতে পারে। যদি একসাথে একাধিক বিজ্ঞপ্তি আসে, iOS প্রতিটির জন্য পৃথক এক্সটেনশন ইনস্ট্যান্স তৈরি করে। ক্রমিক প্রক্রিয়াকরণের জন্য গ্লোবাল স্টেট ব্যবহার করা যাবে না।

পদ্ধতি serviceExtensionTimeWillExpire:

serviceExtensionTimeWillExpire() সিস্টেম দ্বারা কল করা হয় যখন বাকি নির্বাহের সময় শেষ হতে চলেছে। এই পদ্ধতিতে, আপনাকে অবশ্যই সাথে সাথে contentHandler কল করতে হবে সেই সময়ে প্রস্তুত যেকোনো বিষয়বস্তু সহ — এমনকি যদি মিডিয়া ফাইল ডাউনলোড শেষ না হয়। আপনি যদি এই পদ্ধতিতে contentHandler কল না করেন, iOS মূল বিজ্ঞপ্তি দেখাবে।

এই পদ্ধতিতে ন্যূনতম গ্রহণযোগ্য বিষয়বস্তু সংরক্ষণ করার পরামর্শ দেওয়া হয় — উদাহরণস্বরূপ, টেক্সট এবং শিরোনাম সহ একটি বিজ্ঞপ্তি কিন্তু ছবি ছাড়া যার ডাউনলোড সময়মতো সম্পূর্ণ হয়নি।

এনক্রিপশন এবং মিডিয়া সংযুক্তি

UNNotificationAttachment একটি অবজেক্ট যা বিজ্ঞপ্তির সাথে একটি মিডিয়া ফাইল সংযুক্ত করার জন্য এক্সটেনশন দ্বারা তৈরি করা হয়। এক্সটেনশনটি নেটওয়ার্ক থেকে ফাইল ডাউনলোড করে, এটি একটি অস্থায়ী ডিরেক্টরিতে সংরক্ষণ করে এবং বিষয়বস্তুর ধরন উল্লেখ করে একটি UNNotificationAttachment তৈরি করে।

ডাউনলোড করা ফাইল থেকে একটি সংযুক্তি তৈরি করা

UNNotificationAttachment init(identifier:url:options:) ইনিশিয়ালাইজার ব্যবহার করে তৈরি করা হয়। URL এক্সটেনশনের জন্য অ্যাক্সেসযোগ্য অস্থায়ী ডিরেক্টরিতে একটি স্থানীয় ফাইলের দিকে নির্দেশ করতে হবে। তৈরি করার পরে, সংযুক্তিটি UNMutableNotificationContent-এর attachments অ্যারেতে যোগ করা হয়।

Apple ডাউনলোডের জন্য ব্যাকগ্রাউন্ড কনফিগারেশন সহ URLSession ব্যবহার করার পরামর্শ দেয় — স্ট্যান্ডার্ড URLSession ব্যবহার করলে, ডাউনলোড থ্রেড ব্লক করে এবং 30 সেকেন্ডের সীমা থেকে সময় খরচ করে। ব্যাকগ্রাউন্ড URLSession এক্সটেনশন শেষ হওয়ার পরেও ডাউনলোড চালিয়ে যায় এবং ফলাফলটি পরবর্তী লঞ্চে ব্যবহার করা যেতে পারে।

এনক্রিপ্টেড পেলোড ডিক্রিপ্ট করা

যদি সার্ভার একটি এনক্রিপ্টেড বিজ্ঞপ্তি পাঠায়, এক্সটেনশনটিকে contentHandler কল করার আগে পেলোড ডিক্রিপ্ট করতে হবে। ডিক্রিপশনে সাধারণত Keychain বা App Group থেকে কী অনুরোধ করা, CommonCrypto-এর মাধ্যমে ডিক্রিপ্ট করা এবং বিজ্ঞপ্তির body বা userInfo প্রতিস্থাপন করা জড়িত। ডিক্রিপশন ত্রুটির ক্ষেত্রে, আপনার মূল বিষয়বস্তু সহ contentHandler কল করা উচিত — যাতে ব্যবহারকারী অন্তত দেখে যে একটি বিজ্ঞপ্তি এসেছে, যদিও অপাঠ্য।

swift
func downloadAndAttach(
    imageURL: String,
    content: UNMutableNotificationContent,
    handler: @escaping (UNNotificationContent) -> Void
) {
    let task = URLSession.shared.dataTask(with:
        URL(string: imageURL)!) { data, _, _ in
        let url = FileManager.default
            .temporaryDirectory
            .appendingPathComponent("image.jpg")
        try? data?.write(to: url)
        let attachment = try? UNNotificationAttachment(
            identifier: "image", url: url)
        content.attachments = [attachment].compactMap { $0 }
        handler(content)
    }
    task.resume()
}

টাইমআউট এবং ফলব্য্যাক পদ্ধতি

Notification Service Extension কঠোর সময়সীমার মধ্যে কাজ করে। iOS একটি নির্দিষ্ট নির্বাহের সময় বরাদ্দ করে — সক্রিয়করণ থেকে প্রায় 30 সেকেন্ড। যদি এক্সটেনশনটি এই সময়ের মধ্যে contentHandler কল না করে, সিস্টেম জোর করে প্রক্রিয়াটি শেষ করে এবং মূল বিজ্ঞপ্তি অপরিবর্তিত দেখায়।

গ্রেসফুল ডিগ্রেডেশন কৌশল

বহু-স্তরের ফলব্যাক বাস্তবায়নের পরামর্শ দেওয়া হয়: প্রথমে মিডিয়া ডাউনলোড করার চেষ্টা করুন, সফল হলে সম্পূর্ণ বিষয়বস্তু সহ contentHandler কল করুন; ব্যর্থ হলে টেক্সট সহ কিন্তু মিডিয়া ছাড়া contentHandler কল করুন; গুরুতর ত্রুটির ক্ষেত্রে মূল বিষয়বস্তু প্রেরণ করুন। এই পদ্ধতি নিশ্চিত করে যে ব্যবহারকারী সবসময় একটি বিজ্ঞপ্তি দেখবে, ফাঁকা স্ক্রিন নয়।

Apple-এর মতে, টাইমআউটের সবচেয়ে সাধারণ কারণ হল ধীর সংযোগে বড় মিডিয়া ফাইল ডাউনলোড। ঝুঁকি কমাতে, সার্ভারে ছবির আকার অপ্টিমাইজ করার পরামর্শ দেওয়া হয় — পূর্ণ রেজোলিউশনের পরিবর্তে 300 KB পর্যন্ত প্রিভিউ পাঠান। পূর্ণ আকারের ছবি অ্যাপ খোলার সময় ডাউনলোড করা উচিত।

পারফরম্যান্স মনিটরিং

এক্সটেনশন টাইমআউট এবং ত্রুগুলি ট্র্যাক করতে, আপনি ইউনিফাইড লগিং সিস্টেমে ডায়াগনস্টিক বার্তা রেকর্ড করতে os_log ব্যবহার করতে পারেন। যদিও এক্সটেনশনে সরাসরি ফাইল লগিং করা কঠিন, os_log ডেভেলপার ডিভাইসে Console.app-এর মাধ্যমে পারফরম্যান্স বিশ্লেষণের অনুমতি দেয়। Apple প্রতিটি didReceive কলে মেট্রিক্স যোগ করার পরামর্শ দেয় — ডাউনলোড সময়, ফাইলের আকার, অপারেশনের ফলাফল।

swift
override func serviceExtensionTimeWillExpire() {
    let fallback = bestEffortContent as?
        UNMutableNotificationContent
        ?? request.content.mutableCopy()
        as! UNMutableNotificationContent
    contentHandler(fallback)
}

সচরাচর জিজ্ঞাসিত প্রশ্ন

সার্ভার কীভাবে Notification Service Extension সক্রিয় করে?

সার্ভার পুশ বিজ্ঞপ্তির aps অভিধানে mutable-content:1 কী যোগ করে। এই প্যারামিটার ছাড়া, সিস্টেম এক্সটেনশন উপেক্ষা করে এবং মানক বিজ্ঞপ্তি দেখায়।

mutable-content ছাড়া এক্সটেনশন ব্যবহার করা যাবে?

না। mutable-content:1 Service Extension সক্রিয় করার জন্য বাধ্যতামূলক শর্ত। যদি কী অনুপস্থিত বা 0-এ সেট থাকে, এক্সটেনশন কল না করেই বিজ্ঞপ্তি প্রদর্শিত হয়।

30 সেকেন্ডের সীমা অতিক্রম করলে কী happens?

iOS জোর করে এক্সটেনশন শেষ করে এবং মূল বিজ্ঞপ্তি অপরিবর্তিত দেখায়। এটি এড়াতে, ন্যূনতম গ্রহণযোগ্য বিষয়বস্তু সহ serviceExtensionTimeWillExpire() বাস্তবায়ন করুন।

এক্সটেনশনে এনক্রিপশন কীগুলি কীভাবে পাস করবেন?

App Group (শেয়ার্ড UserDefaults বা ফাইল) বা অ্যাপ এবং এক্সটেনশনের মধ্যে শেয়ার্ড অ্যাক্সেস সহ Keychain-এর মাধ্যমে। বিজ্ঞপ্তি পেলোডে সরাসরি কী পাঠানো নিরাপদ নয়।

Service Extension-এ কতগুলি মিডিয়া ফাইল সংযুক্ত করা যাবে?

প্রতি বিজ্ঞপ্তিতে 4টি সংযুক্তি পর্যন্ত, প্রতিটি 50 MB পর্যন্ত। সংযুক্তির মোট আকার ডাউনলোডের সময়কে প্রভাবিত করে — যত বেশি ফাইল, টাইমআউটের ঝুঁকি তত বেশি।

সারসংক্ষেপ

  • Notification Service Extension ডিভাইসে পুশ বিজ্ঞপ্তিগুলি প্রদর্শনের আগে পরিবর্তন করে, টেক্সট, শিরোনাম এবং মিডিয়া সংযুক্তি পরিবর্তন করে
  • সক্রিয়করণের জন্য aps অভিধানে mutable-content:1 কী প্রয়োজন — এটি ছাড়া এক্সটেনশন চালু হয় না
  • মূল প্রোটোকল UNNotificationServiceExtension প্রক্রিয়াকরণের জন্য didReceive এবং serviceExtensionTimeWillExpire পদ্ধতি সংজ্ঞায়িত করে
  • এক্সটেনশন নেটওয়ার্ক থেকে মিডিয়া ডাউনলোড করতে পারে, পেলোড ডিক্রিপ্ট করতে পারে এবং বিজ্ঞপ্তিতে 4টি সংযুক্তি পর্যন্ত যোগ করতে পারে
  • নির্বাহের সময় প্রায় 30 সেকেন্ড সীমিত — অতিক্রম করলে, iOS মূল বিজ্ঞপ্তি দেখায়
  • ফাঁকা বিজ্ঞপ্তি প্রতিরোধের জন্য বহু-স্তরের ফলব্য্যাক সহ গ্রেসফুল ডিগ্রেডেশন কৌশল সুপারিশ করা হয়

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন