сделать VoIP звонок из журнала звонков в iOS - PullRequest
0 голосов
/ 28 декабря 2018

В моем приложении Voip я использую callkit для получения входящего вызова.используя следующий метод:

-(void)reportIncomingCall:(NSUUID*)UDID handle:(NSString*)handle{

Я вижу журнал этого входящего звонка в истории звонков моего iPhone собственного приложения звонка.

Я хотел сделатьисходящий вызов из приложения iPhone .Я работаю для приложений WhatsApp, Hangout и др.Но я не могу разбудить мое приложение, когда пытаюсь позвонить пользователю из журнала входящих вызовов.

- (NSUUID *)reportOutgoingCallContactIdentifier:(NSString *)identifier destination:(NSString *)name telNumber:(NSString *)telnum 

1 Ответ

0 голосов
/ 07 марта 2019

По сути, вам необходимо создать расширение Intents для вашей цели, чтобы обрабатывать аудиовызовы из собственной истории вызовов.

В Xcode:

Файл -> Новый -> Цель

Выберите Внутреннее расширение

Вот основной класс для расширения, как оно должно выглядеть

class IntentHandler: INExtension, INStartAudioCallIntentHandling {

func handle(intent: INStartAudioCallIntent, completion: @escaping (INStartAudioCallIntentResponse) -> Void) {
    let response: INStartAudioCallIntentResponse
    defer {
        completion(response)
    }

    // Ensure there is a person handle
    guard intent.contacts?.first?.personHandle != nil else {
        response = INStartAudioCallIntentResponse(code: .failure, userActivity: nil)
        return
    }

    let userActivity = NSUserActivity(activityType: String(describing: INStartAudioCallIntent.self))

    response = INStartAudioCallIntentResponse(code: .continueInApp, userActivity: userActivity)
}

}

Затем вам нужно предоставить URLScheme для вашего приложения, чтобы начать вызов VoIP, когда делегат приложения получает openURL

Вот расширение NSUserActivity, которое поможет вам определить намерение начального вызова

import Intents

@available(iOS 10.0, *)
protocol SupportedStartCallIntent {
    var contacts: [INPerson]? { get }
}

@available(iOS 10.0, *)
extension INStartAudioCallIntent: SupportedStartCallIntent {}

@available(iOS 10.0, *)
extension NSUserActivity {

    var startCallHandle: String? {
        guard let startCallIntent = interaction?.intent as? SupportedStartCallIntent else {
            return nil
        }
        return startCallIntent.contacts?.first?.personHandle?.value
    }

}

Вам также необходимо зарегистрировать свою схему URL в настройках цели:

Настройки цели Xcode, выбрать Информационную карточку, а в нижних Типах URL выберите +, чтобы добавить новый тип и дать емуимя, например voipCall

В AppDeledate переопределите следующую функцию

func application(_ application: UIApplication,
               continue userActivity: NSUserActivity,
               restorationHandler: @escaping ([Any]?) -> Void) -> Bool {

    if userActivity.startCallHandle {
        // START YOUR VOIP CALL HERE ----
    }
    return true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...