Notification Service Extension: এটি কী, iOS-এ প্রদর্শনের আগে বিষয়বস্তু প্রক্রিয়াকরণ

লেখক: IT Sectr প্রকাশিত: 2026-03-21 পড়ার সময়: 8 মিনিট

Notification Service Extension হল একটি iOS এক্সটেনশন যা ব্যবহারকারীকে দেখানোর আগে push বিজ্ঞপ্তিকে আটকায় এবং বিষয়বস্তু পরিবর্তনের অনুমতি দেয়। এক্সটেনশন এনক্রিপ্টেড ডেটা ডিক্রিপ্ট করতে পারে, মিডিয়া অ্যাটাচমেন্ট ডাউনলোড করতে পারে, টেক্সট পরিবর্তন করতে পারে বা কাস্টম ফিল্ড যোগ করতে পারে। Apple Developer, 2025 অনুযায়ী, Notification Service Extension-এর ব্যাকগ্রাউন্ডে কাজ সম্পন্ন করার জন্য 30 সেকেন্ড পর্যন্ত সময় আছে।

মূল বিষয়

  • Notification Service Extension — প্রদর্শনের আগে push বিজ্ঞপ্তি প্রক্রিয়াকরণের জন্য iOS এক্সটেনশন।
  • এক্সটেনশন UNNotificationServiceExtension থেকে ইনহেরিট করে এবং didReceive মেথড ইমপ্লিমেন্ট করে।
  • ডেটা ডাউনলোড এবং প্রক্রিয়াকরণের জন্য 30 সেকেন্ড পর্যন্ত ব্যাকগ্রাউন্ড এক্সিকিউশন উপলব্ধ।
  • প্রধান ব্যবহারের ক্ষেত্র: payload ডিক্রিপশন, ইমেজ এবং ভিডিও ডাউনলোড, বিষয়বস্তু বৈধতা।
  • এক্সটেনশন বিজ্ঞপ্তি প্রদর্শন বিলম্বিত করতে পারে বা contentHandler-এর মাধ্যমে সম্পূর্ণ বাতিল করতে পারে।

Notification Service Extension কী

Notification Service Extension হল iOS-এর একটি অ্যাপ এক্সটেনশন যা push বিজ্ঞপ্তি প্রদর্শনের আগে চলে। এটি সার্ভারকে ন্যূনতম payload পাঠাতে দেয় যখন এক্সটেনশন এটি বিষয়বস্তু দিয়ে সমৃদ্ধ করে: ইমেজ ডাউনলোড করা, ডেটা ডিক্রিপ্ট করা, টেক্সট প্রতিস্থাপন করা। ব্যবহারকারী ইতিমধ্যে প্রক্রিয়াকৃত বিজ্ঞপ্তি দেখেন।

এটি কীভাবে কাজ করে

যখন iOS একটি push বিজ্ঞপ্তি পায়, সিস্টেম পরীক্ষা করে যে অ্যাপের জন্য কোনো এক্সটেনশন আছে কিনা। যদি এক্সটেনশন নিবন্ধিত থাকে, iOS এটি একটি ব্যাকগ্রাউন্ড প্রক্রিয়ায় শুরু করে এবং didReceive(_:withContentHandler:) মেথডের মাধ্যমে বিজ্ঞপ্তির বিষয়বস্তু পাঠায়। এক্সটেনশন বিষয়বস্তু প্রক্রিয়াকরণ করে এবং পরিবর্তিত বিষয়বস্তু সহ contentHandler কল করে। যদি এক্সটেনশন 30 সেকেন্ডের মধ্যে সম্পন্ন না হয়, সিস্টেম মূল বিজ্ঞপ্তি প্রদর্শন করে।

কখন Service Extension ব্যবহার করবেন

