2016-07-25 3 views
0

У меня немного путаницы в том, как правильно создать объект 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 ... 

ответ

1

ли клиент начал, когда вы делаете вызов, это может занять несколько секунд, так что вы, вероятно, следует начать клиента в приложение делегата, когда его запуска, а затем при запуске клиента вы можете сделать звоните, вы, вероятно, получите нуль, потому что клиент не запущен

+0

Цените ответ! Я создал контроллер вызова программным способом в другом контроллере (Main Controller), и я представил контроллер вызовов с моим именем пользователя и удаленным именем пользователя. Возможно, я должен запустить клиент в своем делете приложения, а не viewdidload() внутри класса контроллера вызова. –

+1

Если вы хотите получать звонки, которые являются способом выхода, если вы хотите только позвонить, вы можете запустить его в контроллере представления, но вам нужно дождаться, когда он начнется, прежде чем вы сделаете звонок – cjensen

Смежные вопросы