Swift CallKit общаться звонящего и получателя, когда приложение закрывается - PullRequest
0 голосов
/ 28 сентября 2018

Я пытался создать приложение VoIP, используя callkit и pushkit.Когда вызывающий абонент нажимает кнопку вызова, получатель получает экран входящего вызова с pushkit, и вызывающий абонент переходит к экрану вызова и ожидает ответа получателя.
Что мне нужно, когда вызывающий абонент отменил вызов, экран пользователя получателя необходимо закрыть перед ответом или отклонением.Но когда получатель нажимает кнопку «Ответить» или «Отклонить», зеленая полоса в верхней части экрана вызывающего абонента не отвечает на запрос «Вернуться к вызову».Но он должен запустить таймер или автоматически закрыться в соответствии с ответом получателя.
Это моя функция отправки вызова.(Глобальная переменная моего провайдера)

_provider = CXProvider(configuration: CXProviderConfiguration(localizedName: "app"))
    _provider.setDelegate(self, queue: nil)
let controller = CXCallController()
let transaction = CXTransaction(action: CXStartCallAction(call: uuid, handle: CXHandle(type: .generic, value: "Pete Za")))
controller.request(transaction, completion: { error in })

let vc = CallRoomViewController()
vc.modalPresentationStyle = .overFullScreen
vc.modalTransitionStyle = .crossDissolve
self.present(vc, animated: true)

Моя функция pushRegistry AppDelegate.

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType) {

    print("PushType: \(type)")
    print("---PushPayload---")

    let json = payload.dictionaryPayload as NSDictionary
    print(payload.dictionaryPayload as NSDictionary)
    let aps = json["aps"] as! NSDictionary
    let callerId = aps["callerId"] as! String
    let callerImg = aps["callerImg"] as! String
    let callerName = aps["callerName"] as! String
    let receiverId = aps["receiverId"] as! String
    let receiverImg = aps["receiverImg"] as! String
    let receiverName = aps["receiverName"] as! String
    let roomNo = aps["roomNo"] as! String
    let token = aps["token"] as! String
    let uuidstr = aps["uuid"] as! String
    let uuid = UUID(uuidString: uuidstr) as! UUID


    let config = CXProviderConfiguration(localizedName: "app")
    config.iconTemplateImageData = UIImagePNGRepresentation(UIImage(named: "speaker")!)
    config.ringtoneSound = "ringing.mp3"
    config.supportsVideo = false;
    _provider = CXProvider(configuration: config)
    _provider.setDelegate(self, queue: nil)
    let update = CXCallUpdate()
    update.remoteHandle = CXHandle(type: .generic, value: callerName)
    update.hasVideo = false
    _provider.reportNewIncomingCall(with: uuid, update: update, completion: { error in })

  }

методы делегата провайдера:

func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
    action.fulfill()

    let vc = CallRoomViewController()
    self.window?.rootViewController = vc
    self.window?.makeKeyAndVisible()
  }

  func provider(_ provider: CXProvider, perform action: CXEndCallAction) {
    action.fulfill()

  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...