Dokümanlar

iOS SDK

Respondo destek sohbeti için, üçüncü taraf bağımlılığı olmayan yerel bir Swift ve SwiftUI istemcisi.

Gereksinimler#

  • iOS 15.0+ (iOS 16+ üzerinde daha ince sayfa yükseklikleri, altında sistem yedeğiyle).
  • Swift 5.9+.
  • Sıfır üçüncü taraf bağımlılığı — yalnızca Foundation, Swift Concurrency, SwiftUI ve UIKit.

Çapraz platform RespondoCore’u yeniden dışa aktaran RespondoSDK ürününe bağımlısınız.

Kurulum#

Paketi Swift Package Manager ile ekleyin. Xcode’da: File → Add Package Dependencies… ve https://github.com/respondo-app/sdk-ios girin ya da kendi Package.swift’inizde bildirin, ardından RespondoSDK ürününe bağımlı olun.

Package.swiftswift
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")
        ]
    )
]

Ardından kodda içe aktarın:

Swiftswift
import RespondoSDK

Başlatma#

Açılışta bir kez başlatın, ardından Respondo.open()’i her yerde çağırın. Yaşam döngüsü yöntemi initialize’dır ( init sözcüğü dilde ayrılmıştır).

MyApp.swiftswift
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("Destek") { Respondo.open() }
        }
    }
}

Respondo cephesi thread-safe’tir. initialize’ın hemen ardından yapılan çağrılar kuyruğa alınır ve asenkron init tamamlandığında uygulanır.

Kullanıcıları tanımlama#

Varsayılan olarak her ziyaretçi anonimdir. İlk açılışta SDK, kararlı bir visitor_id oluşturur ve onu keychain’de tutar; böylece geri dönen bir kullanıcı konuşmasını yeniden bulur. Gömülecek bir API anahtarı yoktur — her konuşma, backend’in ürettiği ve her mesajda ilerlettiği konuşma başına bir oturum belirteciyle korunur; böylece anonim bir ziyaretçinin asla yeniden kimlik doğrulaması gerekmez.

Kullanıcınız oturum açtığında identify’i bir kez çağırın. Bu, gerçek kimliklerini iliştirir; böylece geçmişleri cihazlar ve yeniden kurulumlar arasında onları takip eder ve gelen kutunuzda konuşmanın yanında anonim bir ziyaretçi yerine adları ile e-postaları görünür.

userHash, backend’inizin ajanın identity_secret’ından hesapladığı bir imzadır — HMAC-SHA256(secret, userId) (veya userId yoksa e-posta), küçük harfli hex olarak kodlanır. Bu gizli anahtar, kimliğin gerçek olduğunu kanıtlar; bu yüzden yalnızca backend’inizde bulunmalı ve asla uygulamayla gönderilmemelidir. Tam formül ve sunucu tarafı örnekler için Kimlik doğrulama sayfasına bakın.

Swiftswift
// userHash backend'inizden gelir (userId üzerinden HMAC-SHA256) —
// asla uygulamada hesaplamayın.
Respondo.identify(
    RespondoIdentity(
        userId: session.userId,
        email: session.email,
        name: session.fullName,
        userHash: session.respondoUserHash
    )
)

// Çıkışta: oturumu iptal edin ve taze bir anonim ziyaretçi başlatın.
Respondo.reset()

Hash eksik veya yanlışsa hiçbir hata fırlatılmaz: backend, ziyaretçiyi sessizce anonim tutar, sohbet çalışmaya devam eder ve geçerli bir hash sağlanana kadar yalnızca cihazlar arası bağlantıyı kaybedersiniz. Doğrulama yalnızca ajanın ayarlanmış bir identity_secret’ı olduğunda çalışır — geliştirme sırasında onu boş bırakın; o zaman userId / e-posta olduğu gibi kabul edilir.

Gözlemlenebilirler & delegate#

Durumu senkron getter’lar, reaktif AsyncStream’ler ya da bir RespondoDelegate aracılığıyla okuyun. Akışlar ve delegate geri çağırmaları main actor üzerinde gelir.

Swiftswift
// Okunmamış sayılarının reaktif akışı.
Task {
    for await count in Respondo.unreadCountStream {
        updateBadge(count)
    }
}

// Rozetler ve derin bağlantı yedekleri için delegate.
final class SupportCoordinator: RespondoDelegate {
    init() { Respondo.delegate = self }
    func respondoUnreadChanged(_ count: Int) {
        UIApplication.shared.applicationIconBadgeNumber = count
    }
}

Ekran takibi#

Proaktif teaser’ların ve sayfa düzeyi hedeflemenin eşleşebilmesi için geçerli ekranı her gezinmede bildirin (static func setCurrentScreen(_ name: String?)). Temizlemek için nil geçirin; her değişimde proaktif teaser yeni ekran için yeniden değerlendirilir.

Swiftswift
Respondo.setCurrentScreen("pricing")

Sonraki adımlar#

Push bildirimleri’ni ve Kimlik doğrulama’yı bağlayın. UIKit sarmalayıcısı RespondoChatViewController, tam delegate yüzeyi ve sorun giderme, iOS SDK başlangıç kılavuzunda ele alınır; SDK kaynakları GitHub üzerinde herkese açıktır.