CallKit: یہ کیا ہے، VoIP فریم ورک اور سسٹم فون کے ساتھ انضمام

مصنف: IT Sectr اشاعت: 2026-06-16 مطالعے کا وقت: 9 منٹ

CallKit ایک Apple فریم ورک ہے جو VoIP ایپلی کیشنز کو iOS سسٹم فون انٹرفیس میں آنے والی اور جانے والی کالز دکھانے کی اجازت دیتا ہے، جس میں لاک اسکرین بھی شامل ہے۔ ڈیولپر کو معیاری کنٹرولز ملتے ہیں — قبول کرنا، مسترد کرنا، کال کو ہولڈ کرنا — اپنا یوزر انٹرفیس بنانے کی ضرورت کے بغیر۔ 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 ایپ آنے والی کالوں کو اپنے یوزر انٹرفیس میں دکھاتی تھی — صارف ایپ سے اطلاع دیکھتا تھا لیکن سسٹم طریقے سے جواب نہیں دے سکتا تھا۔ CallKit اس تجربے کو یکجا کرتا ہے: ایک آنے والی VoIP کال معمول کی فون کال کی طرح اسی کنٹرولز کے ساتھ ظاہر ہوتی ہے۔

CallKit کا بنیادی مقصد صارف کے تجربے کی تقسیم کو ختم کرنا ہے۔ جب کوئی ایپ CallKit استعمال کرتی ہے، تو کال لاک اسکرین، کال ہسٹری اور سسٹم فون ایپ کی حالیہ کالوں کی فہرست میں ظاہر ہوتی ہے۔ صارف واقف اشاروں سے کال کا جواب دے سکتا ہے، مسترد کر سکتا ہے یا وائس میل پر بھیج سکتا ہے — بغیر یہ سوچے کہ کون سی ایپ کال کو ہینڈل کر رہی ہے۔

Apple WWDC 2023 سیشن “What’s new in CallKit” کے مطابق، 85% سے زیادہ صارفین کالوں کے لیے اپنا یوزر انٹرفیس استعمال کرنے والی ایپس کے مقابلے CallKit انضمام والی ایپس کو ترجیح دیتے ہیں۔ وجہ سسٹم کنٹرولز کی مستقل مزاجی اور پیش گوئی ہے جو سیکھنے کی ضرورت نہیں ہوتی۔

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 10 سے دستیاب، iOS، iPadOS اور macOS پر سسٹم فون ایپ میں VoIP کالز کو ضم کرنے کے لیے Apple فریم ورک۔
  • CXProvider اور CXCallController — CallKit آرکیٹیکچر کی اہم کلاسز، کال مینجمنٹ کے لیے فراہم کنندہ-کلائنٹ پیٹرن نافذ کرتی ہیں۔
  • PushKit — مستقل TCP کنکشن کے ذریعے کام کرنے والی، آنے والی VoIP اطلاعات کی فوری ترسیل کے لیے CallKit کا لازمی ساتھی۔
  • Call Directory Extension سسٹم لیول پر نمبروں کو بلاک اور شناخت کرنے کی اجازت دیتا ہے، جو سپام مخالف ایپس کے لیے مفید ہے۔
  • CallKit watchOS پر تعاون یافتہ نہیں ہے اور سمیلیٹر پر کام نہیں کرتا — VoIP خصوصیات کی جانچ کے لیے فزیکل ڈیوائس درکار ہے۔
  • CallKit کا رویہ پلیٹ فارم کے مطابق مختلف ہوتا ہے: iOS پر — فل سکرین انٹرفیس، iPadOS اور macOS پر — سسٹم بینر۔
  • کال کا جواب دینے کے بعد AVAudioSession کو فعال کرنا لازمی ہے — اس کے بغیر CallKit ٹائم آؤٹ پر کال ختم کر دے گا۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں