दस्तावेज़

iOS SDK

Respondo सपोर्ट चैट के लिए एक नेटिव Swift और SwiftUI क्लाइंट, बिना किसी थर्ड-पार्टी डिपेंडेंसी के।

आवश्यकताएँ#

  • iOS 15.0+ (iOS 16+ पर बारीक शीट detents, नीचे एक सिस्टम फ़ॉलबैक के साथ)।
  • 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 प्रोडक्ट पर निर्भर रहें।

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

फिर इसे कोड में इम्पोर्ट करें:

Swiftswift
import RespondoSDK

इनिशियलाइज़ करें#

लॉन्च पर एक बार इनिशियलाइज़ करें, फिर कहीं भी Respondo.open() कॉल करें। लाइफ़साइकल मेथड initialize है (शब्द init भाषा द्वारा आरक्षित है)।

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() }
        }
    }
}

Respondo फ़साड थ्रेड-सेफ़ है। initialize के तुरंत बाद किए गए कॉल कतार में रखे जाते हैं और async init के पूरा होते ही लागू होते हैं।

यूज़र्स की पहचान#

डिफ़ॉल्ट रूप से हर विज़िटर एनॉनिमस होता है। पहली बार लॉन्च पर SDK एक स्थिर visitor_id जनरेट करता है और उसे keychain में रखता है, ताकि लौटने वाला यूज़र अपनी बातचीत फिर से पा सके। एम्बेड करने के लिए कोई API key नहीं है — हर बातचीत को एक per-conversation session token से सुरक्षित किया जाता है जिसे backend बनाता है और हर मैसेज पर आगे सरका देता है, इसलिए एक एनॉनिमस विज़िटर को कभी दोबारा प्रमाणित नहीं होना पड़ता।

आपका यूज़र साइन-इन हो जाने पर identify को एक बार कॉल करें। यह उनकी असली पहचान जोड़ता है ताकि उनका इतिहास डिवाइसों और रीइंस्टॉल के आर-पार उनके साथ चले, और आपके इनबॉक्स में बातचीत के बगल में किसी एनॉनिमस विज़िटर के बजाय उनका नाम और ईमेल दिखे।

userHash एक सिग्नेचर है जिसे आपका backend एजेंट के identity_secret से गणना करता है — HMAC-SHA256(secret, userId) (या जब userId न हो तो ईमेल पर), लोअरकेस hex के रूप में एन्कोडेड। यह secret साबित करता है कि पहचान वास्तविक है, इसलिए इसे केवल आपके backend पर रहना चाहिए और इसे कभी ऐप में नहीं भेजा जाता। पूरी फ़ॉर्मूला और सर्वर-साइड उदाहरणों के लिए पहचान सत्यापन पेज देखें।

Swiftswift
// userHash आपके backend से आता है (userId पर HMAC-SHA256) —
// इसे ऐप में कभी गणना न करें।
Respondo.identify(
    RespondoIdentity(
        userId: session.userId,
        email: session.email,
        name: session.fullName,
        userHash: session.respondoUserHash
    )
)

// लॉगआउट पर: सेशन रद्द करें और एक नया एनॉनिमस विज़िटर शुरू करें।
Respondo.reset()

अगर हैश गायब या ग़लत है, तो कुछ भी थ्रो नहीं होता: backend चुपचाप विज़िटर को एनॉनिमस बनाए रखता है, चैट चलती रहती है, और आप बस तब तक क्रॉस-डिवाइस लिंक खो देते हैं जब तक कोई मान्य हैश न दिया जाए। सत्यापन केवल तभी चलता है जब एजेंट के पास identity_secret सेट हो — डेवलपमेंट के दौरान इसे खाली छोड़ दें और userId / ईमेल जैसे हैं वैसे ही स्वीकार किए जाते हैं।

Observables और delegate#

स्टेट को सिंक्रोनस getters, प्रतिक्रियात्मक AsyncStream के रूप में, या किसी RespondoDelegate के ज़रिए पढ़ें। स्ट्रीम और delegate callbacks मुख्य actor पर आते हैं।

Swiftswift
// unread counts की प्रतिक्रियात्मक स्ट्रीम।
Task {
    for await count in Respondo.unreadCountStream {
        updateBadge(count)
    }
}

// बैज और deep-link फ़ॉलबैक के लिए delegate।
final class SupportCoordinator: RespondoDelegate {
    init() { Respondo.delegate = self }
    func respondoUnreadChanged(_ count: Int) {
        UIApplication.shared.applicationIconBadgeNumber = count
    }
}

स्क्रीन ट्रैकिंग#

हर नेविगेशन पर मौजूदा स्क्रीन रिपोर्ट करें ताकि प्रोऐक्टिव टीज़र और पेज-स्तरीय टारगेटिंग उससे मैच कर सकें (static func setCurrentScreen(_ name: String?))। साफ़ करने के लिए nil पास करें; हर बदलाव पर नई स्क्रीन के लिए प्रोऐक्टिव टीज़र का दोबारा मूल्यांकन होता है।

Swiftswift
Respondo.setCurrentScreen("pricing")

अगले कदम#

पुश नोटिफ़िकेशन और पहचान सत्यापन जोड़ें। UIKit रैपर RespondoChatViewController, पूरा delegate सरफ़ेस, और समस्या-निवारण iOS SDK के getting-started गाइड में शामिल हैं; SDK के सोर्स GitHub पर पब्लिक हैं।