iOS SDK
Klien asli Swift dan SwiftUI untuk sembang sokongan Respondo, tanpa sebarang kebergantungan pihak ketiga.
Keperluan#
- iOS 15.0+ (detent helaian yang lebih halus pada iOS 16+, dengan sandaran sistem di bawahnya).
- Swift 5.9+.
- Sifar kebergantungan pihak ketiga — hanya Foundation, Swift Concurrency, SwiftUI dan UIKit.
Anda bergantung pada produk RespondoSDK, yang mengeksport semula RespondoCore yang merentas platform.
Pemasangan#
Tambah pakej itu dengan Swift Package Manager. Dalam Xcode: File → Add Package Dependencies… dan masukkan https://github.com/respondo-app/sdk-ios, atau isytiharkannya dalam Package.swift anda sendiri, kemudian bergantung pada produk RespondoSDK.
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")
]
)
]Kemudian import pakej itu dalam kod:
import RespondoSDKInisialisasi#
Mulakan sekali sahaja semasa pelancaran, kemudian panggil Respondo.open() di mana-mana. Kaedah kitaran hayatnya ialah initialize (perkataan init sudah dikhaskan oleh bahasa itu).
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() }
}
}
}Fasad Respondo selamat untuk berbilang thread. Panggilan yang dibuat sebaik sahaja selepas initialize akan dibaris gilirkan dan digunakan sebaik sahaja init tak segerak itu selesai.
Mengenal pasti pengguna#
Secara lalai, setiap pelawat adalah tanpa nama. Pada pelancaran pertama, SDK menjana visitor_id yang stabil dan menyimpannya dalam keychain, jadi pengguna yang kembali menemui semula perbualannya. Tiada kunci API yang perlu dibenamkan — setiap perbualan dilindungi oleh token sesi khusus perbualan yang dijana backend dan digeser ke hadapan pada setiap mesej, jadi pelawat tanpa nama tidak perlu mengesahkan dirinya semula.
Panggil identify sebaik sahaja pengguna anda log masuk. Ini melekatkan identiti sebenarnya supaya sejarahnya mengikut merentas peranti dan pemasangan semula, dan nama serta e-melnya dipaparkan di sebelah perbualan dalam peti masuk anda, bukan sekadar pelawat tanpa nama.
userHash ialah tandatangan yang dikira oleh backend anda daripada identity_secret ejen — HMAC-SHA256(secret, userId) (atau e-mel apabila tiada userId), dikodkan sebagai hex huruf kecil. Rahsia itu membuktikan identiti tersebut tulen, jadi ia mesti berada hanya pada backend anda dan tidak sekali-kali dihantar bersama aplikasi. Lihat halaman Pengesahan identiti untuk formula penuh dan contoh di sisi pelayan.
// userHash datang daripada backend anda (HMAC-SHA256 atas userId) —
// jangan sekali-kali mengiranya di dalam aplikasi.
Respondo.identify(
RespondoIdentity(
userId: session.userId,
email: session.email,
name: session.fullName,
userHash: session.respondoUserHash
)
)
// Semasa log keluar: batalkan sesi dan mulakan pelawat tanpa nama yang baharu.
Respondo.reset()Jika hash tiada atau salah, tiada ralat dilemparkan: backend senyap-senyap mengekalkan pelawat itu sebagai tanpa nama, sembang terus berfungsi, dan anda cuma kehilangan pautan merentas peranti sehingga hash yang sah dibekalkan. Pengesahan hanya berjalan apabila ejen mempunyai identity_secret yang ditetapkan — biarkan ia kosong semasa pembangunan dan userId / e-mel akan diterima seadanya.
Observable & delegate#
Baca keadaan sebagai getter segerak, AsyncStream reaktif, atau melalui RespondoDelegate. Strim dan callback delegate tiba pada main actor.
// Strim reaktif kiraan mesej belum dibaca.
Task {
for await count in Respondo.unreadCountStream {
updateBadge(count)
}
}
// Delegate untuk lencana dan sandaran pautan dalam.
final class SupportCoordinator: RespondoDelegate {
init() { Respondo.delegate = self }
func respondoUnreadChanged(_ count: Int) {
UIApplication.shared.applicationIconBadgeNumber = count
}
}Penjejakan skrin#
Laporkan skrin semasa pada setiap navigasi supaya teguran proaktif dan penyasaran peringkat halaman boleh dipadankan dengannya (static func setCurrentScreen(_ name: String?)). Hantar nil untuk mengosongkannya; pada setiap perubahan, teguran proaktif dinilai semula untuk skrin baharu itu.
Respondo.setCurrentScreen("pricing")Langkah seterusnya#
Sambungkan Pemberitahuan push dan Pengesahan identiti. Pembalut UIKit RespondoChatViewController, keseluruhan permukaan delegate, dan penyelesaian masalah dibincangkan dalam panduan permulaan iOS SDK; sumber SDK ini terbuka di GitHub.