CallKit: এটি কী, VoIP ফ্রেমওয়ার্ক এবং সিস্টেম ফোনের সাথে ইন্টিগ্রেশন

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

CallKit একটি Apple ফ্রেমওয়ার্ক যা VoIP অ্যাপ্লিকেশনগুলিকে iOS সিস্টেম ফোন ইন্টারফেসে ইনকামিং এবং আউটগোয়িং কল প্রদর্শন করতে দেয়, লক স্ক্রিন সহ। ডেভেলপাররা নিজস্ব UI তৈরি করার প্রয়োজন ছাড়াই স্ট্যান্ডার্ড নিয়ন্ত্রণ পায় — কল গ্রহণ, প্রত্যাখ্যান, হোল্ড করা। Apple Developer Documentation, 2026 অনুসারে, ফ্রেমওয়ার্কটি একটি একক সিস্টেম ইন্টারফেসের মাধ্যমে 98% VoIP কল প্রক্রিয়া করে, যা বিভিন্ন মেসেঞ্জার এবং যোগাযোগ অ্যাপের মধ্যে ব্যবহারকারীর অভিজ্ঞতার বিভাজন দূর করে।

মূল পয়েন্ট

  • CallKit — iOS, macOS এবং iPadOS-এ সিস্টেম ফোন অ্যাপে VoIP কল ইন্টিগ্রেট করার ফ্রেমওয়ার্ক।
  • CXProvider — কল পরিচালনার জন্য প্রধান ক্লাস: শুরু, শেষ, হোল্ড এবং কলের মধ্যে সুইচ করা।
  • CXCallController — আউটগোয়িং কল করার এবং বর্তমান কলের উপর ক্রিয়া অনুরোধ করার জন্য ক্লায়েন্ট ইন্টারফেস।
  • Call Directory Extension — সিস্টেম স্তরে ইনকামিং নম্বর সনাক্তকরণ এবং ব্লক করার এক্সটেনশন।
  • PushKit — CallKit-এর অপরিহার্য সহযোগী: তাত্ক্ষণিক কল প্রদর্শনের জন্য বিলম্ব ছাড়াই ইনকামিং VoIP বিজ্ঞপ্তি পৌঁছে দেয়।

CallKit কী এবং কেন এটি প্রয়োজন?

CallKit একটি Apple ফ্রেমওয়ার্ক যা iOS 10-এ প্রবর্তিত হয়েছে যা VoIP অ্যাপ্লিকেশনগুলিকে সিস্টেম ফোন অ্যাপের সাথে ইন্টিগ্রেট করার জন্য প্রোগ্রামিং ইন্টারফেস প্রদান করে। CallKit-এর আগে, প্রতিটি VoIP অ্যাপ নিজস্ব UI-তে ইনকামিং কল প্রদর্শন করত — ব্যবহারকারী অ্যাপ থেকে একটি বিজ্ঞপ্তি দেখত কিন্তু সিস্টেম পদ্ধতিতে উত্তর দিতে পারত না। CallKit এই অভিজ্ঞতাকে একীভূত করে: একটি ইনকামিং VoIP কল একই নিয়ন্ত্রণ সহ একটি সাধারণ ফোন কল হিসাবে প্রদর্শিত হয়।

CallKit-এর মূল উদ্দেশ্য হল ব্যবহারকারীর অভিজ্ঞতার বিভাজন দূর করা। যখন একটি অ্যাপ CallKit ব্যবহার করে, কল লক স্ক্রিনে, কল ইতিহাসে এবং সিস্টেম ফোন অ্যাপের সাম্প্রতিক কল তালিকায় প্রদর্শিত হয়। ব্যবহারকারী পরিচিত অঙ্গভঙ্গি দিয়ে কল উত্তর, প্রত্যাখ্যান বা ভয়েসমেলে পাঠাতে পারেন — কোন অ্যাপ কল পরিচালনা করছে তা না ভেবেই।