Service Extension সেই পরিস্থিতিতে প্রয়োজন যেখানে বিজ্ঞপ্তির বিষয়বস্তু ডিভাইসে প্রক্রিয়াকরণের প্রয়োজন। নিরাপদ যোগাযোগ: সার্ভার এনক্রিপ্টেড payload পাঠায়, এক্সটেনশন এটি স্থানীয়ভাবে ডিক্রিপ্ট করে। রিচ মিডিয়া বিজ্ঞপ্তি: সার্ভার একটি ইমেজ URL পাঠায়, এক্সটেনশন এটি ডাউনলোড এবং সংযুক্ত করে। ডায়নামিক স্থানীয়করণ: এক্সটেনশন ডিভাইসের ভাষায় টেক্সট প্রতিস্থাপন করে।

পরিস্থিতিএক্সটেনশন ছাড়াএক্সটেনশন সহ
ইমেজসমর্থিত নয়ডাউনলোড এবং প্রদর্শিত
এনক্রিপশনসার্ভার কী রাখেডিভাইসে ডিক্রিপশন
টেক্সটসার্ভারে হার্ডকোডেডডায়নামিক প্রতিস্থাপন
বৈধতাযাচাই করা হয় নাক্ষতিকারক বিজ্ঞপ্তি বাতিল

সীমাবদ্ধতা এবং নির্বাহের সময়

Notification Service Extension সীমিত পরিবেশে কাজ করে। সর্বোচ্চ নির্বাহের সময় 30 সেকেন্ড। এক্সটেনশনের মূল অ্যাপ স্টোরেজে (App Group ছাড়া) অ্যাক্সেস নেই। এক্সটেনশনের আকার 50 MB-তে সীমাবদ্ধ। সময় শেষ হলে, সিস্টেম মূল বিষয়বস্তু সহ contentHandler কল করে এবং সমস্ত পরিবর্তন হারিয়ে যায়।

এক্সটেনশন তৈরি এবং Info.plist কনফিগারেশন

Xcode-এ, Notification Service Extension যোগ করা হয় Notification Service Extension টাইপের একটি নতুন target তৈরি করে। Xcode একটি টেমপ্লেট NotificationService ক্লাস জেনারেট করে যা UNNotificationServiceExtension থেকে ইনহেরিট করে, দুটি মেথড সহ: didReceive এবং serviceExtensionTimeWillExpire।

প্রকল্পে target যোগ করা

Xcode-এ, File → New → Target → Notification Service Extension নির্বাচন করুন। একটি নাম লিখুন (যেমন PushNotificationService) এবং Swift ভাষা নির্বাচন করুন। নিশ্চিত করুন যে target মূল অ্যাপে যোগ করা হয়েছে এবং সঠিক স্বাক্ষর রয়েছে। তৈরি হওয়ার পর, NotificationService.swift ক্লাস একটি মৌলিক বাস্তবায়ন সহ জেনারেট হবে।

এক্সটেনশনের Info.plist কাঠামো

এক্সটেনশনের Info.plist-এ NSExtension কী থাকে যার উপ-কী NSExtensionPointIdentifier (com.apple.usernotifications.service) এবং NSExtensionPrincipalClass (আপনার কন্ট্রোলারের নাম) থাকে। অতিরিক্তভাবে, এক্সটেনশন সক্রিয়করণ নিয়ম সহ NSExtensionAttributes নির্দিষ্ট করা যেতে পারে। Xcode এই সেটিংস স্বয়ংক্রিয়ভাবে জেনারেট করে।

মৌলিক এক্সটেনশনের উদাহরণ

মৌলিক বাস্তবায়ন didReceive ওভাররাইড করে, বিজ্ঞপ্তির বিষয়বস্তু পরিবর্তন করে এবং contentHandler কল করে। যদি প্রক্রিয়াকরণে অনেক সময় লাগে, serviceExtensionTimeWillExpire কল করা হয়, যেখানে আপনাকে বর্তমান অবস্থা নিয়ে কাজ সম্পন্ন করতে হবে।

