Tester votre code
À ce stade, votre VonageVideoSDK.swift devrait ressembler à ceci (avec quelques ajustements) :
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) {}
}
Dans votre code complété, vous devriez avoir des valeurs codées en dur pour remplacer YOUR_APP_ID, YOUR_SESSION_ID et YOUR_TOKEN - si vous ne l'avez pas encore fait, voir Mise en place de l'authentification ci-dessus.
Votre ContentView.swift devrait ressembler à ceci :
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)
}
}
}
}
}
- Construisez et exécutez l'application dans Xcode (CMD + R).
- Saisissez un texte dans la zone de texte et envoyez-le.
- Vous devriez voir le message ajouté à l'historique des messages.
Ensuite, nous pouvons tester ce qui se passe si quelqu'un d'autre envoie un message. Nous pouvons simuler cela en exécutant à nouveau l'application sur un simulateur/appareil différent :
- Construire et exécuter l'application sur un autre simulateur.
- Rouvrir l'application sur le simulateur d'origine.
- Saisissez un texte dans la zone de texte et envoyez-le sur les deux simulateurs.
- Vous devriez voir les deux messages ajoutés à l'historique des messages.
Conseil de dépannage : Si vous ne pouvez pas vous connecter à la session, vérifiez les erreurs dans la console Xcode. Le problème le plus probable est que votre clé API, votre ID de session ou votre jeton n'est pas configuré correctement. Puisque vous avez codé en dur vos informations d'identification, il est également possible que votre jeton ait expiré.
Chat textuel de base
Suivez ce tutoriel pour créer un chat textuel de base à partir de zéro en utilisant l'API Video de Vonage. C'est la façon la plus rapide de construire une preuve de concept pour cette fonctionnalité sur la plateforme vidéo.