Недавно я начал работать над функцией видеозвонков P2P, используя Quickblox SDK
. Я следил за их документацией по реализации видеозвонков, которая достаточно расплывчата, чтобы ее мог понять любой новичок. Несмотря на то, что я реализовал это, как указано в документации, я столкнулся с проблемой
Когда вызов инициирован, метод didReceiveNewSession
не вызывается на принимающем конечном устройстве, а позже обнаруживает сбой, как показано ниже:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString count]: unrecognized selector sent to instance 0x10526bc10'
Я проверил приведенные ниже ссылки и попробовал разные комбинации для решения проблемы:
- QuickBlox: метод didReceiveNewSession не вызывается в swift
- Проблема с входящим видеовызовом в iOS 13 с использованием Quickblox и CallKit
- Документация по Quickbloc – видеозвонки
In didFinishLaunchingWithOptions
of AppDelegate
:
QBRTCClient.initializeRTC()
In viewDidLoad
of ChatViewController
:
override func viewDidLoad() {
super.viewDidLoad()
QBChat.instance.addDelegate(self)
self.chatManager.connect() { _ in
QBRTCClient.instance().add(self)
}
}
Метод делегирования протокола QBRTCClientDelegate
(Не вызывается):
func didReceiveNewSession(_ session: QBRTCSession, userInfo: [String : String]? = nil) {
print("[ChatViewContoller] didReceiveNewSession; userInfo: \(userInfo ?? ["value":"NA"])")
if self.session != nil {
// we already have a video/audio call session, so we reject another one
// userInfo - the custom user information dictionary for the call from caller. May be nil.
let userInfo = [String:String]() // optional
session.rejectCall(userInfo)
return
}
// saving session instance here
self.session = session
}
Метод делегирования QBRTCClientDelegate
(неожиданно вызывается и показывает состояние как Ожидание):
func session(_ session: QBRTCBaseSession, didChange state: QBRTCSessionState) {
var stateStr = String()
switch state {
case .new: stateStr = "New"
case .connecting: stateStr = "Connecting"
case .connected: stateStr = "Connected"
case .pending: stateStr = "Pending"
case .closed: stateStr = "Closed"
default: stateStr = "Default case"
}
print("[ChatViewContoller] didChange; state: \(stateStr)")
}
Пожалуйста, дайте мне знать, если я что-то упустил в реализованном процессе, и проведите меня через него. Заранее спасибо.