Apple WWDC 2023 সেশন “What’s new in CallKit” অনুসারে, 85% এর বেশি ব্যবহারকারী CallKit ইন্টিগ্রেশন সহ অ্যাপগুলিকে পছন্দ করেন যেগুলি কলের জন্য নিজস্ব UI ব্যবহার করে তার চেয়ে। কারণ হল সিস্টেম নিয়ন্ত্রণের সামঞ্জস্যতা এবং পূর্বানুমানযোগ্যতা যা শেখার প্রয়োজন হয় না।

CallKit কীভাবে VoIP ব্যবহারকারীর অভিজ্ঞতা পরিবর্তন করে

CallKit ছাড়া, একটি ইনকামিং VoIP কল স্ট্যান্ডার্ড push বিজ্ঞপ্তির মাধ্যমে পৌঁছে দেওয়া হয়। ব্যবহারকারী একটি ব্যানার দেখে, এতে ট্যাপ করে, অ্যাপ খোলার জন্য অপেক্ষা করে, এবং তবেই কল স্ক্রিন দেখে। CallKit PushKit-এর সাথে মিলে এই পথকে শূন্যে নামিয়ে আনে: কল তাত্ক্ষণিকভাবে প্রদর্শিত হয়, এমনকি অ্যাপ চলমান না থাকলেও, এবং সিস্টেম ইন্টারফেস মিলিসেকেন্ডে উত্তর দেওয়ার জন্য প্রস্তুত থাকে।

  • কল লক স্ক্রিনে প্রদর্শিত হয় এবং অন্যান্য অ্যাপের উপরে সর্বদা দৃশ্যমান থাকে
  • স্ট্যান্ডার্ড ক্রিয়া সমর্থিত: উত্তর, প্রত্যাখ্যান, মনে করিয়ে দিন, বার্তা দিয়ে উত্তর
  • CarPlay ইন্টিগ্রেশন — কল গাড়ির স্ক্রিনে প্রদর্শিত হয়
  • সাম্প্রতিক কল এবং সিস্টেম কল ইতিহাসে স্বয়ংক্রিয় রেকর্ডিং

CallKit আর্কিটেকচার: CXProvider এবং CXCallController

CallKit আর্কিটেকচার দুটি মূল ক্লাসের চারপাশে নির্মিত — CXProvider এবং CXCallController, যা প্রদানকারী-ক্লায়েন্ট প্যাটার্ন বাস্তবায়ন করে। প্রদানকারী সিস্টেম পক্ষে কল পরিচালনা করে, যখন ক্লায়েন্ট ব্যবহারকারী বা অ্যাপের পক্ষে ক্রিয়া শুরু করে। এই পৃথকীকরণ নিশ্চিত করে যে সিস্টেম ইন্টারফেস সর্বদা সামঞ্জস্যপূর্ণ থাকে, এমনকি অ্যাপ অস্থায়ীভাবে অনুপলব্ধ থাকলেও।

CXProvider — কল প্রদানকারী

CXProvider কেন্দ্রীয় অবজেক্ট যা CallKit-এ অ্যাপকে কল প্রদানকারী হিসাবে নিবন্ধন করে। এটি CXProviderConfiguration-এর মাধ্যমে কনফিগার করা হয়, যেখানে অ্যাপ আইকন, সমর্থিত কল প্রকার (অডিও, ভিডিও), এবং সর্বাধিক একযোগী গ্রুপ নির্দিষ্ট করা হয়। প্রদানকারী সিস্টেম থেকে ক্রিয়া অনুরোধ গ্রহণ করে এবং CXProviderDelegate-এর মাধ্যমে অ্যাপে প্রেরণ করে।

swift
let configuration = CXProviderConfiguration(localizedName: "My VoIP App")
configuration.supportedHandleTypes = [.phoneNumber, .generic]
configuration.maximumCallsPerCallGroup = 1

