
भाषा 🇮🇳 हिन्दी
दस्तावेज़ीकरण
शुरुआत करें
प्रमाणीकरण
उपयोग
अपने iOS ऐप में टिप्पणियाँ जोड़ें
यह FastComments की आधिकारिक iOS लाइब्रेरी है।
अपने iOS ऐप में लाइव कमेंटिंग, चैट और रिव्यू विजेट एम्बेड करें।
रिपॉज़िटरी
AI कोडिंग एजेंट 
अपने कोडिंग एजेंट को FastComments का वह संदर्भ दें जिसकी उसे आवश्यकता है - विजेट्स, कॉन्फ़िगरेशन, Secure SSO, REST API, और SDKs:
npx skills add fastcomments/skills
यह Claude Code, Codex, Cursor, Copilot, Gemini, और skills CLI द्वारा समर्थित हर अन्य एजेंट के साथ काम करता है।
विशेषताएँ 
- नेस्टेड रिप्लाई और पेजिनेशन के साथ थ्रेडेड कमेंट ट्री
- पोस्ट निर्माण, रिएक्शन और मीडिया अटैचमेंट के साथ सोशल फ़ीड
- ऑटो-स्क्रॉल और तारीख विभाजकों के साथ लाइव चैट मोड
- WebSocket के माध्यम से रीयल-टाइम अपडेट (नए कमेंट, वोट, प्रेज़ेंस)
- Single Sign-On (टेस्टिंग के लिए Simple SSO, प्रोडक्शन के लिए Secure SSO)
- बोल्ड, इटैलिक, कोड और @mentions के साथ रिच टेक्स्ट एडिटिंग
- कॉन्फ़िगर करने योग्य स्टाइल के साथ वोटिंग (अप/डाउन एरो या हार्ट्स)
- मॉडरेशन क्रियाएँ: फ्लैग, पिन, लॉक, ब्लॉक
- प्रीसेट और पूर्ण कस्टमाइज़ेशन के साथ व्यापक थीमिंग
- कमेंट और फ़ीड पोस्ट निर्माण के लिए कस्टम टूलबार बटन
- इमेज अपलोड
- EU क्षेत्र समर्थन
- यूज़र प्रेज़ेंस (ऑनलाइन/ऑफलाइन संकेतक)
- टैग-आधारित फ़ीड फ़िल्टरिंग
- लोकलाइज़ेशन समर्थन
इंस्टॉलेशन 
Swift Package Manager का उपयोग करके अपने प्रोजेक्ट में FastCommentsUI जोड़ें।
Xcode में: File > Add Package Dependencies, फिर रिपॉज़िटरी URL दर्ज करें।
या इसे अपने Package.swift में जोड़ें:
dependencies: [
.package(url: "https://github.com/fastcomments/fastcomments-ios.git", from: "2.0.0")
]
फिर अपने टारगेट में प्रोडक्ट जोड़ें:
.target(
name: "YourApp",
dependencies: [
.product(name: "FastCommentsUI", package: "fastcomments-ios")
]
)
जहाँ आवश्यक हो, दोनों मॉड्यूल इम्पोर्ट करें:
import FastCommentsUI
import FastCommentsSwift
क्विक स्टार्ट 
कमेंट विजेट दिखाने के लिए न्यूनतम सेटअप:
import SwiftUI
import FastCommentsUI
struct ContentView: View {
@StateObject private var sdk = FastCommentsSDK(
config: FastCommentsWidgetConfig(
tenantId: "demo",
urlId: "my-page-1",
url: "https://example.com/page-1",
pageTitle: "My Page"
)
)
var body: some View {
FastCommentsView(sdk: sdk)
.task {
try? await sdk.load()
}
}
}
"demo" को अपनी FastComments tenant ID से बदलें। urlId उस पेज या थ्रेड की पहचान करता है जहाँ कमेंट्स स्टोर किए जाते हैं।
प्रमाणीकरण (SSO) 
FastComments तीन प्रमाणीकरण मोड का समर्थन करता है:
- Anonymous -- कोई SSO टोकन नहीं; उपयोगकर्ताओं को सेशन-आधारित पहचान मिलती है
- Simple SSO -- डेमो और टेस्टिंग के लिए क्लाइंट-साइड टोकन (सुरक्षित नहीं)
- Secure SSO -- प्रोडक्शन के लिए सर्वर-साइन्ड टोकन
Simple SSO
डेमो और लोकल टेस्टिंग के लिए उपयोगी। Simple SSO के साथ कोई भी किसी भी उपयोगकर्ता की नकल कर सकता है, इसलिए इसे प्रोडक्शन में उपयोग न करें।
import FastCommentsSwift
let userData = SimpleSSOUserData(
username: "Jane Doe",
email: "jane@example.com",
avatar: "https://example.com/avatar.jpg"
)
let sso = FastCommentsSSO.createSimple(simpleSSOUserData: userData)
let token = try? sso.prepareToSend()
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "my-page-1",
sso: token
)
let sdk = FastCommentsSDK(config: config)
SimpleSSOUserData वैकल्पिक फ़ील्ड का भी समर्थन करता है:
id-- उपयोगकर्ता ID (सेट न होने पर डिफ़ॉल्ट रूप से ईमेल)displayName-- अलग डिस्प्ले नामdisplayLabel-- नाम के आगे दिखाया जाने वाला कस्टम लेबल (जैसे "VIP")websiteUrl-- उपयोगकर्ता के नाम पर लिंकlocale-- लोकेल कोडisProfileActivityPrivate-- प्रोफ़ाइल गतिविधि छिपाएँ (डिफ़ॉल्ट रूप से true)
Secure SSO
प्रोडक्शन में, आपका बैकएंड आपके API सीक्रेट का उपयोग करके एक साइन्ड SSO टोकन जनरेट करता है। iOS ऐप आपके सर्वर से यह टोकन प्राप्त करता है और इसे कॉन्फ़िग में पास करता है।
आपके बैकएंड पर (FastComments Swift SDK या किसी भी भाषा का उपयोग करते हुए):
let userData = SecureSSOUserData(
id: "user-123",
email: "user@example.com",
username: "Display Name",
avatar: "https://example.com/avatar.jpg"
)
let sso = try FastCommentsSSO.createSecure(apiKey: "YOUR_API_KEY", secureSSOUserData: userData)
let token = try sso.prepareToSend()
// यह टोकन अपने API के माध्यम से अपने iOS ऐप को लौटाएँ
अपने iOS ऐप में:
struct MyView: View {
@StateObject private var sdk = FastCommentsSDK(
config: FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "my-page-1"
)
)
@State private var isLoadingToken = true
var body: some View {
Group {
if isLoadingToken {
ProgressView("Loading...")
} else {
FastCommentsView(sdk: sdk)
}
}
.task {
// अपने बैकएंड से टोकन प्राप्त करें
let token = try? await fetchSSOTokenFromYourBackend()
// टोकन के साथ एक नया कॉन्फ़िग बनाएँ, या लोड से पहले सेट करें
isLoadingToken = false
try? await sdk.load()
}
}
}
SecureSSOUserData अतिरिक्त फ़ील्ड का समर्थन करता है:
optedInNotifications-- ईमेल नोटिफिकेशन ऑप्ट-इनdisplayLabel-- कस्टम लेबलdisplayName-- डिस्प्ले नामwebsiteUrl-- वेबसाइट URLgroupIds-- समूह सदस्यताएँisAdmin-- एडमिन विशेषाधिकारisModerator-- मॉडरेटर विशेषाधिकारisProfileActivityPrivate-- प्रोफ़ाइल गोपनीयता
थ्रेडेड टिप्पणियाँ 
मूलभूत उपयोग
struct CommentsPage: View {
@StateObject private var sdk = FastCommentsSDK(
config: FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "article-42",
url: "https://example.com/article/42",
pageTitle: "Article Title"
)
)
var body: some View {
FastCommentsView(sdk: sdk)
.task {
try? await sdk.load()
}
}
}
वोट स्टाइल
डिफ़ॉल्ट वोट स्टाइल ऊपर/नीचे तीर दिखाता है। हार्ट-स्टाइल वोट के लिए ._1 पास करें:
FastCommentsView(sdk: sdk, voteStyle: ._1)| स्टाइल | रूप |
|---|---|
._0 | शुद्ध गिनती के साथ ऊपर/नीचे तीर बटन |
._1 | गिनती के साथ एकल हार्ट बटन |
इवेंट कॉलबैक
उपयोगकर्ता इंटरैक्शन को संभालने के लिए मॉडिफ़ायर-स्टाइल कॉलबैक का उपयोग करें:
FastCommentsView(sdk: sdk)
.onCommentPosted { comment in
print("New comment: \(comment.commentHTML)")
}
.onReplyClick { renderableComment in
print("Replying to: \(renderableComment.comment.id)")
}
.onUserClick { context, userInfo, source in
// source .name या .avatar होता है
print("Tapped \(userInfo.displayName)")
}
थीम लागू करना
SwiftUI एनवायरनमेंट के माध्यम से थीम पास करें:
FastCommentsView(sdk: sdk)
.fastCommentsTheme(myTheme)
.task { try? await sdk.load() }
या इसे सीधे SDK पर सेट करें:
sdk.theme = FastCommentsTheme.modern
सॉर्ट दिशा
sdk.defaultSortDirection = .nf // नवीनतम पहले (डिफ़ॉल्ट)
sdk.defaultSortDirection = .of // सबसे पुराना पहले
sdk.defaultSortDirection = .mr // सर्वाधिक प्रासंगिक
लाइव चैट 
LiveChatView ऑटो-स्क्रॉल, दिनांक विभाजक और एक संक्षिप्त लेआउट के साथ रीयल-टाइम चैट अनुभव प्रदान करता है। यह SDK को सबसे पुराने-पहले सॉर्ट और तुरंत लाइव डिस्प्ले के लिए स्वचालित रूप से कॉन्फ़िगर करता है।
struct ChatView: View {
@StateObject private var sdk: FastCommentsSDK = {
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "chat-room-1",
sso: ssoToken // SSO अनुशंसित है ताकि उपयोगकर्ताओं के नाम हों
)
return FastCommentsSDK(config: config)
}()
var body: some View {
LiveChatView(sdk: sdk)
.onCommentPosted { comment in
print("Sent: \(comment.commentHTML)")
}
.task {
try? await sdk.load()
}
}
}
LiveChatView इन कॉलबैक का समर्थन करता है:
.onCommentPosted-- जब उपयोगकर्ता संदेश भेजता है तो सक्रिय होता है.onCommentDeleted-- जब कोई संदेश हटाया जाता है तो सक्रिय होता है.onUserClick-- जब किसी उपयोगकर्ता के नाम या अवतार पर टैप किया जाता है तो सक्रिय होता है
सोशल फ़ीड 
फ़ीड सिस्टम एक अलग SDK (FastCommentsFeedSDK) है जिसका अपना व्यू होता है।
फ़ीड लोड करना और दिखाना
struct FeedPage: View {
@StateObject private var sdk: FastCommentsFeedSDK = {
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "my-feed",
sso: ssoToken
)
return FastCommentsFeedSDK(config: config)
}()
@State private var commentsPost: FeedPost?
var body: some View {
FastCommentsFeedView(sdk: sdk)
.onPostSelected { post in
commentsPost = post
}
.onCommentsRequested { post in
commentsPost = post
}
.onSharePost { post in
// शेयर शीट प्रस्तुत करें
}
.onUserClick { context, userInfo, source in
// यूज़र प्रोफ़ाइल पर नेविगेट करें
}
.onMediaClick { mediaItem, index in
// फ़ुल-स्क्रीन इमेज व्यूअर प्रस्तुत करें
}
.task {
try? await sdk.loadIfNeeded()
}
}
}
फ़ीड व्यू में पुल-टू-रिफ्रेश और इनफिनिट स्क्रॉल स्वचालित रूप से शामिल हैं।
स्क्रीन लाइफ़साइकिल में पुनः प्रवेश के लिए loadIfNeeded() का उपयोग करें ताकि कोई मौजूदा या पुनर्स्थापित फ़ीड पेज 1 पर रीसेट न हो जाए।
पोस्ट बनाना
पोस्ट निर्माण फ़ॉर्म प्रस्तुत करने के लिए FeedPostCreateView का उपयोग करें:
@State private var showCreatePost = false
// अपने व्यू बॉडी में:
.sheet(isPresented: $showCreatePost) {
FeedPostCreateView(
sdk: sdk,
onPostCreated: { post in
showCreatePost = false
Task { try? await sdk.refresh() }
},
onCancelled: {
showCreatePost = false
}
)
}
पोस्ट पर प्रतिक्रिया देना
SDK ऑप्टिमिस्टिक अपडेट के साथ प्रतिक्रियाओं को संभालता है:
try await sdk.reactPost(postId: post.id, reactionType: "l")
// प्रतिक्रिया स्थिति जाँचें
let hasLiked = sdk.hasUserReacted(postId: post.id, reactType: "l")
let likeCount = sdk.getLikeCount(postId: post.id)
किसी पोस्ट पर टिप्पणियाँ खोलना
फ़ीड पोस्ट के लिए टिप्पणियाँ दिखाने के लिए CommentsSheet का उपयोग करें। यह फ़ीड SDK के कॉन्फ़िग का उपयोग करके आंतरिक रूप से एक FastCommentsSDK इंस्टेंस बनाता है:
.sheet(item: $commentsPost) { post in
CommentsSheet(post: post, feedSDK: sdk, onUserClick: { context, userInfo, source in
// यूज़र क्लिक को संभालें
})
}
नोट: .sheet(item:) के लिए FeedPost को Identifiable के अनुरूप होना चाहिए। यह एक्सटेंशन जोड़ें:
extension FeedPost: @retroactive Identifiable {}
टैग-आधारित फ़ीड फ़िल्टरिंग
टैग द्वारा फ़ीड पोस्ट फ़िल्टर करने के लिए TagSupplier प्रोटोकॉल लागू करें:
struct TeamTagSupplier: TagSupplier {
func getTags(currentUser: UserSessionInfo?) -> [String]? {
guard let user = currentUser else { return nil }
return ["team:\(user.id ?? "")", "public"]
}
}
sdk.tagSupplier = TeamTagSupplier()
बिना फ़िल्टर वाली ग्लोबल फ़ीड के लिए nil लौटाएँ।
फ़ीड स्थिति को सहेजना और पुनर्स्थापित करना
व्यू लाइफ़साइकिल इवेंट्स के दौरान पेजिनेशन स्थिति को सुरक्षित रखें:
let state = sdk.savePaginationState()
// बाद में...
sdk.restorePaginationState(state)
try? await sdk.loadIfNeeded()
यदि आपकी स्क्रीन अस्थायी रूप से गायब हो जाती है, तो फ़ीड व्यू लाइव अपडेट को स्वचालित रूप से रोक देता है और लोड की गई पोस्ट साफ़ किए बिना पुनः दिखने पर उन्हें फिर से शुरू कर देता है। sdk.cleanup() को केवल तब कॉल करें जब आप SDK इंस्टेंस के साथ वास्तव में काम पूरा कर चुके हों।
पोस्ट हटाना
sdk.onPostDeleted = { postId in
print("Post \(postId) was deleted")
}
थीमिंग 
थीम प्रीसेट्स
चार बिल्ट-इन प्रीसेट्स उपलब्ध हैं:
// सिस्टम डिफ़ॉल्ट
sdk.theme = FastCommentsTheme.default
// शैडो और बड़े गोल कोनों वाले कार्ड
sdk.theme = FastCommentsTheme.modern
// फ्लैट, बिना शैडो, छोटा कॉर्नर रेडियस, बिना थ्रेड लाइन
sdk.theme = FastCommentsTheme.minimal
// सभी एक्शन रंगों को एक सिंगल ब्रांड रंग पर सेट करें
sdk.theme = FastCommentsTheme.allPrimary(.indigo)
कमेंट डिस्प्ले स्टाइल
var theme = FastCommentsTheme()
theme.commentStyle = .flat // डिवाइडर के साथ फ्लैट लिस्ट (डिफ़ॉल्ट)
theme.commentStyle = .card // शैडो के साथ गोल कार्ड
theme.commentStyle = .bubble // चैट बबल स्टाइल
रंग
सभी रंग प्रॉपर्टीज़ वैकल्पिक हैं। सेट न किए गए मान उचित सिस्टम डिफ़ॉल्ट पर वापस चले जाते हैं।
var theme = FastCommentsTheme()
// ब्रांड रंग
theme.primaryColor = .indigo
theme.primaryLightColor = .indigo.opacity(0.6)
theme.primaryDarkColor = Color(red: 0.2, green: 0.1, blue: 0.5)
// बैकग्राउंड
theme.commentBackgroundColor = Color(.secondarySystemGroupedBackground)
theme.containerBackgroundColor = Color(.systemGroupedBackground)
// एक्शन बटन
theme.actionButtonColor = .indigo
theme.replyButtonColor = .indigo
theme.toggleRepliesButtonColor = .indigo.opacity(0.8)
theme.loadMoreButtonTextColor = .indigo
// वोट
theme.voteActiveColor = .red
theme.voteCountColor = .primary
theme.voteCountZeroColor = .secondary
theme.voteDividerColor = Color(.separator)
// लिंक
theme.linkColor = .indigo
theme.linkColorPressed = .indigo.opacity(0.5)
// डायलॉग
theme.dialogHeaderBackgroundColor = .indigo
theme.dialogHeaderTextColor = .white
// इनपुट बार
theme.inputBarBackgroundColor = Color(.systemBackground)
theme.inputBarBorderColor = Color(.separator)
// अन्य
theme.onlineIndicatorColor = .green
theme.separatorColor = Color(.separator)
theme.badgeBackgroundColor = .gray.opacity(0.2)
theme.threadLineColor = .indigo.opacity(0.15)
टाइपोग्राफी
theme.commenterNameFont = .subheadline.weight(.bold)
theme.bodyFont = .body
theme.captionFont = .caption
theme.actionFont = .caption.weight(.medium)
लेआउट और स्पेसिंग
theme.cornerRadius = .large // .none, .small, .medium, .large
theme.commentSpacing = 4 // कमेंट पंक्तियों के बीच पॉइंट
theme.nestingIndent = 20 // प्रत्येक नेस्टिंग स्तर पर इंडेंटेशन के पॉइंट
theme.avatarSize = 36 // रूट कमेंट के लिए अवतार व्यास
theme.replyAvatarSize = 28 // नेस्टेड रिप्लाई के लिए अवतार व्यास
विज़ुअल इफ़ेक्ट्स
theme.showShadows = true // कार्ड पर हल्की शैडो
theme.showThreadLine = true // नेस्टेड रिप्लाई को जोड़ने वाली वर्टिकल लाइन
theme.animateVotes = true // वोट परिवर्तन पर स्प्रिंग एनिमेशन
थीम लागू करना
दो तरीके:
// SwiftUI environment के माध्यम से (व्यू हायरार्की के लिए अनुशंसित)
FastCommentsView(sdk: sdk)
.fastCommentsTheme(theme)
// सीधे SDK पर
sdk.theme = theme
कस्टम टूलबार बटन 
कमेंट टूलबार बटन
कमेंट इनपुट टूलबार में बटन जोड़ने के लिए CustomToolbarButton प्रोटोकॉल लागू करें:
struct EmojiButton: CustomToolbarButton {
let id = "emoji"
let iconSystemName = "face.smiling" // SF Symbol का नाम
let contentDescription = "Add Emoji"
let badgeText: String? = nil // वैकल्पिक बैज काउंट
func onClick(text: Binding<String>) {
text.wrappedValue += "\u{1F44D}"
}
// वैकल्पिक ओवरराइड (डिफ़ॉल्ट true है)
func isEnabled() -> Bool { true }
func isVisible() -> Bool { true }
}
व्यू बनाते समय कस्टम बटन पास करें:
FastCommentsView(
sdk: sdk,
customToolbarButtons: [EmojiButton(), CodeBlockButton()]
)
या SDK पर उन्हें ग्लोबली जोड़ें (सभी इंस्टेंस पर लागू होता है):
sdk.addGlobalCustomToolbarButton(EmojiButton())
sdk.removeGlobalCustomToolbarButton(id: "emoji")
sdk.clearGlobalCustomToolbarButtons()
फ़ीड टूलबार बटन
पोस्ट बनाने के फ़ॉर्म के लिए FeedCustomToolbarButton लागू करें:
struct HashtagButton: FeedCustomToolbarButton {
let id = "hashtag"
let iconSystemName = "number"
let contentDescription = "Add Hashtag"
func onClick(content: Binding<String>) {
content.wrappedValue += "#"
}
}
उन्हें क्रिएशन व्यू को पास करें:
FeedPostCreateView(
sdk: sdk,
customToolbarButtons: [HashtagButton()],
onPostCreated: { _ in },
onCancelled: { }
)
या फ़ीड SDK पर उन्हें ग्लोबली सेट करें:
sdk.globalFeedToolbarButtons = [HashtagButton()]
मॉडरेशन 
सभी उपयोगकर्ताओं के लिए उपलब्ध क्रियाएँ
- Flag/Unflag -- समीक्षा के लिए किसी टिप्पणी की रिपोर्ट करें
try await sdk.flagComment(commentId: commentId)
try await sdk.unflagComment(commentId: commentId)
- Block/Unblock -- किसी उपयोगकर्ता की सभी टिप्पणियाँ छिपाएँ (प्रति-दर्शक)
try await sdk.blockUser(commentId: commentId)
try await sdk.unblockUser(commentId: commentId)
केवल एडमिन के लिए क्रियाएँ
- Pin/Unpin -- किसी टिप्पणी को थ्रेड के शीर्ष पर पिन करें
try await sdk.pinComment(commentId: commentId)
try await sdk.unpinComment(commentId: commentId)
- Lock/Unlock -- किसी टिप्पणी पर नए उत्तरों को रोकें, और अनलॉक होने तक संपादन और हटाने को ब्लॉक करें (यह सभी पर लागू होता है, मॉडरेटर्स सहित)
try await sdk.lockComment(commentId: commentId)
try await sdk.unlockComment(commentId: commentId)
सभी मॉडरेशन क्रियाएँ UI में टिप्पणी संदर्भ मेनू के माध्यम से भी उपलब्ध हैं। एडमिन क्रियाएँ केवल तब दिखाई देती हैं जब वर्तमान उपयोगकर्ता साइट एडमिन हो (SSO isAdmin फ्लैग या डैशबोर्ड कॉन्फ़िगरेशन के माध्यम से सेट)।
रीयल-टाइम अपडेट 
sdk.load() को कॉल करने के बाद, SDK कॉन्फ़िगर किए गए urlId के लिए स्वचालित रूप से WebSocket इवेंट्स की सदस्यता ले लेता है। निम्नलिखित इवेंट्स हैंडल किए जाते हैं:
- नई टिप्पणियाँ, संपादन और डिलीशन
- वोट (नए और हटाए गए)
- पिन, लॉक, फ्लैग और ब्लॉक स्थिति में परिवर्तन
- यूज़र प्रेज़ेंस (जॉइन/लीव)
- थ्रेड खुलना/बंद होना
- बैज पुरस्कार
- सर्वर कॉन्फ़िगरेशन अपडेट
लाइव डिस्प्ले को नियंत्रित करना
डिफ़ॉल्ट रूप से, अन्य उपयोगकर्ताओं की नई टिप्पणियाँ तुरंत दिखाई देती हैं:
sdk.showLiveRightAway = true // Default: show instantly
नई टिप्पणियों को एक "N नई टिप्पणियाँ" बटन के पीछे बफर करने के लिए इसे false सेट करें, जिससे उपयोगकर्ता चुन सके कि उन्हें कब दिखाना है:
sdk.showLiveRightAway = false
यूज़र प्रेज़ेंस
जब सर्वर प्रेज़ेंस ट्रैकिंग सक्षम करता है, तो ऑनलाइन/ऑफलाइन संकेतक स्वचालित रूप से उपयोगकर्ता अवतारों पर दिखाई देते हैं। क्लाइंट पर किसी अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता नहीं है।
पेजिनेशन 
पेज साइज़
// Comments: default 30
sdk.pageSize = 50
// Feed: default 10
feedSDK.pageSize = 20
अधिक कमेंट्स लोड करना
UI पेजिनेशन कंट्रोल्स अपने आप दिखाता है। आप प्रोग्रामेटिक रूप से भी पेजिनेशन ट्रिगर कर सकते हैं:
// Load next page
try await sdk.loadMore()
// Load all remaining (disabled if >2000 comments for performance)
try await sdk.loadAll()
// Check state
sdk.hasMore // Whether more pages exist
sdk.shouldShowLoadAll()
sdk.getCountRemainingToShow()
चाइल्ड कमेंट पेजिनेशन
नेस्टेड रिप्लाई लेज़ी लोड होते हैं। जब कोई यूज़र एक थ्रेड खोलता है, तो पहले 5 चाइल्ड कमेंट्स लोड होते हैं। यदि और रिप्लाई मौजूद हैं तो एक "load more replies" कंट्रोल दिखाई देता है। यह UI द्वारा अपने आप हैंडल किया जाता है।
स्थिति और ऑब्ज़र्वेबिलिटी 
FastCommentsSDK और FastCommentsFeedSDK दोनों @Published प्रॉपर्टीज़ वाली ObservableObject क्लासेस हैं। आप अपने SwiftUI व्यूज़ में इन्हें रिएक्टिव UI अपडेट्स के लिए observe कर सकते हैं।
FastCommentsSDK Published Properties
| Property | Type | Description |
|---|---|---|
commentCountOnServer | Int | सर्वर पर कुल कमेंट संख्या |
newRootCommentCount | Int | बफ़र की गई नई कमेंट्स (जब showLiveRightAway false हो) |
currentUser | UserSessionInfo? | वर्तमान प्रमाणित यूज़र |
isSiteAdmin | Bool | क्या वर्तमान यूज़र साइट एडमिन है |
isClosed | Bool | क्या कमेंट थ्रेड बंद है |
hasBillingIssue | Bool | क्या बिलिंग में कोई समस्या है |
isLoading | Bool | क्या कोई नेटवर्क रिक्वेस्ट चल रही है |
hasMore | Bool | क्या कमेंट्स के और पेज मौजूद हैं |
blockingErrorMessage | String? | वह एरर जो UI के काम करने से रोकता है |
warningMessage | String? | नॉन-ब्लॉकिंग चेतावनी संदेश |
isDemo | Bool | क्या डेमो मोड में चल रहा है |
commentsVisible | Bool | कमेंट विज़िबिलिटी के लिए टॉगल |
toolbarEnabled | Bool | क्या फ़ॉर्मैटिंग टूलबार दिखाया जाता है |
FastCommentsFeedSDK Published Properties
| Property | Type | Description |
|---|---|---|
feedPosts | [FeedPost] | वर्तमान में लोड की गई फ़ीड पोस्ट्स |
hasMore | Bool | क्या और पेज मौजूद हैं |
currentUser | UserSessionInfo? | वर्तमान प्रमाणित यूज़र |
blockingErrorMessage | String? | ब्लॉकिंग एरर संदेश |
isLoading | Bool | क्या कोई नेटवर्क रिक्वेस्ट चल रही है |
newPostsCount | Int | पिछली लोड के बाद नई पोस्ट्स की संख्या |
Comment Tree
कमेंट ट्री को sdk.commentsTree के ज़रिए एक्सेस किया जा सकता है:
// Flat list of visible nodes for rendering
sdk.commentsTree.visibleNodes
// Lookup a comment by ID
sdk.commentsTree.commentsById["comment-id"]
EU क्षेत्र 
EU डेटा सेंटर का उपयोग करने के लिए, अपने कॉन्फ़िग में region फ़ील्ड सेट करें:
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "my-page",
region: "eu"
)
यह सभी API अनुरोधों और WebSocket कनेक्शनों को eu.fastcomments.com पर रूट करता है।
क्लीनअप 
जब आप किसी SDK इंस्टेंस के साथ काम पूरा कर लें (उदाहरण के लिए, व्यू को डिसमिस किया जा रहा हो), तो WebSocket कनेक्शन बंद करने और बैकग्राउंड टास्क रद्द करने के लिए cleanup() को कॉल करें:
sdk.cleanup()
SwiftUI के @StateObject द्वारा प्रबंधित व्यूज़ के लिए, इसे आमतौर पर .onDisappear में या व्यू के डीअलोकेट होने पर कॉल किया जाता है।
इमेज अपलोड 
कमेंट्स
let imageUrl = try await sdk.uploadImage(imageData: jpegData, filename: "photo.jpg")
अपलोड की गई इमेज का URL स्ट्रिंग रिटर्न करता है।
फ़ीड पोस्ट्स
let mediaItem = try await feedSDK.uploadImage(imageData: jpegData, filename: "photo.jpg")
// एक साथ कई इमेज पैरेलल में अपलोड करें
let mediaItems = try await feedSDK.uploadImages(images: [
(jpegData1, "photo1.jpg"),
(jpegData2, "photo2.jpg")
])
उपयोगकर्ता मेंशन 
@mention ऑटोकम्प्लीट के लिए उपयोगकर्ताओं को खोजें:
let results = try await sdk.searchUsers(query: "jan")
// Returns [UserSearchResult] with userId, username, avatar, etc.
बिल्ट-इन CommentInputBar @mention ऑटोकम्प्लीट को स्वचालित रूप से संभालता है।
टिप्पणियाँ संपादित और हटाना 
संपादित करें
try await sdk.editComment(commentId: commentId, newText: "Updated text")
सर्वर HTML को फिर से रेंडर करता है। स्थानीय कमेंट स्वचालित रूप से अपडेट हो जाता है।
हटाएं
try await sdk.deleteComment(commentId: commentId)
किसी कमेंट को हटाने पर उसके डिसेंडेंट्स भी स्थानीय ट्री से हटा दिए जाते हैं।
दोनों क्रियाएँ UI में कमेंट कॉन्टेक्स्ट मेनू के माध्यम से उपलब्ध होती हैं, जब वर्तमान उपयोगकर्ता कमेंट लेखक (या साइट एडमिन) हो।
त्रुटि प्रबंधन 
SDK मेथड्स FastCommentsError थ्रो करते हैं, जो LocalizedError के अनुरूप है:
do {
try await sdk.load()
} catch let error as FastCommentsError {
print(error.translatedError ?? error.reason ?? "Unknown error")
} catch {
print(error.localizedDescription)
}
FastCommentsError की प्रॉपर्टीज़:
code-- API से मिला एरर कोडreason-- अंग्रेज़ी में एरर विवरणtranslatedError-- सर्वर द्वारा प्रदान किया गया स्थानीयकृत एरर संदेश
ब्लॉकिंग एरर्स sdk.blockingErrorMessage के माध्यम से भी स्वतः दिखाए जाते हैं, जिन्हें बिल्ट-इन व्यूज़ उपयोगकर्ता को प्रदर्शित करते हैं।
सहायता चाहिए?
यदि आपको iOS Library के बारे में कोई समस्या आती है या कोई प्रश्न है, तो कृपया:
योगदान देना
योगदान का स्वागत है! कृपया योगदान दिशानिर्देशों के लिए GitHub रिपॉजिटरी देखें।