iOS SDK
Ein nativer Swift- und SwiftUI-Client für den Respondo-Support-Chat, ohne jegliche Drittanbieter-Abhängigkeiten.
Anforderungen#
- iOS 15.0+ (feinere Sheet-Rastungen ab iOS 16+, mit System-Fallback darunter).
- Swift 5.9+.
- Keine Drittanbieter-Abhängigkeiten — nur Foundation, Swift Concurrency, SwiftUI und UIKit.
Sie hängen vom Produkt RespondoSDK ab, das das plattformübergreifende RespondoCore erneut exportiert.
Installation#
Fügen Sie das Paket mit dem Swift Package Manager hinzu. In Xcode: File → Add Package Dependencies… und geben Sie https://github.com/respondo-app/sdk-ios ein, oder deklarieren Sie es in Ihrer eigenen Package.swift und hängen Sie dann vom Produkt RespondoSDK ab.
dependencies: [
.package(url: "https://github.com/respondo-app/sdk-ios", from: "0.1.0")
],
targets: [
.target(
name: "MyApp",
dependencies: [
.product(name: "RespondoSDK", package: "sdk-ios")
]
)
]Importieren Sie es dann im Code:
import RespondoSDKInitialisieren#
Initialisieren Sie einmal beim Start und rufen Sie dann Respondo.open() überall auf. Die Lebenszyklus-Methode ist initialize (das Wort init ist von der Sprache reserviert).
import SwiftUI
import RespondoSDK
@main
struct MyApp: App {
init() {
Respondo.initialize(
RespondoConfig(
agentId: "<agent-uuid>",
channelId: "<channel-uuid>"
// baseUrl nil -> https://api.respondo.ai
)
)
}
var body: some Scene {
WindowGroup {
Button("Support") { Respondo.open() }
}
}
}Die Fassade Respondo ist thread-sicher. Aufrufe, die direkt nach initialize erfolgen, werden in eine Warteschlange gestellt und angewendet, sobald die asynchrone Init abgeschlossen ist.
Nutzer identifizieren#
Standardmäßig ist jeder Besucher anonym. Beim ersten Start generiert das SDK eine stabile visitor_id und bewahrt sie im Keychain auf, sodass ein wiederkehrender Nutzer seine Konversation erneut findet. Es gibt keinen API-Schlüssel einzubetten — jede Konversation ist durch ein Session-Token pro Konversation geschützt, das das Backend prägt und bei jeder Nachricht weiterschiebt, sodass sich ein anonymer Besucher nie erneut authentifizieren muss.
Rufen Sie identify auf, sobald Ihr Nutzer angemeldet ist. Dies hängt seine reale Identität an, sodass sein Verlauf ihm geräte- und neuinstallationsübergreifend folgt und sein Name und seine E-Mail neben der Konversation in Ihrem Posteingang erscheinen statt eines anonymen Besuchers.
Der userHash ist eine Signatur, die Ihr Backend aus dem identity_secret des Agenten berechnet — HMAC-SHA256(secret, userId) (oder die E-Mail, wenn es keine userId gibt), kodiert als Hex in Kleinbuchstaben. Das Secret beweist, dass die Identität echt ist, daher muss es ausschließlich auf Ihrem Backend liegen und wird niemals in der App ausgeliefert. Auf der Seite Identitätsverifizierung finden Sie die vollständige Formel und serverseitige Beispiele.
// Der userHash kommt von Ihrem Backend (HMAC-SHA256 über die userId) —
// berechnen Sie ihn niemals in der App.
Respondo.identify(
RespondoIdentity(
userId: session.userId,
email: session.email,
name: session.fullName,
userHash: session.respondoUserHash
)
)
// Beim Logout: Session widerrufen und neuen anonymen Besucher starten.
Respondo.reset()Wenn der Hash fehlt oder falsch ist, wird nichts geworfen: Das Backend hält den Besucher stillschweigend anonym, der Chat funktioniert weiter, und Sie verlieren lediglich die geräteübergreifende Verknüpfung, bis ein gültiger Hash geliefert wird. Die Verifizierung läuft nur, wenn für den Agenten ein identity_secret gesetzt ist — lassen Sie es während der Entwicklung leer, und userId / E-Mail werden unverändert akzeptiert.
Observables & Delegate#
Lesen Sie den Zustand als synchrone Getter, reaktive AsyncStreams oder über ein RespondoDelegate. Streams und Delegate-Callbacks kommen auf dem Main Actor an.
// Reaktiver Stream ungelesener Zähler.
Task {
for await count in Respondo.unreadCountStream {
updateBadge(count)
}
}
// Delegate für Badges und Deep-Link-Fallbacks.
final class SupportCoordinator: RespondoDelegate {
init() { Respondo.delegate = self }
func respondoUnreadChanged(_ count: Int) {
UIApplication.shared.applicationIconBadgeNumber = count
}
}Bildschirm-Tracking#
Melden Sie den aktuellen Bildschirm bei jeder Navigation, damit proaktive Teaser und Targeting auf Seitenebene dagegen abgleichen können (static func setCurrentScreen(_ name: String?)). Übergeben Sie nil, um ihn zu löschen; bei jeder Änderung wird der proaktive Teaser für den neuen Bildschirm neu ausgewertet.
Respondo.setCurrentScreen("pricing")Nächste Schritte#
Verbinden Sie Push-Benachrichtigungen und die Identitätsverifizierung. Der UIKit-Wrapper RespondoChatViewController, die vollständige Delegate-Oberfläche und die Fehlerbehebung werden im Einstiegsleitfaden des iOS SDK behandelt; die SDK-Quellen sind öffentlich auf GitHub.