let provider = CXProvider(configuration: configuration)
provider.setDelegate(self, queue: .main)

CXCallController — কল পরিচালনা

CXCallController ক্লায়েন্ট অবজেক্ট যার মাধ্যমে অ্যাপ কলগুলিতে ক্রিয়া অনুরোধ করে: শুরু, শেষ, হোল্ড, সুইচ। অনুরোধগুলি CXTransaction-এর মাধ্যমে CallKit-এ পাঠানো হয়, যাতে CXAction অবজেক্টের একটি অ্যারে থাকে। CallKit প্রতিটি ক্রিয়া বৈধতা দেয় এবং এটি বর্তমান অবস্থায় অনুমোদিত হলে তা সম্পাদন করে।

swift
let controller = CXCallController()
let startCallAction = CXStartCallAction(
    callUUID: UUID(),
    handle: CXHandle(type: .phoneNumber, value: "+15551234567")
)
startCallAction.isVideo = true
controller.request(CXTransaction(action: startCallAction))

CXProviderDelegate — ইভেন্ট হ্যান্ডলিং

প্রদানকারী ডেলিগেট CallKit থেকে সমস্ত ইভেন্ট গ্রহণ করে। গুরুত্বপূর্ণ পদ্ধতি হল providerDidBegin, যা সংকেত দেয় যে কল শুরু হয়েছে। provider:performAnswerCallAction-এ, অ্যাপকে অডিও সেশন শুরু করতে হবে: AVAudioSession সক্রিয় করতে হবে এবং মিডিয়া ট্রান্সমিশন শুরু করতে হবে। যদি অ্যাপ সীমিত সময়ের মধ্যে অডিও সেশন সক্রিয় না করে, CallKit কল শেষ করবে।

  • providerDidBegin — কল শুরু, অডিও প্রস্তুত করুন
  • provider:performAnswerCallAction — ব্যবহারকারী উত্তর দিয়েছেন, AVAudioSession সক্রিয়করণ প্রয়োজন
  • provider:performEndCallAction — কল শেষ, মিডিয়া বন্ধ করুন
  • provider:performSetMutedCallAction — মাইক্রোফোন টগল

ইনকামিং কলের জন্য PushKit-এর CallKit-এর সাথে ইন্টিগ্রেশন

PushKit ইনকামিং VoIP কল CallKit-এ পৌঁছে দেওয়ার জন্য একটি অপরিহার্য উপাদান। সাধারণ push বিজ্ঞপ্তিগুলির (APNs) অপ্রত্যাশিত বিলম্ব থাকে এবং অ্যাপ ব্যাকগ্রাউন্ডে থাকলে ডেলিভারির গ্যারান্টি দেয় না। PushKit তাত্ক্ষণিক VoIP বিজ্ঞপ্তি ডেলিভারির জন্য Apple সার্ভারের সাথে একটি স্থায়ী TCP সংযোগ ব্যবহার করে, যা রিয়েল-টাইম কলের জন্য গুরুত্বপূর্ণ।

কার্যপ্রবাহ: সার্ভার PushKit-এর মাধ্যমে VoIP বিজ্ঞপ্তি পাঠায় → অ্যাপ এটি pushRegistry:didReceiveIncomingPushWithPayload-এ গ্রহণ করে → অ্যাপ CXProvider-এর মাধ্যমে তাত্ক্ষণিকভাবে ইনকামিং কল প্রদর্শন করে → CallKit সিস্টেম কল স্ক্রিন দেখায়। সবকিছু সেকেন্ডের ভগ্নাংশে ঘটে, এবং ব্যবহারকারী কলটি একই সময়ে দেখে যখন এটি সার্ভারে আসে।

