Синч видео не хочет работать на iOS (Swift)

Поэтому я хочу включить Sinch Video в приложении для iOS.

Для тестирования я создал SinchManaevger, который является синглтоном, и я устанавливаю его в AppDelegate:

class SinchManager: NSObject, SINClientDelegate, SINCallClientDelegate {

    static let sharedInstance = SinchManager()

    var client: SINClient?

    func initSinchClientWithUserId(id: String) {
        if client == nil {
            if case .Authenticated(let currentUser, _) = SessionManager.sharedInstance.state.value {

                self.client = Sinch.clientWithApplicationKey("xyz", applicationSecret: "xyz", environmentHost: "sandbox.sinch.com", userId: currentUser.username)
                print("sinchClient")
                print(client!)
                self.client!.delegate = self
                self.client!.setSupportCalling(true)
                self.client!.enableManagedPushNotifications()
                self.client!.start()
                self.client!.startListeningOnActiveConnection()

            }
        }
    }

    func clientDidStart(client: SINClient!) {
        print("clientDidStart")
        self.client!.callClient().delegate = self
    }

    func clientDidStop(client: SINClient!) {
        print("clientDidStop")
    }

    func clientDidFail(client: SINClient!, error: NSError!) {
        print("clientDidFail")
    }

    func client(client: SINCallClient!, didReceiveIncomingCall call: SINCall!) {
        print("didReceiveIncomingCall")
        let sinchVC = SinchVC(username: currentUser.username)
        let sinchNC = DNMMainNC(rootViewController: sinchVC)

        sinchVC.call = call
    }
}

И я создал Sinch ViewController, который инициализируется именем пользователя, которое будет называться:

class SinchVC: UIViewController, SINCallDelegate {

    private let videoController = SinchManager.sharedInstance.client!.videoController()
    private let audioController = SinchManager.sharedInstance.client!.audioController()
    private let callClient: SINCallClient
    private var call: SINCall!

    let username: String

    private var mainView: SinchView { return view as! SinchView }

    override func loadView() {
        view = SinchView()
    }

    init(username: String) {
        self.username = username
        self.callClient = SinchManager.sharedInstance.client!.callClient()

        super.init(nibName: nil, bundle: nil)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func viewDidLoad() {
        super.viewDidLoad()


        call.delegate = self

        self.mainView.videoView.addSubview(self.videoController.localView())
        self.videoController.localView().contentMode = .ScaleToFill

        if self.call.direction == SINCallDirection.Incoming {
            self.audioController.startPlayingSoundFile(self.pathForSound("incoming.wav") as String, loop: true)
        }

        if self.call.details.videoOffered {
            print("video offered")
            self.mainView.videoView.addSubview(self.videoController.localView())
            self.videoController.localView().contentMode = .ScaleToFill
        }

        mainView.videoView.addSubview(self.videoController.localView())
        mainView.answerButton.addTarget(self, action: #selector(answer), forControlEvents: .TouchUpInside)
        mainView.declineButton.addTarget(self, action: #selector(decline), forControlEvents: .TouchUpInside)
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        self.audioController.enableSpeaker()
    }

    func pathForSound(string: String) -> NSString {
        let nsSt = NSBundle.mainBundle().resourcePath! as NSString

        return nsSt.stringByAppendingPathComponent(string)
    }

    func answer() {
        call.answer()
    }

    func decline() {
        call.hangup()
    }

    func callDidEstablish(call: SINCall!) {
        print("callDidEstablish")
    }

    func callDidEnd(call: SINCall!) {
        print("callDidEnd")
    }

    func callDidProgress(call: SINCall!) {
        print("callDidProgress")
        self.audioController.startPlayingSoundFile(self.pathForSound("ringback.wav") as String, loop: true)
    }

    func callDidAddVideoTrack(call: SINCall!) {
        print("callDidAddVideoTrack")
        mainView.videoView.addSubview(self.videoController.remoteView())
    }


}

Проблема в том, что когда я пытаюсь позвонить из моего приложения на другой телефон с моим приложением, ничего не происходит (метод делегата didReceiveIncomingCall вообще не вызывается)

Если я пытаюсь позвонить из моего приложения в пример приложения SinchVideo, то видеовызов будет инициирован в обычном режиме. Но когда я звоню из приложения SinchVideo в мое приложение, в моем приложении ничего не происходит. Поэтому, вероятно, я забыл добавить какое-нибудь уведомление или что-то, чтобы сообщить моему приложению, когда поступает звонок. Если бы вы могли помочь, я был бы очень благодарен. Спасибо

РЕДАКТИРОВАТЬ: мне удалось заставить didReceiveIncomingCall работать, но теперь call.answer не работает. (ничего не происходит, когда вызывается call.answer, и я вижу, что мой телефон звонит)

1 ответ

Я не уверен, что DNMMainNC делает в вашем входящем звонке,

let sinchNC = DNMMainNC(rootViewController: sinchVC) What does DNMMainNC do?
sinchVC.call = call  // private var?

Но выглядит немного странно, если вы устанавливаете приватный вызов var из вашего кода, если он не публичный или имеет конструктор, такой как ваш init, но с вызовом

Другие вопросы по тегам