ডকুমেন্টেশন

iOS SDK

Respondo সহায়তা চ্যাটের জন্য Swift ও SwiftUI-তে লেখা নেটিভ ক্লায়েন্ট, কোনো তৃতীয় পক্ষের ডিপেনডেন্সি ছাড়াই।

প্রয়োজনীয়তা#

  • 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 প্রোডাক্টের উপর নির্ভরতা দিন।

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-এর ঠিক পরেই করা কলগুলো সারিতে জমা হয় এবং অ্যাসিঙ্ক ইনিশিয়ালাইজেশন শেষ হলেই প্রয়োগ হয়।

ব্যবহারকারী শনাক্তকরণ#

ডিফল্টভাবে প্রতিটি ভিজিটর বেনামি। প্রথমবার চালু হওয়ার সময় SDK একটি স্থির visitor_id তৈরি করে keychain-এ রেখে দেয়, ফলে ফিরে আসা ব্যবহারকারী নিজের কথোপকথন আবার খুঁজে পান। কোনো API কী বসানোর দরকার নেই — প্রতিটি কথোপকথন সুরক্ষিত থাকে সেই কথোপকথনের নিজস্ব সেশন টোকেন দিয়ে, যেটি 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 / ইমেল যেমন আছে তেমনই গ্রহণ করা হবে।

অবজার্ভেবল ও ডেলিগেট#

অবস্থা পড়তে পারেন সিঙ্ক্রোনাস গেটার হিসেবে, রিঅ্যাক্টিভ AsyncStream হিসেবে, কিংবা RespondoDelegate দিয়ে। স্ট্রিম ও ডেলিগেট কলব্যাক মেইন অ্যাক্টরে আসে।

Swiftswift
// না-পড়া বার্তার সংখ্যার রিঅ্যাক্টিভ স্ট্রিম।
Task {
    for await count in Respondo.unreadCountStream {
        updateBadge(count)
    }
}

// বেজ ও ডিপ-লিংকের বিকল্প ব্যবস্থার জন্য ডেলিগেট।
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, ডেলিগেটের পূর্ণ পরিসর এবং সমস্যা সমাধান নিয়ে বিস্তারিত আছে iOS SDK শুরু করার গাইডে; SDK-র সোর্স কোড উন্মুক্ত আছে GitHub-এ।