iOS SDK
לקוח נייטיבי ב-Swift וב-SwiftUI עבור צ׳אט התמיכה של Respondo, ללא תלויות צד-שלישי כלל.
דרישות#
- iOS 15.0+ (מדרגות גיליון עדינות יותר ב-iOS 16+, עם נפילה למערכת מתחת לכך).
- Swift 5.9+.
- ללא תלויות צד-שלישי — רק Foundation, Swift Concurrency, SwiftUI ו-UIKit.
אתם תלויים במוצר RespondoSDK, שמייצא מחדש את RespondoCore הרב-פלטפורמי.
התקנה#
הוסיפו את החבילה עם Swift Package Manager. ב-Xcode: File → Add Package Dependencies… והזינו https://github.com/respondo-app/sdk-ios, או הצהירו עליה ב- Package.swift שלכם, ואז הישענו על המוצר 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")
]
)
]ואז ייבאו אותה בקוד:
import RespondoSDKאתחול#
אתחלו פעם אחת בהפעלה, ואז קראו ל- Respondo.open() מכל מקום. שיטת מחזור החיים היא initialize (המילה init שמורה בשפה).
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() }
}
}
}הפאסאד Respondo בטוח מבחינת threads. קריאות שנעשות מיד לאחר initialize נכנסות לתור ומיושמות ברגע שהאתחול האסינכרוני מסתיים.
זיהוי משתמשים#
כברירת מחדל כל מבקר הוא אנונימי. בהפעלה הראשונה ה-SDK מייצר visitor_id יציב ושומר אותו ב-keychain, כך שמשתמש חוזר מוצא את השיחה שלו שוב. אין מפתח API להטמיע — כל שיחה מוגנת על ידי אסימון סשן ייעודי לשיחה שה-backend מנפיק ומקדם קדימה בכל הודעה, כך שמבקר אנונימי אינו צריך לעולם לאמת מחדש.
קראו ל-identify ברגע שהמשתמש שלכם מחובר. פעולה זו מצרפת את זהותו האמיתית כך שההיסטוריה שלו עוקבת אחריו בין מכשירים והתקנות מחדש, ושמו והאימייל שלו מופיעים ליד השיחה בתיבת הפניות שלכם במקום מבקר אנונימי.
ה-userHash הוא חתימה שה-backend שלכם מחשב מתוך identity_secret של הסוכן — HMAC-SHA256(secret, userId) (או האימייל כשאין userId), מקודדת כ-hex באותיות קטנות. הסוד מוכיח שהזהות אמיתית, ולכן הוא חייב להתקיים רק ב-backend שלכם ולעולם אינו נשלח באפליקציה. ראו את עמוד אימות הזהות לנוסחה המלאה ולדוגמאות צד שרת.
// ה-userHash מגיע מה-backend שלכם (HMAC-SHA256 על ה-userId) —
// לעולם אל תחשבו אותו באפליקציה.
Respondo.identify(
RespondoIdentity(
userId: session.userId,
email: session.email,
name: session.fullName,
userHash: session.respondoUserHash
)
)
// בהתנתקות: בטלו את הסשן והתחילו מבקר אנונימי חדש.
Respondo.reset()אם ה-hash חסר או שגוי, שום דבר לא נזרק כשגיאה: ה-backend שומר את המבקר אנונימי בשקט, הצ׳אט ממשיך לעבוד, ואתם פשוט מאבדים את הקישור החוצה-מכשירי עד שיסופק hash תקין. האימות רץ רק כאשר לסוכן מוגדר identity_secret — השאירו אותו ריק בזמן הפיתוח ואז userId / אימייל מתקבלים כמות שהם.
Observables ו-delegate#
קראו את המצב כ-getters סינכרוניים, כ- AsyncStream ריאקטיביים, או דרך RespondoDelegate. ה-streams וקריאות ה-delegate מגיעים ב-main actor.
// stream ריאקטיבי של מספרי הודעות שלא נקראו.
Task {
for await count in Respondo.unreadCountStream {
updateBadge(count)
}
}
// Delegate לתגים ולנפילות אחורה של קישורים עמוקים.
final class SupportCoordinator: RespondoDelegate {
init() { Respondo.delegate = self }
func respondoUnreadChanged(_ count: Int) {
UIApplication.shared.applicationIconBadgeNumber = count
}
}מעקב מסכים#
דווחו על המסך הנוכחי בכל ניווט כדי שטיזרים יזומים ומיקוד ברמת העמוד יוכלו להתאים אליו (static func setCurrentScreen(_ name: String?)). העבירו nil כדי לנקות אותו; בכל שינוי הטיזר היזום מוערך מחדש עבור המסך החדש.
Respondo.setCurrentScreen("pricing")השלבים הבאים#
חברו את התראות הדחיפה ואת אימות הזהות. עוטף ה-UIKit RespondoChatViewController, משטח ה-delegate המלא, ופתרון תקלות מכוסים במדריך ההתחלה של iOS SDK; קוד המקור של ה-SDK פתוח וזמין ב- GitHub.