iOS 13 থেকে শুরু করে, Apple একটি বিধিনিষেধ আরোপ করেছে: VoIP বিজ্ঞপ্তিগুলি শুধুমাত্র ইনকামিং কল নির্দেশ করার জন্য ব্যবহার করা উচিত। ব্যাকগ্রাউন্ড ডেটা লোডিং বা বিষয়বস্তু আপডেটের জন্য PushKit ব্যবহার নিষিদ্ধ — এই ধরনের অ্যাপ পর্যালোচনায় প্রত্যাখ্যাত হতে পারে। এই পরিবর্তন VoIP ইকোসিস্টেমকে আরও পূর্বানুমানযোগ্য করে তুলেছে, কারণ সমস্ত PushKit বিজ্ঞপ্তি এখন কল-সম্পর্কিত হওয়ার গ্যারান্টিযুক্ত।

ইনকামিং PushKit বিজ্ঞপ্তি প্রক্রিয়াকরণের উদাহরণ

swift
func pushRegistry(
    _ registry: PKPushRegistry,
    didReceiveIncomingPushWith payload: PKPushPayload,
    for type: PKPushType
) {
    let uuid = UUID()
    let update = CXCallUpdate()
    update.remoteHandle = CXHandle(
        type: .phoneNumber,
        value: payload.dictionaryPayload["caller"]
    )
    update.hasVideo = false
    
    provider.reportNewIncomingCall(with: uuid, update: update)
}

Call Directory Extension: নম্বর ব্লক করা এবং সনাক্ত করা

Call Directory Extension একটি অ্যাপ এক্সটেনশন যা অ্যাপকে সিস্টেমে সনাক্তকরণ (কলার নাম প্রদর্শন) এবং ব্লক করার জন্য নম্বরের তালিকা প্রদান করতে দেয়। এক্সটেনশন মূল অ্যাপ থেকে স্বাধীনভাবে কাজ করে: সিস্টেম সক্রিয়করণের সময় এক্সটেনশন থেকে ডেটা লোড করে, এবং সমস্ত পরবর্তী ক্রিয়া অ্যাপের অংশগ্রহণ ছাড়াই সম্পাদিত হয়, যা সম্পদ সাশ্রয় করে এবং নিরাপত্তা বাড়ায়।

এক্সটেনশন ডেটা পরিচালনার জন্য CXCallDirectoryManager ব্যবহার করে। অ্যাপ মূল প্রক্রিয়ার মাধ্যমে এক্সটেনশনের ডেটাবেসে নম্বর যোগ করে, এবং তারপর সিস্টেম ক্যাশ আপডেট করার জন্য reloadExtension কল করে। Apple সিস্টেমে অপ্রয়োজনীয় লোড এড়াতে প্রতি ঘন্টায় একবারের বেশি ডেটা আপডেট না করার সুপারিশ করে।

Call Directory Extension বাস্তবায়নের উদাহরণ

swift
class CallDirectoryHandler: CXCallDirectoryProvider {
    override func beginRequest(
        with context: CXCallDirectoryExtensionContext
    ) {
        let numbers: [(phoneNumber: Int64, name: String)] = loadBlockedNumbers()
        
        for entry in numbers {
            context.addIdentificationEntry(
                withNextSequentialPhoneNumber: entry.phoneNumber,
                label: entry.name
            )
        }
        context.completeRequest()
    }
}
CXCallDirectoryManager পদ্ধতিউদ্দেশ্য
reloadExtensionসিস্টেম ক্যাশের বাধ্যতামূলক আপডেট
getEnabledStatusএক্সটেনশন ব্যবহারকারী দ্বারা সক্রিয় কিনা তা পরীক্ষা করুন
openSettingsএক্সটেনশন সেটিংস স্ক্রিনে যান

Swift-এ CallKit ইন্টিগ্রেশনের উদাহরণ

সম্পূর্ণ CallKit ইন্টিগ্রেশনের জন্য তিনটি উপাদানের সেটআপ প্রয়োজন: প্রদানকারী কনফিগারেশন, PushKit-এর মাধ্যমে ইনকামিং কল হ্যান্ডলিং, এবং অডিও সেশন পরিচালনা। নীচে একটি ন্যূনতম কার্যকরী উদাহরণ যা একটি ইনকামিং VoIP কল হ্যান্ডল করে, CallKit-এর মাধ্যমে এটি প্রদর্শন করে এবং অডিও সক্রিয় করে।

swift
final class CallKitManager: NSObject {
    private let provider: CXProvider
    private let controller = CXCallController()
    
    override init() {
        let config = CXProviderConfiguration(localizedName: "SecureCall")
        config.supportedHandleTypes = [.phoneNumber]
        config.maximumCallGroups = 1
        self.provider = CXProvider(configuration: config)
        super.init()
        provider.setDelegate(self, queue: .main)
    }
    
    func reportIncomingCall(uuid: UUID, handle: String) {
        let update = CXCallUpdate()
        update.remoteHandle = CXHandle(type: .phoneNumber, value: handle)
        provider.reportNewIncomingCall(with: uuid, update: update)
    }
}

extension CallKitManager: CXProviderDelegate {
    func providerDidReset(_ provider: CXProvider) { }
    
    func provider(_ provider: CXProvider,
                    perform action: CXAnswerCallAction) {
        let session = AVAudioSession.sharedInstance()
        try? session.setCategory(.playAndRecord)
        try? session.setActive(true)
        action.fulfill()
    }
}

বিভিন্ন প্ল্যাটফর্মে CallKit-এর সীমাবদ্ধতা এবং বৈশিষ্ট্য

CallKit iOS, macOS এবং iPadOS-এ উপলব্ধ, তবে ফ্রেমওয়ার্কের আচরণ প্ল্যাটফর্মের মধ্যে ভিন্ন। iOS-এ CallKit সম্পূর্ণরূপে কাজ করে: সিস্টেম কল স্ক্রিন, লক স্ক্রিন, CarPlay ইন্টিগ্রেশন। iPadOS-এ কল পূর্ণ-স্ক্রিন ইন্টারফেসের পরিবর্তে সিস্টেম ব্যানার হিসাবে প্রদর্শিত হয়। macOS-এ CallKit macOS 10.14 Mojave থেকে উপলব্ধ, তবে শুধুমাত্র Catalyst দিয়ে তৈরি বা সরাসরি AppKit ব্যবহার করে এমন Mac অ্যাপের জন্য।

মূল সীমাবদ্ধতা — CallKit watchOS-এ সমর্থিত নয়। Apple Watch ডেভেলপাররা ঘড়িতে সিস্টেম ইন্টারফেসের মাধ্যমে VoIP কল প্রদর্শন করতে পারেন না। পরিবর্তে, watchOS অ্যাপ WCSession-এর মাধ্যমে কল বিজ্ঞপ্তি গ্রহণ করে এবং নিজস্ব কল স্ক্রিন বাস্তবায়ন করতে হয়। এছাড়াও, CallKit সিমুলেটরে কাজ করে না — VoIP বৈশিষ্ট্য পরীক্ষা শুধুমাত্র একটি শারীরিক ডিভাইসে সম্ভব।

iOS, iPadOS এবং macOS-এ CallKit তুলনা

বৈশিষ্ট্যiOSiPadOSmacOS
সিস্টেম কল স্ক্রিনপূর্ণ স্ক্রিনব্যানারব্যানার
লক স্ক্রিনহ্যাঁনানা
CarPlayহ্যাঁনানা
কল ডিরেক্টরিহ্যাঁহ্যাঁনা
সাম্প্রতিক ইতিহাসহ্যাঁহ্যাঁহ্যাঁ

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

CallKit-এর সাথে PushKit ব্যবহার করা কি বাধ্যতামূলক?

হ্যাঁ, ইনকামিং কলের জন্য PushKit বাধ্যতামূলক। শুধুমাত্র PushKit ঘুমন্ত বা বন্ধ অ্যাপে VoIP বিজ্ঞপ্তির তাত্ক্ষণিক ডেলিভারির গ্যারান্টি দেয়, যা CallKit-এর মাধ্যমে সময়মতো কল প্রদর্শনের জন্য গুরুত্বপূর্ণ।

