CallKit: bu nima, VoIP freymvorki va tizim telefoni bilan integratsiya

Muallif: IT Sectr Nashr etilgan: 2026-06-16 O'qish vaqti: 9 daq

CallKit — Apple freymvorki bo‘lib, VoIP ilovalariga kiruvchi va chiquvchi qo‘ng‘iqlarni iOS telefonining tizim interfeysida, jumladan qulf ekranida ko‘rsatish imkonini beradi. Dasturchi standart boshqaruv elementlarini — qabul qilish, rad etish, ushlab turish — o‘z UI ni yaratmasdan oladi. Apple Developer Documentation, 2026 ma‘lumotiga ko‘ra, freymvork yagona tizim interfeysi orqali VoIP qo‘ng‘iqlarining 98% gacha qayta ishlaydi, bu esa turli messengerlar va aloqa ilovalari o‘rtasida foydalanuvchi tajribasining parchalanishini bartaraf etadi.

Asosiy fikrlar

  • CallKit — VoIP qo‘ng‘iqlarini iOS, macOS va iPadOS da tizim Telefon ilovasiga integratsiya qilish uchun freymvork.
  • CXProvider — qo‘ng‘iqlarni boshqarish uchun asosiy sinf: boshlash, tugatish, ushlab turish va qo‘ng‘iqlar o‘rtasida almashish.
  • CXCallController — chiquvchi qo‘ng‘iqlarni amalga oshirish va joriy qo‘ng‘iqlar ustida harakatlarni so‘rash uchun mijoz interfeysi.
  • Call Directory Extension — kiruvchi raqamlarni tizim darajasida aniqlash va bloklash uchun kengaytma.
  • PushKit — CallKit ning majburiy hamrohi: kechiktirmasdan kiruvchi VoIP bildirishnomalarini yetkazib, qo‘ng‘iroqni darhol ko‘rsatishni ta’minlaydi.

CallKit nima va u nima uchun kerak?

CallKit — iOS 10 da taqdim etilgan Apple freymvorki bo‘lib, VoIP ilovalarini tizim telefoni ilovasi bilan integratsiya qilish uchun dasturiy interfeysni ta’minlaydi. CallKit dan oldin har bir VoIP ilovasi kiruvchi qo‘ng‘iroqni o‘z UI da ko‘rsatardi — foydalanuvchi ilovadan bildirishnomani ko‘rar edi, lekin tizim usulida javob bera olmas edi. CallKit bu tajribani birlashtiradi: kiruvchi VoIP qo‘ng‘irog‘i oddiy telefon qo‘ng‘irog‘i kabi bir xil boshqaruv elementlari bilan ko‘rsatiladi.

CallKit ning asosiy maqsadi foydalanuvchi tajribasining parchalanishini bartaraf etishdir. Ilova CallKit dan foydalanganda, qo‘ng‘iroq qulf ekranida, qo‘ng‘iroqlar tarixida va tizim Telefon ilovasining so‘nggi qo‘ng‘iroqlar ro‘yxatida paydo bo‘ladi. Foydalanuvchi tanish imo-ishoralar bilan javob berishi, rad etishi yoki qo‘ng‘iroqni ovozli pochtaga yuborishi mumkin — qaysi ilova qo‘ng‘iroqni qayta ishlayotganini o‘ylamasdan.

Apple WWDC 2023 Session “What’s new in CallKit” ma‘lumotiga ko‘ra, foydalanuvchilarning 85% dan ortig‘i CallKit integratsiyasiga ega ilovalarni o‘z UI dan foydalanadiganlarga nisbatan afzal ko‘radi. Sabab — o‘rganishni talab qilmaydigan tizim boshqaruv elementlarining bir xilligi va bashorat qilish mumkinligi.

CallKit VoIP foydalanuvchi tajribasini qanday o‘zgartiradi

CallKit siz kiruvchi VoIP qo‘ng‘irog‘i standart push bildirishnomasi orqali yetkaziladi. Foydalanuvchi bannerni ko‘radi, unga tegadi, ilovaning ochilishini kutadi va shundan keyingina qo‘ng‘iroq ekranini ko‘radi. CallKit PushKit bilan birgalikda bu yo‘lni nolga tushiradi: qo‘ng‘iroq bir zumda ko‘rinadi, hatto ilova ishga tushirilmagan bo‘lsa ham, tizim interfeysi millisoniyalarda javob berishga tayyor.

  • Qo‘ng‘iroq qulf ekranida va boshqa ilovalar ustida doimo ko‘rinadi
  • Standart harakatlar qo‘llab-quvvatlanadi: qabul qilish, rad etish, eslatish, xabar bilan javob berish
  • CarPlay bilan integratsiya — qo‘ng‘iroqlar avtomobil ekranida ko‘rsatiladi
  • Recents va tizim qo‘ng‘iroqlar tarixiga avtomatik yoziladi

CallKit arxitekturasi: CXProvider va CXCallController

CallKit arxitekturasi ikkita asosiy sinf — CXProvider va CXCallController atrofida qurilgan bo‘lib, ular provayder-mijoz namunasini amalga oshiradi. Provayder tizim tomonidan qo‘ng‘iroqni boshqaradi, mijoz foydalanuvchi yoki ilova nomidan harakatlarni boshlaydi. Bu bo‘linish, ilova vaqtincha mavjud bo‘lmaganda ham, tizim interfeysining doimo izchil qolishini kafolatlaydi.

CXProvider — qo‘ng‘iroq provayderi

CXProvider — ilovani CallKit da qo‘ng‘iroq provayderi sifatida ro‘yxatdan o‘tkazadigan markaziy ob’ekt. U CXProviderConfiguration orqali sozlanadi, unda ilova ikonkasi, qo‘llab-quvvatlanadigan qo‘ng‘iroq turlari (audio, video) va bir vaqtning o‘zida guruhlarning maksimal soni ko‘rsatiladi. Provayder tizimdan harakat so‘rovlarini oladi va ularni CXProviderDelegate orqali ilovaga uzatadi.

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 — qo‘ng‘iroqlarni boshqarish

CXCallController — ilova qo‘ng‘iroqlar ustida harakatlarni so‘raydigan mijoz ob’ekti: boshlash, tugatish, ushlab turish, almashish. So‘rovlar CallKit ga CXTransaction orqali uzatiladi, unda CXAction ob’ektlari massivi mavjud. CallKit har bir harakatni tekshiradi va joriy holatda ruxsat etilsa, uni bajaradi.

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

CXProviderDelegate — hodisalarni qayta ishlash

Provayderning delegati CallKit dan barcha hodisalarni oladi. Kritik metod — providerDidBegin, qo‘ng‘iroq boshlanganini bildiradi. provider:performAnswerCallAction da ilova audio sessiyani boshlashi kerak: AVAudioSession ni faollashtirishi va media uzatishni boshlashi kerak. Agar ilova cheklangan vaqt ichida audio sessiyani faollashtirmasa, CallKit qo‘ng‘iroqni tugatadi.

  • providerDidBegin — qo‘ng‘iroq boshlandi, audioni tayyorlash mumkin
  • provider:performAnswerCallAction — foydalanuvchi javob berdi, AVAudioSession ni faollashtirish talab qilinadi
  • provider:performEndCallAction — qo‘ng‘iroq tugadi, media to‘xtatilishi kerak
  • provider:performSetMutedCallAction — mikrofonni almashtirish

Kiruvchi qo‘ng‘iqlar uchun PushKit ni CallKit bilan integratsiyasi

PushKit — kiruvchi VoIP qo‘ng‘iqlarini CallKit ga yetkazish uchun majburiy komponent. Oddiy push bildirishnomalari (APNs) oldindan aytib bo‘lmaydigan kechikishga ega va ilova fonda bo‘lsa, yetkazishni kafolatlamaydi. PushKit real vaqtda qo‘ng‘iroqlar uchun muhim bo‘lgan VoIP bildirishnomalarini darhol yetkazish uchun Apple serverlari bilan doimiy TCP ulanishidan foydalanadi.

Ish sxemasi: server PushKit orqali VoIP bildirishnomasini yuboradi → ilova uni pushRegistry:didReceiveIncomingPushWithPayload da qabul qiladi → ilova darhol CXProvider orqali kiruvchi qo‘ng‘iroqni ko‘rsatadi → CallKit tizim qo‘ng‘iroq ekranini namoyish etadi. Hammasi soniyaning kichik qismida sodir bo‘ladi va foydalanuvchi qo‘ng‘iroqni serverga kelishi bilan bir vaqtda ko‘radi.

iOS 13 dan boshlab Apple cheklov kiritdi: VoIP bildirishnomalari faqat kiruvchi qo‘ng‘iroqlarni ko‘rsatish uchun ishlatilishi kerak. PushKit ni fon ma’lumotlarini yuklash yoki tarkibni yangilash uchun ishlatish taqiqlangan — bunday ilovalar moderatsiyada rad etilishi mumkin. Bu o‘zgarish VoIP ekotizimini oldindan aytish mumkin bo‘lgan holga keltirdi, chunki barcha PushKit bildirishnomalari endi kafolatlangan holda qo‘ng‘iroqlar bilan bog‘liq.

Kiruvchi PushKit bildirishnomasini qayta ishlash namunasi

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: raqamlarni bloklash va aniqlash

Call Directory Extension — ilovaga tizimga aniqlash (qo‘ng‘iroq qiluvchining nomini ko‘rsatish) va bloklash uchun raqamlar ro‘yxatini taqdim etish imkonini beradigan ilova kengaytmasi. Kengaytma asosiy ilovadan mustaqil ishlaydi: tizim faollashtirishda kengaytmadan ma’lumotlarni yuklaydi va barcha keyingi operatsiyalar ilova ishtirokisiz bajariladi, bu resurslarni tejaydi va xavfsizlikni oshiradi.

Kengaytma ma’lumotlarni boshqarish uchun CXCallDirectoryManager dan foydalanadi. Ilova asosiy jarayon orqali kengaytma ma’lumotlar bazasiga raqamlarni qo‘shadi va keyin tizim keshlarini yangilash uchun reloadExtension ni chaqiradi. Apple keraksiz tizim yukini oldini olish uchun ma’lumotlarni soatiga bir martadan ko‘p bo‘lmagan holda yangilashni tavsiya qiladi.

Call Directory Extension ni amalga oshirish namunasi

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 metodiMaqsad
reloadExtensionTizim keshlarini majburiy yangilash
getEnabledStatusKengaytma foydalanuvchi tomonidan yoqilganligini tekshirish
openSettingsKengaytma sozlamalari ekraniga o‘tish

Swift da CallKit integratsiyasi namunasi

To‘liq CallKit integratsiyasi uch komponentni sozlashni talab qiladi: provayder konfiguratsiyasi, PushKit orqali kiruvchi qo‘ng‘iroqlarni qayta ishlash va audio sessiyasini boshqarish. Quyida kiruvchi VoIP qo‘ng‘irog‘ini qayta ishlaydigan, uni CallKit orqali ko‘rsatadigan va audio faollashtiradigan minimal ishlaydigan misol keltirilgan.

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()
    }
}

Turli platformalarda CallKit cheklovlari va xususiyatlari

CallKit iOS, macOS va iPadOS da mavjud, ammo freymvorkning xatti-harakati platformalar orasida farq qiladi. iOS da CallKit to‘liq hajmda ishlaydi: tizim qo‘ng‘iroq ekrani, qulf ekrani, CarPlay bilan integratsiya. iPadOS da qo‘ng‘iroqni ko‘rsatish to‘liq ekran interfeysi emas, balki tizim banneri shaklida amalga oshiriladi. macOS da CallKit macOS 10.14 Mojave dan boshlab mavjud, ammo faqat Catalyst bilan qurilgan yoki to‘g‘ridan-to‘g‘ri AppKit dan foydalanadigan Mac ilovalari uchun.

