Testando seu código
Neste momento, o seu VonageVideoSDK.swift O arquivo deve ficar mais ou menos assim (com alguns 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) {}
}
No seu código finalizado, você deve ter valores fixos para substituir YOUR_APP_ID, YOUR_SESSION_ID e YOUR_TOKEN — se você ainda não fez isso, consulte Configurando a autenticação acima.
Seu ContentView.swift O arquivo deve ficar assim:
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)
}
}
}
}
}
- Compile e execute o aplicativo no Xcode (CMD + R).
- Digite algum texto no campo de texto e envie-o.
- Você deverá ver a mensagem ser adicionada ao histórico de mensagens.
Em seguida, podemos testar como fica se outra pessoa enviar uma mensagem. Podemos simular isso executando o aplicativo novamente em um simulador ou dispositivo diferente:
- Compile e execute o aplicativo em um simulador diferente.
- Reabra o aplicativo no simulador original.
- Digite algum texto no campo de texto e envie-o para os dois simuladores.
- Você deverá ver as duas mensagens sendo adicionadas ao histórico de mensagens.
Dica para solução de problemas: Se você não conseguir se conectar à sessão, verifique se há erros no console do Xcode. O problema mais provável é que sua chave de API, ID de sessão ou token não esteja configurado corretamente. Como você codificou suas credenciais diretamente no código, também é possível que seu token tenha expirado.
Bate-papo básico por texto
Siga este tutorial para criar um chat de texto básico do zero usando a Video API da Vonage. Essa é a maneira mais rápida de desenvolver uma prova de conceito para essa funcionalidade na plataforma de vídeo.