Pruebe su código
En este punto, su VonageVideoSDK.swift debería tener este aspecto (con algunos ajustes):
import OpenTok
// Replace with your Application ID
let kApiKey = ""
// Replace with your generated session ID
let kSessionId = ""
// Replace with your generated token
let kToken = ""
struct Signal: Identifiable {
let id = UUID()
let text: String
let isUsers: Bool
}
class VonageVideoSDK: NSObject {
@Published var isSessionConnected = false
@Published var messages: [Signal] = []
lazy var session: OTSession = {
return OTSession(apiKey: kApiKey, sessionId: kSessionId, delegate: self)!
}()
override init() {
super.init()
var error: OTError?
session.connect(withToken: kToken, error: &error)
if let error = error {
print("Session creation error \(error.description)")
}
}
func sendSignal(type: String, data: String) {
var error: OTError?
session.signal(withType: type , string: data, connection: nil, error: &error)
if let error = error {
print("Session creation error \(error.description)")
} else {
messages.append(.init(text: data, isUsers: true))
}
}
}
// MARK: - OTSession delegate callbacks
extension VonageVideoSDK: OTSessionDelegate {
func sessionDidConnect(_ session: OTSession) {
isSessionConnected = true
}
func sessionDidDisconnect(_ session: OTSession) {
isSessionConnected = false
}
func session(_ session: OTSession, didFailWithError error: OTError) {
print("Session Failed to connect: \(error.localizedDescription)")
}
func session(_ session: OTSession, receivedSignalType type: String?, from connection: OTConnection?, with string: String?) {
if let string = string, let type = type, let connection = connection {
guard type == "msg" else { return }
guard connection.connectionId != self.session.connection?.connectionId else { return }
messages.append(.init(text: string, isUsers: false))
}
}
func session(_ session: OTSession, streamCreated stream: OTStream) {}
func session(_ session: OTSession, streamDestroyed stream: OTStream) {}
}
En el código completado, debería haber valores codificados para sustituir a YOUR_APP_ID, YOUR_SESSION_ID y YOUR_TOKEN - si no lo ha hecho, consulte Configuración de la autenticación arriba.
Su ContentView.swift debería tener este aspecto:
import SwiftUI
struct ContentView: View {
@StateObject private var sdk = VonageVideoSDK()
@State private var message: String = ""
var body: some View {
VStack {
if (sdk.isSessionConnected) {
List(sdk.messages) { signal in
Text(signal.text)
.listRowSeparator(.hidden)
.frame(maxWidth: .infinity, alignment: signal.isUsers ? .trailing : .leading)
}
HStack {
TextField("Message", text: $message)
Button("Send") {
sdk.sendSignal(type: "msg", data: message)
self.message = ""
}.buttonStyle(.bordered)
}.padding(8)
} else {
ProgressView {
Text("Connecting ...")
.font(.title)
}
}
}
}
}
- Cree y ejecute la aplicación en Xcode (CMD + R).
- Introduce un texto en el campo de texto y envíalo.
- Deberías ver que el mensaje se añade al historial de mensajes.
A continuación, podemos probar cómo se ve si otra persona envía un mensaje. Podemos simularlo ejecutando de nuevo la aplicación en un simulador/dispositivo diferente:
- Construye y ejecuta la aplicación en un simulador diferente.
- Vuelve a abrir la aplicación en el simulador original.
- Introduce un texto en el campo de texto y envíalo a ambos simuladores.
- Debería ver que ambos mensajes se añaden al historial de mensajes.
Consejo para solucionar problemas: Si no puede conectarse a la sesión, compruebe si hay errores en la consola de Xcode. Lo más probable es que tu clave API, ID de sesión o token no estén configurados correctamente. Dado que has codificado tus credenciales, también es posible que tu token haya caducado.
Chat de texto básico
Sigue este tutorial para crear un chat de texto básico desde cero usando la Video API de Vonage. Es la forma más rápida de crear una prueba de concepto para esta funcionalidad en la plataforma de video.