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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें