PushKit হল Apple এর একটি framework যা push বিজ্ঞপ্তি গ্যারন্টিড তাড়াতাড়ি প্রেরণের জন্য, প্রধানত VoIP অ্যাপ্লিকেশনের জন্য ডিজাইন করা হয়েছে। সাধারণ APNs (Apple Push Notification service) এর বিপরীতে, যা বিলম্বিত বা গ্রুপবদ্ধ হতে পারে, PushKit ডিভাইস এবং Apple সার্ভারের মধ্যে একটি স্থায়ী TCP সংযোগ ব্যবহার করে। Apple Developer Documentation, 2026 অনুযায়ী, PushKit 500 মিলিসেকেন্ডের কম এন্ড-টু-এন্ড ডেলিভারি লেটেন্সি প্রদান করে, যা রিয়াল-টাইম অ্যাপ্লিকেশন — ভয়স এবং ভিডিও কল এর জন্য গুরুত্বপূর্ণ।
মূখ্য বিষয়
PushKit হল Apple দ্বারা iOS 8-এ উপস্থাপিত একটি framework যা APNs সার্ভারের সাথে একটি স্থায়ী সংযোগের মাধ্যমে নিশ্চিত অগ্রাধিকারসহ push বিজ্ঞপ্তি প্রেরণ প্রক্রিয়া প্রদান করে। সাধারণ বিজ্ঞপ্তির বিপরীতে যা একটি মাত্র APNs চেনেলের মাধ্যমে যায় এবং বিলম্বিত হতে পারে, PushKit বিজ্ঞপ্তি উচ্চতর অগ্রাধিকারসহ একটি উৎসর্গ স্ত্রোত ব্যবহার করে, যা প্রায় রিয়াল-টাইম ডেলিভারি নিশ্চিত করে।
কারিগরিকভাবে, PushKit ডিভাইস এবং Apple এর push সার্ভারের মধ্যে একটি স্থায়ী TCP সংযোগের মাধ্যমে কাজ করে। যখন কোনো সার্ভার একটি VoIP বিজ্ঞপ্তি প্রেরণ করে, সংযোগটি তাড়াতাড়ি ডিভাইসে পৌছে দেয়, যা অ্যাপ্লিকেশনকে জাগরিত করে এবং PKPushRegistry ডেলিগেটকে কল করে। অ্যাপ্লিকেশনটিকে সক্রিয় অবস্থায় থাকতে হবে না — PushKit এটিকে ব্যাকগ্রাউন্ড, সমাপ্ত অবস্থা, এবং ডিভাইস রিবূটের পরেও জাগরিত করতে পারে।
Microsoft Research (2024) এর মোবাইল প্ল্যাটফর্মগুলিতে push বিজ্ঞপ্তি লেটেন্সি নিয়ে গবেষণা অনুযায়ী, PushKit বিজ্ঞপ্তির মাধ্যিক লেটেন্সি 120–350 ms, যখন সাধারণ APNs বিজ্ঞপ্তির মাধ্যিক 1–5 সেকেন্ড। এই মৌলিক পার্থক্যটি উৎসর্গ TCP চেনেল এবং Apple এর পক্ষ থেকে অগ্রাধিকারসহ প্রক্রিয়াকরণের মাধ্যমে ব্যাখ্যা করা হয়।
PushKit চারটি ধরন সমর্থন করে: VoIP (কলের জন্য), Complication (ঘড়ির ডায়াল ডেটার জন্য), FileProvider (ফাইল সিঙ্ক্রোনাইজেশনের জন্য), এবং PushToTalk (ওয়াকি-টকি কাজের জন্য)। iOS 13 থেকে, শুধুমাত্র VoIP ধরনটি তৃতীয়িয় ডিভেলপারের জন্য ব্যাপকভাবে উপলব্ধ রয়েছে। Complication এবং FileProvider এর নিশ্চিত প্রয়োগ রয়েছে এবং Apple এর নিজস্ব ইকোসিস্টেমের মধ্যে সীমাবদ্ধ।
| PushKit ধরন | উদ্দেশ্য | প্রাপ্যতা |
|---|---|---|
| VoIP | আগত ভয়স এবং ভিডিও কল ইংগিত | iOS 8+, App Store |
| Complication | Apple Watch ফেসে ডেটা হালনাগড়ি | watchOS 6+ |
| FileProvider | File Provider Extension-এ নতুন ফাইলের সংকেত | iOS 11+, সীমিত |
| PushToTalk | এন্টারপ্রাইজ অ্যাপ্লিকেশনে ওয়াকি-টকি ফাংশন | iOS 16+, সীমিত প্রবেশ |
APNs (Apple Push Notification service) হল একটি সার্বভৌমিক push বিজ্ঞপ্তি প্রেরণ সেবা যা সকল অ্যাপ্লিকেশনের জন্য একটি মাত্র চেনেলের মাধ্যমে কাজ করে। চেনেলটি ভিড়ে গেলে Apple APNs বিজ্ঞপ্তি বাকি রাখতে পারে, দলবদ্ধ করতে পারে, এবং ডিসকার্ড ও করতে পারে। অন্যদিকে, PushKit পa্রতিটি বিজ্ঞপ্তি ধরনের জন্য একটি উৎসর্গ সংযোগ ব্যবহার করে, এবং Apple প্রতিটি VoIP push বিনা বাকি রাখা ছাড়া প্রেরণের গারন্টি দেয়।
পার্থক্যটি সময়-গুরুত্বপূর্ণ পরিস্থিতিতে স্পষ্ট হয়: APNs এর মাধ্যমে প্রেরিত একটি আগত কল 10–30 সেকেন্ড বিলম্বে আসতে পারে অথবা ডিভাইসটি পাওয়ার সেভিং মোডে থাকলে একদমও না ও আসতে পারে। PushKit ওয়াঁটি একই বিজ্ঞপ্তি ডিভাইসের অবস্থা নির্বিশেষে 100–500 ms এ প্রেরণ করে, কারণ এর TCP চেনেলটি সিস্টেম দ্বারা অগ্রাধিকারসহ সক্রিয় রাখা হয়।
| প্যারামিটার | PushKit | APNs |
|---|---|---|
| সংযোগের ধরন | স্থায়ী TCP (উৎসর্গ চেনেল) | বাকি রাখাসহ ভাগ করা চেনেল |
| মাধ্যিক বিলম্ব | 120–350 ms | 1–5 সেকেন্ড |
| অ্যাপ্লিকেশন জাগরণ | সবসময়, যেকোনো অবস্থা থেকে | শুধু যদি অ্যাপ্লিকেশন বন্ধ না থাকে |
| Payload আয়তন | 5 KB পর্যন্ত | 4 KB পর্যন্ত |
| iOS গ্রুপীকরণ | না | হ্যাঁ |
PushKit আর্কিটেক্চার PKPushRegistry এর চারপাশে নির্মিত — একটি অবজেক্ট যা একটি নির্দিষ্ট ধরনের বিজ্ঞপ্তি গ্রহনের জন্য অ্যাপ্লিকেশনকে নিবন্ধন করে। অ্যাপ্লিকেশন একটি PKPushRegistry ইনস্টেন্স তৈরি করে, কাঙ্ক্ষিত ধরন (যেমন, PKPushTypeVoIP) নির্দিষ্ট করে, এবং একটি ডেলিগেট নিয়োগ করে। নিবন্ধনের পর, সিস্টেম স্বযংক্রিয়ভাবে APNs এর সাথে সংযোগ বায়ব রাখে এবং ডেলিগেটের মাধ্যমে push বিজ্ঞপ্তি প্রেরণ করে।
প্রতিটি বিজ্ঞপ্তি একটি PKPushPayload অবজেক্ট দ্বারা প্রদর্শিত হয়, যার মধ্যে সার্ভার ডেটা সহ একটি dictionaryPayload থাকে। পেলোডের আয়তন 5 KB এ সীমাবদ্ধ, যা কল মেটাডেটা প্রেরণের জন্য যথেষ্ট: কলার শনাক্তকারী, কলের ধরন (অডিও/ভিডিও), সংযোগের নাম, এবং সেশন টোকন। মিডিয়া স্ট্রিমটি আলাদাভাবে WebRTC বা অন্য রিয়াল-টাইম প্রোটোকলের মাধ্যমে প্রেরিত হয়।
import PushKit
class PushKitManager: NSObject {
private let pushRegistry = PKPushRegistry(queue: .main)
func configure() {
pushRegistry.delegate = self
pushRegistry.desiredPushTypes = [.voIP]
}
}
PushKit বিজ্ঞপ্তি গ্রহণের সময় ডেলিগেট পদ্ধতি কল করে। এই মুহূর্তে, অ্যাপ্লিকেশনকে dictionaryPayload থেকে ডেটা বার করতে হবে এবং তাড়াতাড়ি CallKit এর মাধ্যমে কলটি প্রদর্শন করতে হবে, অন্যথা সিস্টেম ব্যাকগ্রাউন্ড টাস্ক সমাপ্ত করতে পারে। Apple 30 সেকেন্ডের মধ্যে প্রক্রিয়াকরণ সম্পূর্ণ করার পরামর্শ দেয়, কিন্তু VoIP কলের জন্য প্রথম সেকেন্ডের মধ্যে কল স্ক্রিন প্রদর্শন করা গুরুত্বপূর্ণ।
extension PushKitManager: PKPushRegistryDelegate {
func pushRegistry(
_ registry: PKPushRegistry,
didReceiveIncomingPushWith payload: PKPushPayload,
for type: PKPushType
) {
guard let caller =
payload.dictionaryPayload["caller"] as? String
else { return }
CallKitManager.shared.reportIncomingCall(
uuid: UUID(),
handle: caller
)
}
}
iOS 13 লঞ্চের মাধ্যমে, Apple PushKit ব্যবহারে কড়া সীমাবদ্ধি আরোপ করেছে। ডিভেলপাররা ব্যাকগ্রাউন্ড অ্যাপ্লিকেশন আপডেটের জন্য একটি গোপন প্রক্রিয়া হিসাবে VoIP push ব্যাপকভাবে ব্যবহার করছিল — PushKit এর মাধ্যমে জাগরণ ব্যবহারকারীর স্পষ্ট অনুমতি ছাড়াই কন্টেন্ট লোড, ডেটা সিঙ্ক্রোনাইজেশন এবং ইন্টারফেস আপডেট করতে দিছিল। Apple এটিকে শক্তি সংরক্ষণ ধারণার লঙ্ঘন বলে মনে করে এবং PushKit কে শুধুমাত্র আগত কল ইংগিতে সীমাবদ্ধ করে।
এখন প্রতিটি PushKit বিজ্ঞপ্তিকে CallKit এর মাধ্যমে একটি আগত কল প্রদর্শনে পরিণত হতে হবে। যদি সিস্টেম নির্ধারণ করে যে PushKit অন্য উদ্দেশ্যে ব্যবহৃত হচ্ছে — যেমন, কল প্রদর্শন ছাড়া ব্যাকগ্রাউন্ড সিঙ্ক্রোনাইজেশন বা কন্টেন্ট আপডেট — তা হলে অ্যাপ্লিকেশনটি পরিালোচনার সময় প্রত্যাখ্যান বা PushKit সেবা থেকে অসক্ষম হতে পারে। Apple iOS 13 থেকে শুরু করে ব্যাকগ্রাউন্ড ডেটা আপডেটের জন্য PushKit ব্যবহারের ক্ষমতাও সরিয়ে দিয়েছে।
সম্পূর্ণ PushKit সমন্বিতকরণে নিবন্ধন, push টোকন প্রাপ্তি এবং আগত বিজ্ঞপ্তি পরিচালনা অন্তর্ভুক্ত। PushKit স্বযংক্রিয়ভাবে বিজ্ঞপ্তি প্রেরণের অনুমতি চায় — PushKit এর জন্য একটি অতিরিক্ত UNUserNotificationCenter কলের প্রয়়োজন নেই, কিন্তু অ্যাপ্লিকেশনের লোকাল বিজ্ঞপ্তির জন্য প্রয়়োজন হতে পারে। নিবন্ধনের পর, সিস্টেম push টোকন প্রেরণের জন্য pushRegistry:didUpdatePushCredentials কল করে, যা সার্ভারে পাঠানো প্রয়়োজন।
extension PushKitManager: PKPushRegistryDelegate {
func pushRegistry(
_ registry: PKPushRegistry,
didUpdate pushCredentials: PKPushCredentials,
for type: PKPushType
) {
let token = pushCredentials.token
.map { String(format: "%02x", $0) }
.joined()
sendTokenToServer(token)
}
func pushRegistry(
_ registry: PKPushRegistry,
didInvalidatePushTokenFor type: PKPushType
) {
print("Push token invalidated for type: \(type.rawValue)")
}
}
সার্ভার প্রান্ত APNs এর মাধ্যমে push-type = voip এবং হেডার apns-push-type: voip সহ একটি PushKit বিজ্ঞপ্তি প্রেরণ করে। সাধারণ APNs এর বিপরীতে, VoIP push নিজস্ব সার্টিফিকেট ব্যবহার করে এবং topic কনফিগরেশনের প্রয়়োজন হয় না। কল শনাক্তকরণের জন্য পেলোডে সঙ্ক্ষিপ্ত ডেটা থাকা উচিত।
// VoIP push পেলোড উদাহরণ
{
"aps": {
"alert": {}
},
"caller": "+15551234567",
"callerName": "Alice Johnson",
"sessionId": "abc-123-def",
"hasVideo": false
}
PushKit ডিবাগিং সাধারণ APNs এর চেয়ে অধিক জটিল কারণ PushKit iOS সিমুলেটরে কাজ করে না। নির্ণয়ের জন্য একটি ভৌতিক iPhone বা iPad প্রয়়োজন। সঠিক কাজের প্রথম লক্ষণ হল লঞ্চে সময় pushRegistry:didUpdatePushCredentials কল এবং একটি নির্দিষ্ট ফরম্যাটে (VoIP এর জন্য 64 হেক্স অক্ষর) push টোকন দেখানো। যদি ডেলিগেট কল না হয়, তা হলে আপনার অ্যাপ্লিকেশনের entitlement যাচাই করুন।
আরও একটি সাধারণ সমস্যা হল অ্যাপ্লিকেশন আপডেটের পর PushKit বিজ্ঞপ্তি প্রেরণ করছে না। এটি হয় যখন push টোকন বদলে গেছে কিন্তু সার্ভার পুরানোটি ব্যবহার করতে থাকে। সমাধান হল অ্যাপ্লিকেশন লঞ্চে সার্ভারে নতুন টোকন পাঠানো এবং pushRegistry:didInvalidatePushTokenForType কল হলে অবৈদ টোকন সরিয়ে দেওয়া। Apple সাধারণ APNs এর মাধ্যমে একটি ফলব্যাক প্রক্রিয়া বাস্তবায়নের সুপারিশও দেয়।
| সমস্যা | কারণ | সমাধান |
|---|---|---|
| didUpdatePushCredentials কল হয় না | entitlements নেই বা ভুল ধরন | Xcode এ Capabilities → Push Notifications + VoIP যাচাই করুন |
| push বিলম্বে আসে | ডিভাইস লাউ পাওয়ার মোডে বা দুর্বল সিগনাল | PushKit হার্ডওয়্যার সীমা অতিক্রম করতে পারে না |
| রিস্টার্টের পর বিজ্ঞপ্তি আসে না | অ্যাপ্লিকেশন পুনরায় ইনস্টলের পর push টোকন বদলে গেছে | নতুন টোকন আবেদন করুন এবং সার্ভারে আপডেট করুন |
| PushKit এর কারণে App Store প্রত্যাখ্যান | PushKit কল ব্যতিরিক্ত উদ্দেশ্যে ব্যবহৃত | নিশ্চিত করুন যে প্রতিটি push reportNewIncomingCall এ পরিণত হয় |
সামন্য প্রশ্নোত্তরি
কারিগরিকভাবে হ্যাঁ, কিন্তু এটি অর্থহীন হবে। iOS 13 থেকে, PushKit এর একমাত্র অনুমত ব্যবহার হল আগত কল ইংগিত, যা প্রদর্শনের জন্য CallKit প্রয়়োজন। CallKit ছাড়া PushKit ব্যবহার করলে App Store থেকে অ্যাপ্লিকেশন প্রত্যাখ্যান হবে।
PushKit এর জন্য সর্বোচ্চ পেলোড আয়তন হল 5 KB (5120 বাইট)। এটি সাধারণ APNs বিজ্ঞপ্তির চেয়ে 1 KB বেশি, যা আরও কল মেটাডেটা প্রেরণের অনুমতি দেয়।
অ্যাপ্লিকেশন মুছার সময় Apple স্বযংক্রিয়ভাবে push টোকন অবৈদ করে। সার্ভার একটি অবৈদিকরণ বিজ্ঞপ্তি পাবে এবং সেই টোকনে push পাঠানো বন্ধ করতে হবে। একটি অবৈদ টোকনে push পাঠানোর চেষ্টা APNs ত্রুটি 410 এ পরিণত হবে।
PushKit macOS 10.14+ এ Mac Catalyst বা AppKit ব্যবহার করে তৈরি Mac অ্যাপ্লিকেশনের জন্য উপলব্ধ। কার্যকারিতা iOS সংস্করণের সমান, VoIP বিজ্ঞপ্তি সমর্থন সহ।
নিজস্ব এনালিটিক্স ব্যবহার করুন: সার্ভার থেকে push পাঠানো এবং ক্লাইন্টে didReceiveIncomingPushWithPayload কলের মধ্যে সময় ট্রেক করুন। 500 ms এর কম গড় সময় PushKit এর সঠিক কাজ নির্দেশ করে।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন