作者:至上励合_安儿_466 | 来源:互联网 | 2023-10-14 22:00
Iamworkingonaprojectwhichrequiresopentokandcallkitfornotifyingusers.However,theappli
I am working on a project which requires opentok and callkit for notifying users. However, the application keeps crashing when openTok tries to connect to a session. IDK what is going on right now. Here is my work flow and codes:
我正在开发一个需要opentok和callkit来通知用户的项目。但是,当openTok尝试连接到会话时,应用程序会一直崩溃。 IDK现在正在发生什么。这是我的工作流程和代码:
Push notification about available opentok session -> start incoming call -> user accept the call -> start the opentok storyboard -> do some backend stuff -> connect to a session !!!! THIS IS WHEN IT CRASHES.
推送关于可用的opentok会话的通知 - >开始传入呼叫 - >用户接受呼叫 - >启动opentok故事板 - >做一些后端的东西 - >连接到会话!!!!这就是它崩溃的时候。
ERROR: Thread 1: EXC_BAD_ACCESS (code=2, address=0x1968a0ad8)
错误:线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x1968a0ad8)
Besides, I would like to ask for advice about receive notification. Instead of showing the notification on the screen. I would like to start the call, using callkit, like whatsapp or fb messenger. Please give me a hint about this also. Right now, I can only start the call when the app is in foreground when push notification is sent.
此外,我想询问有关接收通知的建议。而不是在屏幕上显示通知。我想使用callkit开始调用,比如whatsapp或fb messenger。请给我一个暗示。现在,我只能在发送推送通知时应用程序处于前台时启动呼叫。
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// If you are receiving a notification message while your app is in the background,
// this callback will not be fired till the user taps on the notification launching the application.
// TODO: Handle data of notification
// With swizzling disabled you must let Messaging know about the message, for Analytics
// Messaging.messaging().appDidReceiveMessage(userInfo)
// Print message ID.
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print(userInfo)
let aps = userInfo["aps"] as! [String: AnyObject]
// 1
if aps["content-available"] as? Int == 1 {
let uuid = UUID(uuidString: MyVariables.uuid)
AppDelegate.shared.displayIncomingCall(uuid: uuid!, handle: "Sanoste", hasVideo: false) { _ in
}
}else {
return
}
completionHandler(UIBackgroundFetchResult.newData)
}
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
action.fulfill()
AppDelegate.shared.openTok()
}
func openTok() {
let mainStoryboard = UIStoryboard(name: "callView", bundle: nil)
let vc = mainStoryboard.instantiateViewController(withIdentifier: "callViewController") as! callViewController
vc.view.frame = UIScreen.main.bounds
UIView.transition(with: self.window!, duration: 0.5, options: .transitionCrossDissolve, animations: {
self.window!.rootViewCOntroller= vc
}, completion: nil)
}
// Join a session from MBE
func joinSession() {
var error: OTError?
pSession = OTSession(apiKey: openTokSessionKey.pApiKey, sessionId: openTokSessionKey.pSessionId, delegate: self as OTSessionDelegate)
pSession?.connect(withToken: openTokSessionKey.pToken, error: &error)
if error != nil {
print(error!)
}
sSession = OTSession(apiKey: openTokSessionKey.sApiKey, sessionId: openTokSessionKey.sSessionId, delegate: self as OTSessionDelegate)
sSession?.connect(withToken: openTokSessionKey.sToken, error: &error)
if error != nil {
print(error!)
}
}
Anyone helps please ?
有人帮忙吗?
1 个解决方案