Dokumentasi

iOS SDK

Klien Swift dan SwiftUI native untuk chat dukungan Respondo, tanpa dependensi pihak ketiga sama sekali.

Persyaratan#

  • iOS 15.0+ (detent sheet yang lebih halus di iOS 16+, dengan fallback sistem di bawahnya).
  • Swift 5.9+.
  • Tanpa dependensi pihak ketiga — hanya Foundation, Swift Concurrency, SwiftUI, dan UIKit.

Anda bergantung pada produk RespondoSDK, yang mengekspor ulang RespondoCore lintas platform.

Instalasi#

Tambahkan paket dengan Swift Package Manager. Di Xcode: File → Add Package Dependencies… dan masukkan https://github.com/respondo-app/sdk-ios, atau deklarasikan di Package.swift Anda sendiri, lalu bergantung pada produk RespondoSDK.

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")
        ]
    )
]

Lalu impor di kode:

Swiftswift
import RespondoSDK

Inisialisasi#

Inisialisasi sekali saat peluncuran, lalu panggil Respondo.open() di mana saja. Metode siklus hidupnya adalah initialize (kata init dicadangkan oleh bahasa).

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

Facade Respondo aman-thread. Panggilan yang dibuat tepat setelah initialize akan diantrikan dan diterapkan setelah init asinkron selesai.

Mengenali pengguna#

Secara default setiap pengunjung bersifat anonim. Pada peluncuran pertama SDK menghasilkan visitor_id yang stabil dan menyimpannya di keychain, sehingga pengguna yang kembali menemukan percakapannya lagi. Tidak ada kunci API yang perlu disematkan — setiap percakapan dilindungi oleh token sesi per percakapan yang dicetak backend dan digeser maju pada setiap pesan, sehingga pengunjung anonim tidak pernah harus melakukan autentikasi ulang.

Panggil identify setelah pengguna Anda masuk. Ini melampirkan identitas asli mereka sehingga riwayatnya mengikuti mereka di berbagai perangkat dan pemasangan ulang, dan nama serta email mereka muncul di samping percakapan di inbox Anda alih-alih pengunjung anonim.

userHash adalah tanda tangan yang dihitung backend Anda dari identity_secret milik agen — HMAC-SHA256(secret, userId) (atau email bila tidak ada userId), dikodekan sebagai hex huruf kecil. Secret ini membuktikan bahwa identitas asli, jadi ia harus hanya berada di backend Anda dan tidak pernah dikirim di dalam aplikasi. Lihat halaman Verifikasi identitas untuk formula lengkap dan contoh sisi server.

Swiftswift
// userHash berasal dari backend Anda (HMAC-SHA256 atas userId) —
// jangan pernah menghitungnya di dalam aplikasi.
Respondo.identify(
    RespondoIdentity(
        userId: session.userId,
        email: session.email,
        name: session.fullName,
        userHash: session.respondoUserHash
    )
)

// Saat logout: cabut sesi dan mulai pengunjung anonim baru.
Respondo.reset()

Jika hash hilang atau salah, tidak ada yang dilempar: backend diam-diam menjaga pengunjung tetap anonim, chat tetap berfungsi, dan Anda hanya kehilangan tautan lintas perangkat sampai hash yang valid diberikan. Verifikasi hanya berjalan saat agen memiliki identity_secret yang disetel — biarkan kosong selama pengembangan dan userId / email diterima apa adanya.

Observable & delegate#

Baca status sebagai getter sinkron, AsyncStream reaktif, atau melalui RespondoDelegate. Stream dan callback delegate tiba di main actor.

Swiftswift
// Stream reaktif untuk jumlah belum dibaca.
Task {
    for await count in Respondo.unreadCountStream {
        updateBadge(count)
    }
}

// Delegate untuk badge dan fallback deep-link.
final class SupportCoordinator: RespondoDelegate {
    init() { Respondo.delegate = self }
    func respondoUnreadChanged(_ count: Int) {
        UIApplication.shared.applicationIconBadgeNumber = count
    }
}

Pelacakan layar#

Laporkan layar saat ini pada setiap navigasi agar teaser proaktif dan penargetan tingkat halaman dapat mencocokkannya (static func setCurrentScreen(_ name: String?)). Teruskan nil untuk menghapusnya; pada setiap perubahan, teaser proaktif dievaluasi ulang untuk layar baru.

Nama yang sama dicocokkan dengan aturan layar survei pop-up, jadi gunakan pengenal tetap seperti «Checkout», bukan judul terjemahan. Aturan alamat halaman hanya berlaku di situs web.

Swiftswift
Respondo.setCurrentScreen("pricing")

Membuka survei dari kode#

Membuka survei pop-up yang aktif seketika, di layar mana pun pengguna berada, tanpa memperhatikan Show on, aturan layar, waktu di layar, event pemicu, dan audiens. Salin id dari editor survei (Additional ways to share). Survei yang sudah dijawab pengguna tidak ditampilkan lagi.

Swiftswift
Respondo.startSurvey("<survey-id>")

Langkah berikutnya#

Siapkan Notifikasi push dan Verifikasi identitas. Wrapper UIKit RespondoChatViewController, permukaan delegate lengkap, dan pemecahan masalah dibahas dalam panduan memulai iOS SDK; kode sumber SDK bersifat publik di GitHub.