PushKit হলো একটি iOS ফ্রেমওয়ার্ক যা স্ট্যান্ডার্ড APNs কে বাইপাস করে কম লেটেন্সি VoIP নোটিফিকেশন সরবরাহ করে। Apple Developer Documentation (2025) অনুসারে, PushKit ব্যাকগ্রাউন্ডেও 5 সেকেন্ডের মধ্যে কল ডেলিভারির গ্যারান্টি দেয়। VoIP নোটিফিকেশন সরাসরি প্রক্রিয়া করা হয়, ব্যবহারকারীকে ব্যানার দেখানোর প্রয়োজন ছাড়াই, যা ফ্রেমওয়ার্কটিকে iOS-এ মেসেঞ্জার এবং ভিডিও কল অ্যাপের জন্য প্রাথমিক টুল করে তোলে।
মূল বিষয়
PushKit হলো Apple-এর একটি ফ্রেমওয়ার্ক, যা iOS 8-এ প্রবর্তিত হয়েছে, যা VoIP অ্যাপ্লিকেশনের জন্য কম লেটেন্সি push নোটিফিকেশন সরবরাহ করে। স্ট্যান্ডার্ড APNs (Apple Push Notification service) থেকে ভিন্ন, PushKit অ্যাপকে ইনকামিং কল পাওয়ার সময় ব্যাকগ্রাউন্ডে জেগে উঠতে দেয়, ব্যবহারকারীকে নোটিফিকেশন না দেখিয়ে। এটি ভয়েস এবং ভিডিও কল অ্যাপের জন্য অত্যন্ত গুরুত্বপূর্ণ — ব্যবহারকারী তাৎক্ষণিকভাবে কল পায়, এমনকি অ্যাপ বন্ধ থাকলেও। Apple WWDC 2024 অনুসারে, PushKit সারা বিশ্বে প্রতিদিন 2 বিলিয়নেরও বেশি VoIP নোটিফিকেশন প্রক্রিয়া করে।
পদ্ধতিটি ডিভাইস এবং Apple-এর push সার্ভারের মধ্যে সরাসরি সংযোগ এর উপর ভিত্তি করে তৈরি, যা স্ট্যান্ডার্ড নোটিফিকেশন চ্যানেলকে বাইপাস করে। যখন অ্যাপ সার্ভার একটি VoIP নোটিফিকেশন পাঠায়, এটি একটি ডেডিকেটেড PushKit সার্ভারের মাধ্যমে যায় এবং সর্বোচ্চ অগ্রাধিকার সহ ডিভাইসে ডেলিভার হয়। সিস্টেম অ্যাপকে ব্যাকগ্রাউন্ডে জাগিয়ে তোলে এবং ডেলিগেট মেথড pushRegistry:didReceiveIncomingPushWithPayload:forType: কল করে। অ্যাপ পেলোড গ্রহণ করে, কল প্রক্রিয়া করে এবং নিশ্চিতকরণের জন্য কমপ্লিশন হ্যান্ডলার কল করে। Apple-এর স্পেসিফিকেশন অনুসারে, পাঠানো থেকে প্রক্রিয়াকরণ পর্যন্ত পুরো চক্রটি 5 সেকেন্ডের বেশি সময় নেয় না।
PushKit এবং APNs-এর মধ্যে প্রধান পার্থক্য ডেলিভারি মেকানিজম এবং প্রক্রিয়াকরণে। APNs ব্যানার, শব্দ বা ব্যাজ প্রদর্শনের জন্য স্ট্যান্ডার্ড নোটিফিকেশন চ্যানেল ব্যবহার করে, যেখানে PushKit ভিজ্যুয়াল নোটিফিকেশন ছাড়াই সরাসরি অ্যাপে ডেটা ডেলিভার করে। নীচে মূল বৈশিষ্ট্যগুলির একটি তুলনা সারণী দেওয়া হল।
| বৈশিষ্ট্য | PushKit | APNs |
|---|---|---|
| ডেলিভারি অগ্রাধিকার | উচ্চ (তাৎক্ষণিক ডেলিভারি) | মাঝারি (সম্ভাব্য বিলম্ব) |
| অ্যাপ জাগরণ | হ্যাঁ, ব্যাকগ্রাউন্ডে | শুধুমাত্র নোটিফিকেশন ট্যাপ করলে |
| ব্যানার প্রদর্শন | না | হ্যাঁ (ঐচ্ছিক) |
| ব্যবহার | VoIP, কল, ভিডিও কল | সব ধরনের নোটিফিকেশন |
| পেলোড | শুধুমাত্র JSON, কোনো মিডিয়া নেই | JSON + সংযুক্তি |
PushKit সমৃদ্ধ মিডিয়া সংযুক্তিও সমর্থন করে না এবং সাধারণ মার্কেটিং নোটিফিকেশনের জন্য ব্যবহার করা যাবে না। Apple PushKit-এর ব্যবহার কঠোরভাবে নিয়ন্ত্রণ করে — অ্যাপের স্পষ্ট VoIP কার্যকারিতা থাকতে হবে, অন্যথায় এটি পর্যালোচনায় প্রত্যাখ্যাত হবে। APNs অন্যান্য সব পরিস্থিতির জন্য সার্বজনীন সমাধান হিসাবে রয়ে গেছে।
PushKit ব্যবহার করার জন্য, অ্যাপকে PKPushRegistry-এর মাধ্যমে pushType .voIP দিয়ে রেজিস্টার করতে হবে। রেজিস্ট্রেশন প্রথম লঞ্চে একবার করা হয়, তারপরে সিস্টেম একটি অনন্য push টোকেন তৈরি করে এবং ডেলিগেটের মাধ্যমে তা পাস করে। এই টোকেনটি পরবর্তী VoIP নোটিফিকেশন পাঠানোর জন্য অ্যাপ সার্ভারে পাঠানো হয়। নীচে Swift-এ PushKit রেজিস্ট্রেশন এবং টোকেন প্রাপ্তির উদাহরণ দেওয়া হল।
import PushKit
let registry = PKPushRegistry(queue: DispatchQueue.main)
registry.delegate = self
registry.desiredPushTypes = [.voIP]
// MARK: - PKPushRegistryDelegate
func pushRegistry(
_ registry: PKPushRegistry,
didUpdate pushCredentials: PKPushCredentials,
for type: PKPushType
) {
let deviceToken = pushCredentials.token
.map { String.format("%02x", $0) }
.joined()
sendVoIPTokenToServer(deviceToken)
}
PKPushType.voIP দিয়ে desiredPushTypes কল করার পর, সিস্টেম স্বয়ংক্রিয়ভাবে VoIP নোটিফিকেশন পাওয়ার অনুমতি চায়। pushRegistry:didUpdatePushCredentials:forType: মেথডে, অ্যাপ ডিভাইস টোকেন Data হিসেবে গ্রহণ করে, যা হেক্স স্ট্রিংয়ে রূপান্তরিত করে সার্ভারে পাঠানো হয়। টোকেন প্রতিটি ডিভাইসের জন্য অনন্য এবং অ্যাপ পুনরায় ইনস্টল করলে পরিবর্তিত হয় — সার্ভারকে টোকেন আপডেট হ্যান্ডেল করতে হবে।
func pushRegistry(
_ registry: PKPushRegistry,
didReceiveIncomingPushWith payload: PKPushPayload,
for type: PKPushType,
completion: @escaping VoidBlock
) {
guard let caller = payload.dictionaryPayload["caller"] as? String else {
completion()
return
}
let update = CXCallUpdate()
update.remoteHandle = CXHandle(type: .generic, value: caller)
provider.reportNewIncomingCall(
with: UUID(),
update: update,
completion: { error in
if let error = error {
print("Call error: \(error)")
}
completion()
}
)
}
didReceiveIncomingPushWith মেথডে, অ্যাপ কল ডেটা সহ পেলোড গ্রহণ করে। কলার তথ্য বের করার পর, ইনকামিং কল স্ক্রিন প্রদর্শনের জন্য CallKit ফ্রেমওয়ার্ক থেকে CXCallUpdate তৈরি করা হয়। প্রক্রিয়াকরণের পর কমপ্লিশন হ্যান্ডলার কল করা গুরুত্বপূর্ণ — অন্যথায় সিস্টেম টাইমআউটের কারণে অ্যাপ প্রক্রিয়া জোরপূর্বক শেষ করতে পারে। সর্বোচ্চ প্রক্রিয়াকরণ সময় 30 সেকেন্ড, যার পরে iOS নোটিফিকেশনটিকে অপ্রক্রিয়াজাত বলে গণ্য করে।
PushKit CallKit-এর সাথে নিবিড়ভাবে সংহত — iOS-এ সিস্টেম কল ইন্টারফেস প্রদর্শনের জন্য একটি ফ্রেমওয়ার্ক। যখন অ্যাপ PushKit-এর মাধ্যমে একটি VoIP নোটিফিকেশন পায়, তখন এটি কল পরিচালনার জন্য একটি CXProvider এবং CXCallController তৈরি করতে হবে। CallKit স্বয়ংক্রিয়ভাবে লক স্ক্রিনে ইনকামিং কল স্ক্রিন দেখায়, এমনকি অ্যাপ মিনিমাইজ করা থাকলেও। নীচে একটি CallKit প্রোভাইডার সেটআপের উদাহরণ দেওয়া হল।
let config = CXProviderConfiguration(localizedName: "MyApp")
config.supportsVideo = true
config.maximumCallGroups = 1
config.maximumCallsPerCallGroup = 1
config.supportedHandleTypes = [.phoneNumber, .generic]
let provider = CXProvider(configuration: config)
provider.setDelegate(self, queue: nil)
CXProviderConfiguration কল স্ক্রিনের চেহারা এবং আচরণ নির্ধারণ করে — অ্যাপের নাম, ভিডিও সমর্থন, একযোগে কলের সংখ্যা। VoIP অ্যাপের জন্য PushKit-কে CallKit-এর সাথে সংহত করা বাধ্যতামূলক: এটি ছাড়া, সিস্টেম ইনকামিং কল স্ক্রিন দেখাবে না এবং ব্যবহারকারী কল মিস করবে। Apple PushKit ব্যবহার করে এমন সব অ্যাপের জন্য CallKit ব্যবহারের প্রয়োজন।
PushKit ব্যবহার Apple-এর নির্ধারিত বেশ কয়েকটি কঠোর নিষেধাজ্ঞা নিয়ে আসে। ফ্রেমওয়ার্কটি শুধুমাত্র VoIP কার্যকারিতার জন্য ব্যবহার করা যেতে পারে — PushKit-এর মাধ্যমে মার্কেটিং নোটিফিকেশন পাঠানোর যেকোনো প্রচেষ্টায় অ্যাপ ব্লক হয়ে যাবে। পেলোডের আকার 4 KB-এর বেশি হওয়া উচিত নয়, এবং এতে শুধুমাত্র JSON ডেটা থাকতে পারে, কোনো সংযুক্তি ছাড়া। iOS 13 থেকে শুরু করে, Apple VoIP নোটিফিকেশন পাঠানোর ফ্রিকোয়েন্সির উপর একটি সীমা চালু করেছে — প্রতি ডিভাইসে প্রতি মিনিটে একটির বেশি নোটিফিকেশন নয়। সার্ভারকে এই সীমা মেনে চলতে হবে, অন্যথায় নোটিফিকেশন সিস্টেম দ্বারা প্রত্যাখ্যাত হবে। PushKit iOS সিমুলেটরেও কাজ করে না — পরীক্ষা শুধুমাত্র একটি ফিজিক্যাল ডিভাইসে সম্ভব।
একটি VoIP নোটিফিকেশন পেলোড হলো কাস্টম কল ডেটা সহ একটি JSON অভিধান। APNs থেকে ভিন্ন, PushKit স্ট্যান্ডার্ড alert, badge এবং sound ফিল্ড সমর্থন করে না — সমস্ত ডেটা ডেভেলপার দ্বারা নির্ধারিত হয়। একটি সাধারণ গঠনে কলার শনাক্তকারী (caller), কলের ধরন (voice বা video), রুম বা সেশন শনাক্তকারী এবং একটি টাইমস্ট্যাম্প অন্তর্ভুক্ত থাকে। 4 KB সীমার মধ্যে জায়গা বাঁচাতে প্রতিটি ফিল্ডের আকার ন্যূনতম হওয়া উচিত। Apple পেলোডে শুধুমাত্র লক স্ক্রিনে ইনকামিং কল স্ক্রিন প্রদর্শনের জন্য প্রয়োজনীয় ডেটা অন্তর্ভুক্ত করার পরামর্শ দেয় এবং বাকি তথ্য (অবতার, বার্তার ইতিহাস) ব্যবহারকারী উত্তর দেওয়ার পরে একটি পৃথক নেটওয়ার্ক অনুরোধের মাধ্যমে লোড করে। ন্যূনতম পেলোডের উদাহরণ: { "caller": "আন্না", "caller_id": "+79161234567", "type": "audio", "room": "uuid-room-1234", "ts": 1718534400 }. অ্যাপ সংস্করণগুলির মধ্যে সামঞ্জস্যের জন্য পেলোডের সমস্ত কী ছোট, দ্ব্যর্থহীন এবং সার্ভার সাইডে নথিভুক্ত হওয়া উচিত।
PushKit-এর সাথে কাজ করার সময়, ডেলিভারি ব্যর্থতা এবং সংযোগ হারানো হ্যান্ডেল করা প্রয়োজন। যদি ডিভাইস অফলাইনে থাকে বা নেটওয়ার্ক থেকে সংযোগ বিচ্ছিন্ন থাকে, তাহলে VoIP নোটিফিকেশন ডেলিভার হবে না — PushKit সঞ্চয় এবং পুনরায় পাঠানো সমর্থন করে না, APNs-এর বিপরীতে যা পুনরায় চেষ্টার জন্য 24 ঘন্টা পর্যন্ত নোটিফিকেশন সংরক্ষণ করে। সার্ভারকে স্বাধীনভাবে অবিতরণ করা নোটিফিকেশন ট্র্যাক করতে হবে এবং সংযোগ পুনরুদ্ধার হলে পুনরায় চেষ্টা করতে হবে। এর জন্য push kit feedback service পদ্ধতি ব্যবহার করা হয় — এটি ব্যর্থতার কারণ সহ অবিতরণ করা নোটিফিকেশনের একটি তালিকা ফেরত দেয়। সার্ভার অ্যানালিটিক্সের মাধ্যমে VoIP নোটিফিকেশন ডেলিভারি সাফল্যের মনিটরিং সেটআপ করার এবং সফল ডেলিভারির হার 95% এর নিচে নেমে গেলে ডেভেলপারকে অবহিত করার পরামর্শ দেওয়া হয়। PushKit সিস্টেম শুধুমাত্র তখনই ডেলিভারির গ্যারান্টি দেয় যখন ডিভাইসের একটি সক্রিয় ইন্টারনেট সংযোগ থাকে — এর অনুপস্থিতিতে, নোটিফিকেশন স্থায়ীভাবে হারিয়ে যায়, যা গ্যারান্টিযুক্ত ডেলিভারি সহ একটি নির্ভরযোগ্য VoIP কল সিস্টেম ডিজাইন করার সময় বিবেচনা করা গুরুত্বপূর্ণ।
সচরাচর জিজ্ঞাসিত প্রশ্ন
PushKit হলো Apple-এর একটি ফ্রেমওয়ার্ক যা কম লেটেন্সি VoIP নোটিফিকেশন সরবরাহ করে যা অ্যাপকে ব্যানার না দেখিয়ে ইনকামিং কলে ব্যাকগ্রাউন্ডে জেগে উঠতে দেয়। এটি মেসেঞ্জার এবং ভিডিও কল অ্যাপে ব্যবহৃত হয়।
PushKit-এর ডেলিভারি অগ্রাধিকার বেশি এবং এটি ব্যবহারকারীকে নোটিফিকেশন না দেখিয়ে ব্যাকগ্রাউন্ডে অ্যাপ জাগায়। APNs ব্যানার সহ নোটিফিকেশন সরবরাহ করে এবং ব্যবহারকারীর মিথস্ক্রিয়া ছাড়া কল প্রক্রিয়া করার জন্য অ্যাপকে জাগাতে পারে না।
হ্যাঁ, Apple সিস্টেম ইনকামিং কল স্ক্রিন প্রদর্শনের জন্য PushKit-কে CallKit-এর সাথে সংহত করতে প্রয়োজন। CallKit ছাড়া, অ্যাপ লক স্ক্রিনে ইনকামিং কল দেখাতে পারে না, যা VoIP কার্যকারিতাকে অকেজো করে তোলে।
.voIP টাইপ সহ PKPushRegistry তৈরি করার এবং pushRegistry:didUpdatePushCredentials:forType: ডেলিগেট মেথড বাস্তবায়নের পর টোকেন পাওয়া যায়। টোকেন Data হিসেবে পাস করা হয় এবং সার্ভারে পাঠানোর জন্য হেক্স স্ট্রিংয়ে রূপান্তরিত করতে হবে।
PushKit-এর জন্য সর্বোচ্চ পেলোড আকার 4 KB। ডেটা JSON ফরম্যাটে হতে হবে। মিডিয়া সংযুক্তি সমর্থিত নয়। iOS 13 থেকে, প্রতি ডিভাইসে প্রতি মিনিটে একটির বেশি VoIP নোটিফিকেশনের সীমা রয়েছে।
সংক্ষিপ্তসার
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন