# دریافت تماس

برای دریافت تماس باید از PushKit استفاده کنید . PushKit برخلاف UserNotifications به کاربر badges, alerts sounds نمایش نمی دهد .

# مزایای PushKit نسبت به UserNotifications :

  • اگر برنامه شما در حال اجرا نباشد، سیستم به طور خودکار پس از دریافت اعلان آن را راه اندازی می کند.
  • اگر برنامه شما در پس زمینه باشد، پردازش Notification اجرا می شود.
  • PushKit اولویت ارسال بیشتری نسبت به UserNotifications دارد.

نکته

برای استفاده از PushKit نیازمند Certificate از نوع VoIP Services Certificate هستیم.

برای هندل کردن PushNotification تماس از طریق PushKit به صورت زیر اقدام کنید :

extension MainViewController: PKPushRegistryDelegate {

    func registerForVoIPPushes() {

        self.voipRegistry = PKPushRegistry(queue: nil)
        self.voipRegistry.delegate = self
        self.voipRegistry.desiredPushTypes = [.voIP]

    }

    func pushRegistry(_ registry: PKPushRegistry, didInvalidatePushTokenForType type: PKPushType) {
        
    }

    func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, forType type: PKPushType) {
        let pushNotificationToken = pushCredentials.token.map { String(format: "%02.2hhx", $0) }.joined()
        println("pushCredentials: \(pushNotificationToken!)")
    }

    @available(iOS, introduced: 8.0, deprecated: 11.0)
    func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, forType type: PKPushType){

        // @TODO - get apn payload and parse as json  to access call id and access token

    }

    @available(iOS 11.0, *)
    func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
    
        // @TODO - get apn payload and parse as json  to access call id and access token

    }
}