swift
import UserNotifications

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(
        request: UNNotificationRequest,
        withContentHandler handler: @escaping (UNNotificationContent) -> Void
    ) {
        contentHandler = handler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

        if let bestAttemptContent = bestAttemptContent {
            bestAttemptContent.title = "[প্রক্রিয়াকৃত] \(bestAttemptContent.title)"
            contentHandler?(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        if let contentHandler = contentHandler,
           let bestAttemptContent = bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }
}

এনক্রিপ্টেড payload ডিক্রিপ্ট করা

Service Extension-এর মূল ব্যবহারগুলির মধ্যে একটি হল ডিভাইসে বিজ্ঞপ্তির বিষয়বস্তু ডিক্রিপ্ট করা। সার্ভার একটি এনক্রিপ্টেড payload পাঠায় এবং এক্সটেনশন এটি Keychain বা App Group-এ সংরক্ষিত কী ব্যবহার করে ডিক্রিপ্ট করে। এটি নিশ্চিত করে যে ট্রান্সমিশনের সময় বিষয়বস্তু আটকানো যায় না।

নিরাপদ বিতরণ আর্কিটেকচার

সার্ভার একটি সিমেট্রিক কী (AES-256) ব্যবহার করে বিজ্ঞপ্তির বডি এনক্রিপ্ট করে। এনক্রিপশন কী ক্লায়েন্ট এবং সার্ভারের মধ্যে পূর্ব-সম্মত হয়। এক্সটেনশন payload-এর data ফিল্ডে এনক্রিপ্টেড স্ট্রিং গ্রহণ করে, এটি ডিক্রিপ্ট করে এবং বিজ্ঞপ্তির ফিল্ডে প্রতিস্থাপন করে। ব্যবহারকারীর কী প্রমাণীকরণের পর Keychain থেকে প্রাপ্ত করা যেতে পারে।

swift
override func didReceive(
    request: UNNotificationRequest,
    withContentHandler handler: @escaping (UNNotificationContent) -> Void
) {
    guard let content = request.content.mutableCopy()
        as? UNMutableNotificationContent else {
        handler(request.content)
        return
    }

    guard let encryptedData = content.userInfo["encrypted_data"]
        as? String else {
        handler(content)
        return
    }

    let decrypted = CryptoService.decrypt(encryptedData)
    content.body = decrypted.body
    content.title = decrypted.title
    handler(content)
}

নিরাপদ কী সংরক্ষণ

ডিক্রিপশন কী এক্সটেনশন কোড বা NSUserDefaults-এ সংরক্ষণ করা উচিত নয়। App Group-এর মাধ্যমে অ্যাক্সেস সহ iOS Keychain ব্যবহার করুন যাতে অ্যাপ এবং এক্সটেনশন উভয়ই কী পড়তে পারে। ক্লায়েন্টে কী জেনারেশনের জন্য AES-256-GCM অ্যালগরিদম সহ Security.framework ব্যবহার করুন।

মিডিয়া অ্যাটাচমেন্ট ডাউনলোড এবং সংযুক্ত করা

Notification Service Extension-এর সবচেয়ে সাধারণ ব্যবহার হল বিজ্ঞপ্তিতে প্রদর্শনের জন্য ইমেজ, GIF এবং ভিডিও ডাউনলোড করা। সার্ভার একটি মিডিয়া ফাইল URL পাঠায় এবং এক্সটেনশন এটি ডাউনলোড করে, একটি অস্থায়ী ডিরেক্টরিতে সংরক্ষণ করে এবং UNNotificationAttachment তৈরি করে।

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

এক্সটেনশন বিজ্ঞপ্তি payload ফিল্ড থেকে ইমেজ URL গ্রহণ করে। URLSession ব্যবহার করে, এক্সটেনশন ফাইলটি একটি অস্থায়ী ডিরেক্টরিতে ডাউনলোড করে। ডাউনলোড সম্পন্ন হওয়ার পর, স্থানীয় URL সহ UNNotificationAttachment তৈরি করা হয়। অ্যাটাচমেন্ট পরিবর্তিত বিষয়বস্তুতে পাস করা হয়। iOS স্বয়ংক্রিয়ভাবে স্ট্যান্ডার্ড ইন্টারফেস বা Notification Content Extension-এ ইমেজ প্রদর্শন করে।

swift
private func downloadAndAttachMedia(
    content: UNMutableNotificationContent,
    mediaUrl: String,
    handler: @escaping (UNNotificationContent) -> Void
) {
    guard let url = URL(string: mediaUrl) else {
        handler(content)
        return
    }

    let task = URLSession.shared.downloadTask(with: url) { localUrl, _, error in
        guard let localUrl = localUrl, error == nil else {
            handler(content)
            return
        }

        let attachment = try? UNNotificationAttachment(
            identifier: "media",
            url: localUrl,
            options: nil
        )

        if let attachment = attachment {
            content.attachments = [attachment]
        }
        handler(content)
    }
    task.resume()
}

সমর্থিত মিডিয়া ফরম্যাট

iOS বিজ্ঞপ্তিতে প্রদর্শনের জন্য নিম্নলিখিত ফরম্যাট সমর্থন করে: JPEG, PNG, GIF (স্ট্যাটিক), 50 MB পর্যন্ত MPEG-4 ভিডিও। অডিও ফাইলের জন্য, MP3, AAC এবং ALAC সমর্থিত। গুরুত্বপূর্ণ: সমস্ত মিডিয়া ফাইল 30 সেকেন্ডের সীমার মধ্যে ডাউনলোড করতে হবে। বড় ফাইলের জন্য, সার্ভার-সাইড ক্রপিং বা প্রগ্রেসিভ লোডিং সুপারিশ করা হয়।

সময় ব্যবস্থাপনা এবং ফলব্যাক পরিস্থিতি

30 সেকেন্ডের সীমা ব্যবস্থাপনা Notification Service Extension ডেভেলপ করার সময় একটি মূল কাজ। যদি এক্সটেনশন সময়মতো প্রক্রিয়াকরণ সম্পন্ন না করে, সিস্টেম serviceExtensionTimeWillExpire কল করে এবং মূল বিষয়বস্তু প্রদর্শন করে। প্রতিটি ধরনের প্রক্রিয়াকরণের জন্য ফলব্যাক পরিস্থিতি প্রদান করতে হবে।

অগ্রাধিকার কৌশল

অগ্রাধিকার অনুযায়ী কাজগুলি ভাগ করুন। প্রথমে গুরুত্বপূর্ণ পরিবর্তন (ডিক্রিপশন, মৌলিক স্থানীয়করণ) সম্পাদন করুন। ঐচ্ছিক উন্নতি (ইমেজ ডাউনলোড, টেক্সট সমৃদ্ধকরণ) পরে করুন। নেটওয়ার্ক অনুরোধের জন্য URLSession টাইমআউট ব্যবহার করুন যাতে সম্পূর্ণ সীমা একটি একক অপারেশনে ব্যয় না হয়।

ত্রুটিতে ফলব্যাক

যদি ইমেজ ডাউনলোড ব্যর্থ হয় বা payload ডিক্রিপশন ত্রুটি ফেরত দেয়, এক্সটেনশনের মূল বিষয়বস্তু সহ contentHandler কল করা উচিত। contentHandler কল না করে এক্সটেনশন কখনও শেষ করবেন না — এটি বিজ্ঞপ্তি হারানোর কারণ হয়। নিরাপদ ফলব্যাক সর্বদা এক্সটেনশন কোডে প্রদান করতে হবে।

swift
override func didReceive(
    request: UNNotificationRequest,
    withContentHandler handler: @escaping (UNNotificationContent) -> Void
) {
    let content = (request.content.mutableCopy()
        as? UNMutableNotificationContent) ?? request.content

    // গুরুত্বপূর্ণ কাজ: ডিক্রিপশন
    var decryptedContent = tryDecryptPayload(content)

    // ঐচ্ছিক কাজ: মিডিয়া
    guard let mediaUrl = decryptedContent.userInfo["media_url"]
        as? String else {
        handler(decryptedContent)
        return
    }

    downloadAndAttachMedia(
        content: decryptedContent,
        mediaUrl: mediaUrl,
        handler: handler
    )
}

এক্সটেনশন পরীক্ষা

Notification Service Extension পরীক্ষা করতে, Xcode ব্যবহার করুন: এক্সটেনশন target নির্বাচন করুন, সিমুলেটরে চালান এবং টার্মিনাল বা Firebase Console-এর মাধ্যমে push বিজ্ঞপ্তি পাঠান। লগ os_log-এর মাধ্যমে প্রক্রিয়াকরণের প্রতিটি ধাপ রেকর্ড করুন — এটি টাইমিং এবং ডাউনলোড সমস্যা নির্ণয়ে সহায়তা করে।

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

এক্সটেনশন 30 সেকেন্ডের মধ্যে সম্পন্ন না হলে কী হয়?

সিস্টেম serviceExtensionTimeWillExpire কল করে, তারপর মূল বিজ্ঞপ্তি অপরিবর্তিত প্রদর্শন করে। সমস্ত ডাউনলোড করা ফাইল এবং পরিবর্তন বাতিল করা হয়।

এক্সটেনশন থেকে বিজ্ঞপ্তি প্রদর্শন বাতিল করা যাবে কি?

হ্যাঁ, যদি আপনি খালি বিষয়বস্তু (খালি ফিল্ড সহ UNNotificationContent) সহ contentHandler কল করেন, বিজ্ঞপ্তি প্রদর্শিত হবে না। এটি স্প্যাম বিজ্ঞপ্তি বা ভুল ডেটা ফিল্টার করতে ব্যবহৃত হয়।

মিডিয়া ডাউনলোডের জন্য অথোরাইজেশন টোকেন কীভাবে পাস করবেন?

টোকেন বিজ্ঞপ্তি payload-এর userInfo-এ পাস করা যেতে পারে বা App Group-এর মাধ্যমে Keychain থেকে প্রাপ্ত করা যেতে পারে। এক্সটেনশন UserDefaults-এ টোকেন সংরক্ষণের সুপারিশ করা হয় না।

এক্সটেনশনের জন্য বিশেষ সার্টিফিকেট কনফিগারেশন প্রয়োজন কি?

এক্সটেনশনকে মূল অ্যাপের মতো একই ডেভেলপার সার্টিফিকেট দিয়ে স্বাক্ষর করতে হবে। প্রোডাকশনের জন্য, Push Notifications ক্ষমতা সক্ষম সহ প্রোডাকশন সার্টিফিকেট প্রয়োজন।

রিয়েল ডিভাইসে এক্সটেনশন কীভাবে ডিবাগ করবেন?

ডিভাইসটি Xcode-এর সাথে সংযুক্ত করুন, রান স্কিমে এক্সটেনশন target নির্বাচন করুন এবং Firebase Console-এর মাধ্যমে push বিজ্ঞপ্তি পাঠান। এক্সটেনশনে ব্রেকপয়েন্ট মূল অ্যাপের মতোই কাজ করে।

সারাংশ

  • Notification Service Extension — প্রদর্শনের আগে push বিজ্ঞপ্তির ব্যাকগ্রাউন্ড প্রক্রিয়াকরণের জন্য iOS এক্সটেনশন।
  • সর্বোচ্চ নির্বাহের সময় 30 সেকেন্ড, তারপর সিস্টেম মূল বিষয়বস্তু প্রদর্শন করে।
  • প্রধান ব্যবহারের ক্ষেত্র: payload ডিক্রিপশন, মিডিয়া ডাউনলোড, বিষয়বস্তু বৈধতা এবং স্থানীয়করণ।
  • এক্সটেনশন UNNotificationServiceExtension থেকে didReceive এবং serviceExtensionTimeWillExpire মেথড সহ ইনহেরিট করে।
  • মিডিয়া ডাউনলোডের জন্য URLSession ব্যবহার করুন, কী সংরক্ষণের জন্য iOS Keychain
  • সর্বদা ফলব্যাক প্রদান করুন — ত্রুটিতে মূল বিষয়বস্তু সহ contentHandler কল করুন।
  • বিজ্ঞপ্তির উপর সম্পূর্ণ নিয়ন্ত্রণের জন্য Service Extension-কে Content Extension-এর সাথে একত্রিত করুন।

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

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

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

আরও পড়ুন