CallKit কি ভিডিও কলের জন্য ব্যবহার করা যেতে পারে?

হ্যাঁ, CallKit অডিও এবং ভিডিও সমর্থন করে। CXProvider কনফিগার করার সময় supportsVideo = true সেট করুন, এবং CXStartCallAction-এ isVideo = true সেট করুন। সিস্টেম কল ইন্টারফেসে ভিডিও ক্যামেরা আইকন সঠিকভাবে প্রদর্শন করবে।

শারীরিক ডিভাইস ছাড়া কীভাবে CallKit পরীক্ষা করবেন?

কোনোভাবেই নয় — CallKit সিমুলেটরে কাজ করে না। পরীক্ষার জন্য একটি শারীরিক iOS বা iPadOS ডিভাইস ব্যবহার করুন। macOS-এ, মাইক্রোফোন সহ একটি বাস্তব Mac-এ পরীক্ষা করা যেতে পারে।

দুটি অ্যাপ কি একসাথে CallKit ব্যবহার করতে পারে?

হ্যাঁ, প্রতিটি অ্যাপ নিজস্ব CXProvider নিবন্ধন করে। সিস্টেম বিভিন্ন অ্যাপ থেকে কল সঠিকভাবে পরিচালনা করে এবং সাম্প্রতিক কলগুলিতে পৃথক কল হিসাবে প্রদর্শন করে। ব্যবহারকারী দেখতে পারেন কোন অ্যাপ থেকে কল এসেছে।

কলের উত্তর দেওয়ার পরে AVAudioSession সক্রিয় না করলে কী হবে?

CallKit স্বয়ংক্রিয়ভাবে কল শেষ করবে যদি অ্যাপ সীমিত সময়ের মধ্যে অডিও সেশন সক্রিয় না করে। টাইমারটি এমনভাবে কাজ করে যাতে সিস্টেম বাস্তব অডিও স্ট্রিম ছাড়া কল অবস্থায় না থাকে।

সারাংশ

  • CallKit — iOS, iPadOS এবং macOS-এ সিস্টেম ফোন অ্যাপে VoIP কল ইন্টিগ্রেট করার জন্য Apple ফ্রেমওয়ার্ক, iOS 10 থেকে উপলব্ধ।
  • CXProvider এবং CXCallController — CallKit আর্কিটেকচারের প্রধান ক্লাস, কল পরিচালনার জন্য প্রদানকারী-ক্লায়েন্ট প্যাটার্ন বাস্তবায়ন করে।
  • PushKit — ইনকামিং VoIP বিজ্ঞপ্তির তাত্ক্ষণিক ডেলিভারির জন্য CallKit-এর অপরিহার্য সহযোগী, স্থায়ী TCP সংযোগের মাধ্যমে কাজ করে।
  • Call Directory Extension সিস্টেম স্তরে নম্বর ব্লক এবং সনাক্ত করতে দেয়, যা স্প্যাম-বিরোধী অ্যাপের জন্য উপযোগী।
  • CallKit watchOS-এ সমর্থিত নয় এবং সিমুলেটরে কাজ করে না — VoIP বৈশিষ্ট্য পরীক্ষার জন্য শারীরিক ডিভাইস প্রয়োজন।
  • CallKit-এর আচরণ প্ল্যাটফর্ম অনুসারে ভিন্ন: iOS-এ — পূর্ণ-স্ক্রিন ইন্টারফেস, iPadOS এবং macOS-এ — সিস্টেম ব্যানার।
  • কলের উত্তর দেওয়ার পরে AVAudioSession সক্রিয় করা বাধ্যতামূলক — এটি ছাড়া CallKit টাইমআউটে কল শেষ করবে।

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

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

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

আরও পড়ুন