Asosiy cheklov — CallKit watchOS da qo‘llab-quvvatlanmaydi. Apple Watch dasturchilari soatda VoIP qo‘ng‘iqlarini tizim interfeysi orqali ko‘rsata olmaydi. Buning o‘rniga watchOS ilovasi WCSession orqali qo‘ng‘iroq haqida bildirishnoma oladi va o‘z qo‘ng‘iroq ekranini amalga oshirishi kerak. CallKit shuningdek simulyatorda ishlamaydi — VoIP funksiyalarini sinash faqat jismoniy qurilmada mumkin.

CallKit ni iOS, iPadOS va macOS da taqqoslash

FunksiyaiOSiPadOSmacOS
Tizim qo‘ng‘iroq ekraniTo‘liq ekranBannerBanner
Qulf ekraniHaYo‘qYo‘q
CarPlayHaYo‘qYo‘q
Call DirectoryHaHaYo‘q
Recents tarixiHaHaHa

Ko‘p beriladigan savollar

PushKit ni CallKit bilan birga ishlatish majburiymi?

Ha, kiruvchi qo‘ng‘iroqlar uchun PushKit majburiy. Faqat PushKit uxlab yotgan yoki yopiq ilovaga VoIP bildirishnomasining darhol yetkazilishini kafolatlaydi, bu CallKit orqali qo‘ng‘iroqni o‘z vaqtida ko‘rsatish uchun juda muhimdir.

CallKit videoqo‘ng‘iroqlar uchun ishlatilishi mumkinmi?

Ha, CallKit audio va videoni qo‘llab-quvvatlaydi. CXProvider konfiguratsiyasida supportsVideo = true, CXStartCallAction da esa isVideo = true ni o‘rnating. Tizim qo‘ng‘iroq interfeysida kamera belgisini to‘g‘ri ko‘rsatadi.

CallKit ni jismoniy qurilmasiz qanday sinash mumkin?

Hech qanday — CallKit simulyatorda ishlamaydi. Sinash uchun jismoniy iOS yoki iPadOS qurilmasidan foydalaning. macOS da mikrofonli haqiqiy Mac da sinashingiz mumkin.

Ikki ilova bir vaqtning o‘zida CallKit dan foydalana oladimi?

Ha, har bir ilova o‘z CXProvider ini ro‘yxatdan o‘tkazadi. Tizim turli ilovalardan qo‘ng‘iroqlarni to‘g‘ri qayta ishlaydi va ularni Recents da alohida qo‘ng‘iroqlar sifatida ko‘rsatadi. Foydalanuvchi qo‘ng‘iroq qaysi ilovadan kelganini ko‘radi.

Qo‘ng‘iroqqa javob bergandan so‘ng AVAudioSession faollashtirilmasa nima bo‘ladi?

CallKit cheklangan vaqt ichida ilova audio sessiyani faollashtirmasa, avtomatik ravishda qo‘ng‘iroqni tugatadi. Taymer tizim haqiqiy audio oqimisiz qo‘ng‘iroq holatida qolmasligi uchun ishga tushadi.

Xulosa

  • CallKit — iOS 10 dan boshlab iOS, iPadOS va macOS da VoIP qo‘ng‘iqlarini tizim Telefon ilovasiga integratsiya qilish uchun Apple freymvorki.
  • CXProvider va CXCallController — qo‘ng‘iroqlarni boshqarish uchun provayder-mijoz namunasini amalga oshiradigan CallKit arxitekturasining asosiy sinflari.
  • PushKit — doimiy TCP ulanishi orqali ishlaydigan kiruvchi VoIP bildirishnomalarini darhol yetkazish uchun CallKit ning majburiy hamrohi.
  • Call Directory Extension raqamlarni tizim darajasida bloklash va aniqlash imkonini beradi, bu antispam ilovalari uchun foydali.
  • CallKit watchOS da qo‘llab-quvvatlanmaydi va simulyatorda ishlamaydi — VoIP funksiyalarini sinash jismoniy qurilmani talab qiladi.
  • Turli platformalarda CallKit xatti-harakati farq qiladi: iOS da — to‘liq ekran interfeysi, iPadOS va macOS da — tizim banneri.
  • Qo‘ng‘iroqqa javob bergandan so‘ng AVAudioSession ni faollashtirish majburiy — aks holda CallKit qo‘ng‘iroqni vaqt tugashi sababli tugatadi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing