
Γλώσσα 🇬🇷 Ελληνικά
Τεκμηρίωση
Πρώτα βήματα
Έλεγχος ταυτότητας
Χρήση
Add Comments to Your iOS App
Αυτή είναι η επίσημη βιβλιοθήκη iOS για το FastComments.
Ενσωματώστε widgets για ζωντανά σχόλια, συνομιλία και αξιολογήσεις στην εφαρμογή iOS σας.
Αποθετήριο
Χαρακτηριστικά 
- Δέντρα σχολίων με εμφωλευμένες απαντήσεις και σελιδοποίηση
- Κοινωνική ροή με δημιουργία αναρτήσεων, αντιδράσεις και συνημμένα πολυμέσων
- Λειτουργία ζωντανής συνομιλίας με αυτόματη κύλιση και διαχωριστικά ημερομηνιών
- Ενημερώσεις σε πραγματικό χρόνο μέσω WebSocket (νέα σχόλια, ψήφοι, παρουσία)
- Single Sign-On (Simple SSO για δοκιμές, Secure SSO για παραγωγή)
- Επεξεργασία μορφοποιημένου κειμένου με έντονη γραφή, πλάγια, μορφοποίηση κώδικα και @mentions
- Ψηφοφορία με ρυθμιζόμενα στυλ (βέλη πάνω/κάτω ή καρδιές)
- Ενέργειες εποπτείας: αναφορά, καρφίτσωμα, κλείδωμα, αποκλεισμός
- Εκτενής θεματοποίηση με προεπιλογές και πλήρη προσαρμογή
- Προσαρμοσμένα κουμπιά γραμμής εργαλείων για σχόλια και δημιουργία αναρτήσεων στη ροή
- Ανέβασμα εικόνων
- Υποστήριξη περιοχής ΕΕ
- Παρουσία χρηστών (ενδείκτες σε σύνδεση/εκτός σύνδεσης)
- Φιλτράρισμα ροής βάσει ετικετών
- Υποστήριξη τοπικοποίησης
Εγκατάσταση 
Προσθέστε το FastCommentsUI στο έργο σας χρησιμοποιώντας το Swift Package Manager.
Στο Xcode: File > Add Package Dependencies, στη συνέχεια εισάγετε το URL του αποθετηρίου.
Ή προσθέστε το στο Package.swift σας:
dependencies: [
.package(url: "https://github.com/fastcomments/fastcomments-ios.git", from: "1.0.0")
]
Στη συνέχεια προσθέστε το προϊόν στο target σας:
.target(
name: "YourApp",
dependencies: [
.product(name: "FastCommentsUI", package: "fastcomments-ios")
]
)
Εισάγετε και τα δύο modules όπου χρειάζεται:
import FastCommentsUI
import FastCommentsSwift
Γρήγορη εκκίνηση 
Η ελάχιστη ρύθμιση για την εμφάνιση ενός widget σχολίων:
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" με το tenant ID του FastComments σας. Το urlId προσδιορίζει τη σελίδα ή την συζήτηση (thread) όπου αποθηκεύονται τα σχόλια.
Έλεγχος ταυτότητας (SSO) 
FastComments supports three authentication modes:
- Anonymous -- χωρίς SSO token; οι χρήστες λαμβάνουν ταυτότητες με βάση τη συνεδρία
- Simple SSO -- token στην πλευρά του πελάτη για παρουσιάσεις και τοπικές δοκιμές (μη ασφαλές)
- Secure SSO -- token υπογεγραμμένο από διακομιστή για παραγωγή
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 also supports optional fields:
id-- user ID (defaults to email if not set) ->id-- αναγνωριστικό χρήστη (εξ ορισμού το email αν δεν οριστεί)displayName-- separate display name ->displayName-- ξεχωριστό εμφανιζόμενο όνομαdisplayLabel-- custom label shown next to the name (e.g. "VIP") ->displayLabel-- προσαρμοσμένη ετικέτα που εμφανίζεται δίπλα στο όνομα (π.χ. "VIP")websiteUrl-- link on the user's name ->websiteUrl-- σύνδεσμος στο όνομα του χρήστηlocale-- locale code ->locale-- κωδικός τοπικής ρύθμισηςisProfileActivityPrivate-- hide profile activity (defaults to true) ->isProfileActivityPrivate-- απόκρυψη δραστηριότητας προφίλ (εξ ορισμού true)
Secure SSO
Σε παραγωγή, το backend σας δημιουργεί ένα υπογεγραμμένο SSO token χρησιμοποιώντας το API secret σας. Η εφαρμογή iOS ανακτά αυτό το token από τον διακομιστή σας και το περνάει στο config.
On your backend (using the FastComments Swift SDK or any language):
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()
// Επιστρέψτε αυτό το token στην εφαρμογή iOS μέσω του API σας
In your iOS app:
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 {
// Ανακτήστε το token από το backend σας
let token = try? await fetchSSOTokenFromYourBackend()
// Δημιουργήστε ένα νέο config με το token, ή ορίστε το πριν το φόρτωμα
isLoadingToken = false
try? await sdk.load()
}
}
}
SecureSSOUserData supports additional fields:
optedInNotifications-- email notification opt-in ->optedInNotifications-- επιλογή λήψης ειδοποιήσεων μέσω emaildisplayLabel-- custom label ->displayLabel-- προσαρμοσμένη ετικέταdisplayName-- display name ->displayName-- εμφανιζόμενο όνομαwebsiteUrl-- website URL ->websiteUrl-- URL ιστότοπουgroupIds-- group memberships ->groupIds-- συμμετοχές σε ομάδεςisAdmin-- admin privileges ->isAdmin-- προνόμια διαχειριστήisModerator-- moderator privileges ->isModerator-- προνόμια συντονιστήisProfileActivityPrivate-- profile privacy ->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 |
Ενιαίο κουμπί καρδιάς με μέτρηση |
Κλήσεις επιστροφής συμβάντων
Χρησιμοποιήστε κλήσεις επιστροφής σε μορφή modifier για να χειριστείτε τις αλληλεπιδράσεις του χρήστη:
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 υποστηρίζει τις ακόλουθες callbacks:
.onCommentPosted-- εκτελείται όταν ο χρήστης στέλνει ένα μήνυμα.onCommentDeleted-- εκτελείται όταν ένα μήνυμα διαγράφεται.onUserClick-- εκτελείται όταν πατηθεί το όνομα ή το avatar ενός χρήστη
Κοινωνική ροή 
Το σύστημα ροής είναι ένα ξεχωριστό 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.load()
}
}
}
Η προβολή ροής περιλαμβάνει αυτόματα σύρσιμο για ανανέωση (pull-to-refresh) και απεριόριστη κύλιση.
Δημιουργία Αναρτήσεων
Χρησιμοποιήστε το FeedPostCreateView για να εμφανίσετε μια φόρμα δημιουργίας ανάρτησης:
@State private var showCreatePost = false
// In your view body:
.sheet(isPresented: $showCreatePost) {
FeedPostCreateView(
sdk: sdk,
onPostCreated: { post in
showCreatePost = false
Task { try? await sdk.refresh() }
},
onCancelled: {
showCreatePost = false
}
)
}
Αντιδράσεις σε Αναρτήσεις
Το SDK χειρίζεται τις αντιδράσεις με αισιόδοξες ενημερώσεις (optimistic updates):
try await sdk.reactPost(postId: post.id, reactionType: "l")
// Check reaction state
let hasLiked = sdk.hasUserReacted(postId: post.id, reactType: "l")
let likeCount = sdk.getLikeCount(postId: post.id)
Άνοιγμα Σχολίων σε Ανάρτηση
Χρησιμοποιήστε το CommentsSheet για να εμφανίσετε σχόλια για μια ανάρτηση ροής. Αυτό δημιουργεί εσωτερικά ένα στιγμιότυπο FastCommentsSDK χρησιμοποιώντας τη διαμόρφωση (config) του feed SDK:
.sheet(item: $commentsPost) { post in
CommentsSheet(post: post, feedSDK: sdk, onUserClick: { context, userInfo, source in
// Χειρισμός κλικ χρήστη
})
}
Σημείωση: FeedPost πρέπει να συμμορφώνεται με Identifiable για .sheet(item:). Προσθέστε αυτήν την επέκταση:
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()
// Later...
sdk.restorePaginationState(state)
Διαγραφή Αναρτήσεων
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 // Διάμετρος avatar για σχόλια ρίζας
theme.replyAvatarSize = 28 // Διάμετρος avatar για εμφωλευμένες απαντήσεις
Οπτικά Εφέ
theme.showShadows = true // Διακριτικές σκιές στις κάρτες
theme.showThreadLine = true // Κάθετη γραμμή που συνδέει εμφωλευμένες απαντήσεις
theme.animateVotes = true // Εφέ ελατηρίου στις αλλαγές ψήφων
Εφαρμογή θεμάτων
Δύο προσεγγίσεις:
// Μέσω του περιβάλλοντος SwiftUI (συνιστάται για την ιεραρχία προβολής)
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}"
}
// Προαιρετικά overrides (προεπιλογή 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: { }
)
Ή ορίστε τα παγκοσμίως στο feed SDK:
sdk.globalFeedToolbarButtons = [HashtagButton()]
Επιμέλεια 
Δράσεις Διαθέσιμες σε Όλους τους Χρήστες
- Σήμανση/Αποσήμανση -- αναφορά ενός σχολίου για έλεγχο
try await sdk.flagComment(commentId: commentId)
try await sdk.unflagComment(commentId: commentId)
- Αποκλεισμός/Κατάργηση Αποκλεισμού -- απόκρυψη όλων των σχολίων από έναν χρήστη (ανά θεατή)
try await sdk.blockUser(commentId: commentId)
try await sdk.unblockUser(commentId: commentId)
Δράσεις Μόνο για Διαχειριστές
- Καρφίτσωμα/Αφαίρεση καρφιτσώματος -- καρφίτσωμα ενός σχολίου στην κορυφή του νήματος
try await sdk.pinComment(commentId: commentId)
try await sdk.unpinComment(commentId: commentId)
- Κλείδωμα/Ξεκλείδωμα -- αποτροπή νέων απαντήσεων σε ένα σχόλιο
try await sdk.lockComment(commentId: commentId)
try await sdk.unlockComment(commentId: commentId)
All moderation actions are also available through the comment context menu in the UI. Admin actions only appear when the current user is a site admin (set via SSO isAdmin flag or dashboard configuration).
Ενημερώσεις σε πραγματικό χρόνο 
Μετά την κλήση του sdk.load(), το SDK εγγράφεται αυτόματα σε γεγονότα WebSocket για το διαμορφωμένο urlId. Τα παρακάτω γεγονότα διαχειρίζονται:
- Νέα σχόλια, επεξεργασίες και διαγραφές
- Ψήφοι (νέες και αφαιρεμένες)
- Αλλαγές κατάστασης καρφίτσας, κλειδώματος, σηματοδότησης και αποκλεισμού
- Παρουσία χρήστη (είσοδος/έξοδος)
- Άνοιγμα/κλείσιμο νήματος
- Απονομή διακριτικών
- Ενημερώσεις ρυθμίσεων του διακομιστή
Έλεγχος της ζωντανής προβολής
Από προεπιλογή, νέα σχόλια από άλλους χρήστες εμφανίζονται αμέσως:
sdk.showLiveRightAway = true // Προεπιλογή: εμφάνιση αμέσως
Ρυθμίστε αυτό σε false για να συγκρατείτε τα νέα σχόλια πίσω από ένα κουμπί "N νέα σχόλια", επιτρέποντας στον χρήστη να επιλέξει πότε θα τα αποκαλύψει:
sdk.showLiveRightAway = false
Παρουσία Χρηστών
Οι ενδείκτες online/offline εμφανίζονται αυτόματα στα avatar των χρηστών όταν ο διακομιστής ενεργοποιεί την παρακολούθηση παρουσίας. Δεν απαιτείται επιπλέον ρύθμιση στην πλευρά του πελάτη.
Σελιδοποίηση 
Μέγεθος Σελίδας
// Σχόλια: προεπιλογή 30
sdk.pageSize = 50
// Ροή: προεπιλογή 10
feedSDK.pageSize = 20
Φόρτωση Περισσότερων Σχολίων
Το UI εμφανίζει στοιχεία ελέγχου σελιδοποίησης αυτόματα. Μπορείτε επίσης να ενεργοποιήσετε τη σελιδοποίηση προγραμματιστικά:
// Φόρτωση επόμενης σελίδας
try await sdk.loadMore()
// Φόρτωση όλων των υπολοίπων (απενεργοποιημένο εάν >2000 σχόλια για λόγους απόδοσης)
try await sdk.loadAll()
// Έλεγχος κατάστασης
sdk.hasMore // Εάν υπάρχουν περισσότερες σελίδες
sdk.shouldShowLoadAll()
sdk.getCountRemainingToShow()
Σελιδοποίηση Υποσχολίων
Οι εμφωλευμένες απαντήσεις φορτώνονται μόνο όταν χρειάζεται. Όταν ένας χρήστης επεκτείνει ένα νήμα, φορτώνονται τα πρώτα 5 υποσχόλια. Εμφανίζεται ένα στοιχείο ελέγχου "φόρτωση περισσότερων απαντήσεων" εάν υπάρχουν περισσότερα. Αυτό διαχειρίζεται αυτόματα από το UI.
Κατάσταση και Παρατηρησιμότητα 
Και τα FastCommentsSDK και FastCommentsFeedSDK είναι κλάσεις ObservableObject με ιδιότητες @Published. Μπορείτε να παρακολουθείτε αυτές στις προβολές SwiftUI σας για αντιδραστικές ενημερώσεις του UI.
FastCommentsSDK Δημοσιευμένες Ιδιότητες
| Ιδιότητα | Τύπος | Περιγραφή |
|---|---|---|
commentCountOnServer |
Int |
Συνολικός αριθμός σχολίων στον διακομιστή |
newRootCommentCount |
Int |
Νέα σχόλια σε προσωρινή αποθήκευση (όταν το showLiveRightAway είναι false) |
currentUser |
UserSessionInfo? |
Τρέχων αυθεντικοποιημένος χρήστης |
isSiteAdmin |
Bool |
Εάν ο τρέχων χρήστης είναι διαχειριστής του ιστότοπου |
isClosed |
Bool |
Εάν το νήμα σχολίων είναι κλειστό |
hasBillingIssue |
Bool |
Εάν υπάρχει πρόβλημα χρέωσης |
isLoading |
Bool |
Εάν βρίσκεται σε εξέλιξη ένα αίτημα δικτύου |
hasMore |
Bool |
Εάν υπάρχουν περισσότερες σελίδες σχολίων |
blockingErrorMessage |
String? |
Σφάλμα που εμποδίζει τη λειτουργία της διεπαφής χρήστη |
warningMessage |
String? |
Μη μπλοκαριστικό μήνυμα προειδοποίησης |
isDemo |
Bool |
Εάν τρέχει σε λειτουργία demo |
commentsVisible |
Bool |
Εναλλαγή ορατότητας σχολίων |
toolbarEnabled |
Bool |
Εάν η γραμμή εργαλείων μορφοποίησης εμφανίζεται |
FastCommentsFeedSDK Δημοσιευμένες Ιδιότητες
| Ιδιότητα | Τύπος | Περιγραφή |
|---|---|---|
feedPosts |
[FeedPost] |
Αναρτήσεις feed που έχουν φορτωθεί |
hasMore |
Bool |
Εάν υπάρχουν περισσότερες σελίδες |
currentUser |
UserSessionInfo? |
Τρέχων αυθεντικοποιημένος χρήστης |
blockingErrorMessage |
String? |
Μπλοκαριστικό μήνυμα σφάλματος |
isLoading |
Bool |
Εάν βρίσκεται σε εξέλιξη ένα αίτημα δικτύου |
newPostsCount |
Int |
Αριθμός νέων αναρτήσεων από την τελευταία φόρτωση |
Δέντρο Σχολίων
Το δέντρο σχολίων είναι προσβάσιμο μέσω του sdk.commentsTree:
// Επίπεδη λίστα ορατών κόμβων για απόδοση
sdk.commentsTree.visibleNodes
// Εύρεση σχολίου κατά ID
sdk.commentsTree.commentsById["comment-id"]
Περιοχή ΕΕ 
Για να χρησιμοποιήσετε το κέντρο δεδομένων της ΕΕ, ορίστε το πεδίο region στη διαμόρφωσή σας:
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "my-page",
region: "eu"
)
Αυτό δρομολογεί όλα τα αιτήματα API και τις συνδέσεις WebSocket στο eu.fastcomments.com.
Καθαρισμός 
Όταν τελειώσετε με ένα instance του SDK (π.χ., η προβολή απορρίπτεται), καλέστε την cleanup() για να κλείσετε τη σύνδεση WebSocket και να ακυρώσετε τις εργασίες στο παρασκήνιο:
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")
// Επιστρέφει [UserSearchResult] με userId, username, avatar, κ.λπ.
Το ενσωματωμένο 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 properties:
code-- κωδικός σφάλματος από το APIreason-- περιγραφή σφάλματος στα ΑγγλικάtranslatedError-- τοπικοποιημένο μήνυμα σφάλματος που παρέχεται από τον διακομιστή
Σφάλματα αποκλεισμού εμφανίζονται επίσης αυτόματα μέσω του sdk.blockingErrorMessage, τα οποία οι ενσωματωμένες προβολές εμφανίζουν στον χρήστη.
Τοπικοποίηση 
Περάστε έναν κωδικό locale στο config για να τοπικοποιήσετε τις συμβολοσειρές που παρέχει ο διακομιστής:
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "my-page",
locale: "fr_fr"
)
Οι συμβολοσειρές του UI στην πλευρά του πελάτη χρησιμοποιούν το σύστημα τοπικοποίησης βασισμένο σε bundle του iOS.
Παράδειγμα εφαρμογής 
Το αποθετήριο περιλαμβάνει μια πλήρη εφαρμογή-παράδειγμα στο ExampleApp/ με επιδείξεις των:
- Σπειροειδή σχόλια με SSO και προσαρμοσμένα θέματα
- Κοινωνική ροή με δημιουργία δημοσιεύσεων και φιλτράρισμα με ετικέτες
- Ζωντανή συνομιλία
- Απλές και Ασφαλείς ροές SSO
- Προσαρμοσμένα κουμπιά γραμμής εργαλείων (σχόλια και ροή)
Χρειάζεστε βοήθεια;
Εάν αντιμετωπίσετε οποιοδήποτε πρόβλημα ή έχετε ερωτήσεις σχετικά με τη βιβλιοθήκη iOS, παρακαλούμε:
Συνεισφορά
Οι συνεισφορές είναι ευπρόσδεκτες! Παρακαλούμε επισκεφθείτε το αποθετήριο GitHub για οδηγίες συνεισφοράς.