2016-05-30 53 views
0

我希望能夠使用Sinch進行App-To-App調用。我遵循了這些步驟並將代碼轉換爲Swift。出於某種原因,didReceiveIncomingCall方法永遠不會被調用。我將粘貼一些我的代碼,以便看到我如何在我的viewDidLoad方法中啓動SinchClientSinch didReceiveIncomingCall Never Called

sinchClient = Sinch.clientWithApplicationKey("key", applicationSecret: "secret", environmentHost: "sandbox.sinch.com", userId: "idOfUser") 

sinchClient.setSupportCalling(true) 
sinchClient.delegate = self 
sinchClient.start() 
sinchClient.startListeningOnActiveConnection() 

然後我使用以下命令從user1撥打電話到user2。

if(clientStarted){ 
    let callClient = sinchClient.callClient() 
    callClient.callUserWithId("user2") 
    sinchCall.delegate = self 
} 

這是我爲SINCallClientDelegate

extension CallViewController: SINCallClientDelegate{ 
    func client(client: SINCallClient!, didReceiveIncomingCall call: SINCall!) { 
    print("GOT ME AN INCOMING CALL") 
    sinchCall = call 
    sinchCall.delegate = self 
    sinchCall.answer() 
    } 
} 

出於某種原因委託方法,該方法didRecieveIncomingCall不會被調用。有時我也會得到以下錯誤: 警告:SINCallClient的委託沒有分配?代表應該處理來電。 (請參閱 - [SIN所有客戶代表notifyDelegate fIncomingCall:])

我想也許它可能與sinchClient.startListeningOnActiveConnection()有關,但我不確定。

需要注意的幾件事情是,我知道我的sinchClient何時啓動,因爲我在代理中監聽它。當調用clientDidStart時,我將該變量更改爲clientStarted: Bool。我在一個文件中也有三​​個代表(SINCallClientDelegate,SINCallDelegateSINClientDelegate)。在進行任何調用之前,它會等待sinchClient啓動。

+0

是前述sinch客戶端和callclient分配住直通整個應用程序生命週期或至少視圖 - 控制生命週期的變量?你也需要啓動暗語進行主動連接或支持推送 – cjensen

+0

嘿基督教,很高興聽到你這麼快。我的問題是,雖然我設置sinchClient.delegate =自我,我從來沒有設置sinchClient.callClient()。委託=自我。我設定好後,我就可以開始工作了。我想通了並測試了它。作品難以置信。順便說一句,我只是測試它,所以sinchClient變量暫時適用於viewcontroller生命週期,但我會讓它在應用程序生命週期中從應用程序中的任何地方接收調用。謝謝你爲我着想。 –

回答

1

所以我的解決方案非常簡單。我從來沒有設置sinchClient.callClient().delegate = self。請閱讀有關問題的評論。

sinchClient.callClient().delegate = self 
sinchClient.setSupportCalling(true) 
sinchClient.delegate = self 
sinchClient.start() 
sinchClient.startListeningOnActiveConnection()