У меня немного путаницы в том, как правильно создать объект SINCall. Я понимаю, что SINCall является протоколом типа, и в стрижа я попытался создать ее как таковую:Sinch: Как установить переменную SINCall в Swift?
var _call: SINCall?
Когда я пытаюсь позвонить, мое приложение вылетает, потому что _call равна нулю.
Однако, если я добавлю SINCall к списку протоколов рядом с SINCallDelegate и SINCallClientDelegate, я получаю сообщение об ошибке, которое не соответствует протоколу SINCall.
class CallViewController: UIViewController, SINCallDelegate, SINCallClientDelegate {
var userName: String? {
didSet {
}
}
var recepientUser: String? {
didSet {
}
}
var _call: SINCall?
var appKey = "xxx"
var appSecret = "xxx"
var host = "xxx"
var client: SINClient {
return Sinch.clientWithApplicationKey(appKey, applicationSecret: appSecret, environmentHost: host, userId: userName!)
}
override func viewDidLoad() {
super.viewDidLoad()
print("Lock and load")
client.callClient().delegate = self
client.setSupportCalling(true)
client.start()
client.startListeningOnActiveConnection()
callUser()
}
func callUser() {
self._call = client.callClient().callUserWithId(self.recepientUser!)
self._call!.delegate = self
}
func client(client: SINCallClient!, didReceiveIncomingCall call: SINCall!) {
call.delegate = self
self._call = call
self._call!.answer()
}
// callDidProgress, callDidEstablish, callDidEnd implemented below ...
Цените ответ! Я создал контроллер вызова программным способом в другом контроллере (Main Controller), и я представил контроллер вызовов с моим именем пользователя и удаленным именем пользователя. Возможно, я должен запустить клиент в своем делете приложения, а не viewdidload() внутри класса контроллера вызова. –
Если вы хотите получать звонки, которые являются способом выхода, если вы хотите только позвонить, вы можете запустить его в контроллере представления, но вам нужно дождаться, когда он начнется, прежде чем вы сделаете звонок – cjensen