
Γλώσσα 🇨🇾 Ελληνικά (Κύπρος)
Τεκμηρίωση
Ξεκινώντας
Αυθεντικοποίηση
Χρήση
Add Comments to Your iOS App
Αυτή είναι η επίσημη βιβλιοθήκη iOS για το FastComments.
Ενσωματώστε ζωντανά widgets σχολιασμού, συνομιλίας και αξιολόγησης στην iOS εφαρμογή σας.
Αποθετήριο
Χαρακτηριστικά 
- Νηματοποιημένα δέντρα σχολίων με εμφωλευμένες απαντήσεις και σελιδοποίηση
- Κοινωνική ροή με δημιουργία αναρτήσεων, αντιδράσεις και συνημμένα πολυμέσων
- Λειτουργία ζωντανής συνομιλίας με αυτόματη κύλιση και διαχωριστικά ημερομηνιών
- Ενημερώσεις σε πραγματικό χρόνο μέσω WebSocket (νέα σχόλια, ψήφοι, παρουσία)
- Ενιαία Σύνδεση (Simple SSO για δοκιμές, Secure SSO για παραγωγή)
- Πλούσια επεξεργασία κειμένου με έντονα, πλάγια, μορφοποίηση κώδικα και @mentions
- Ψηφοφορία με ρυθμιζόμενα στυλ (επάνω/κάτω βέλη ή καρδιές)
- Ενέργειες εποπτείας: αναφορά, καρφίτσωμα, κλείδωμα, αποκλεισμός
- Ολοκληρωμένη θεματοποίηση με προεπιλογές και πλήρη προσαρμογή
- Προσαρμοσμένα κουμπιά γραμμής εργαλείων για σχόλια και δημιουργία αναρτήσεων στη ροή
- Μεταφορτώσεις εικόνων
- Υποστήριξη περιοχής ΕΕ
- Παρουσία χρήστη (ενδείκτες online/offline)
- Φιλτράρισμα ροής με βάση ετικέτες
- Υποστήριξη τοπικοποίησης
Εγκατάσταση 
Προσθέστε το 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 προσδιορίζει τη σελίδα ή το νήμα όπου αποθηκεύονται τα σχόλια.
Αυθεντικοποίηση (SSO) 
FastComments υποστηρίζει τρεις τρόπους αυθεντικοποίησης:
- 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)displayName-- separate display namedisplayLabel-- custom label shown next to the name (e.g. "VIP")websiteUrl-- link on the user's namelocale-- locale codeisProfileActivityPrivate-- hide profile activity (defaults to true)
Secure SSO
Σε παραγωγή, το backend σας δημιουργεί ένα υπογεγραμμένο SSO token χρησιμοποιώντας το μυστικό API σας. Η εφαρμογή iOS ανακτά αυτό το token από τον διακομιστή σας και το περνά στη διαμόρφωση.
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()
// Return this token to your iOS app via your 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()
// Δημιουργήστε μια νέα διαμόρφωση με το token, ή ορίστε το πριν τη φόρτωση
isLoadingToken = false
try? await sdk.load()
}
}
}
SecureSSOUserData supports additional fields:
optedInNotifications-- email notification opt-indisplayLabel-- custom labeldisplayName-- display namewebsiteUrl-- website URLgroupIds-- group membershipsisAdmin-- admin privilegesisModerator-- moderator privilegesisProfileActivityPrivate-- profile privacy
Σχόλια με νήματα 
Βασική Χρήση
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)
| Style | Εμφάνιση |
|---|---|
._0 |
Κουμπιά βελών πάνω/κάτω με καθαρό πλήθος |
._1 |
Μονό κουμπί καρδιάς με πλήθος |
Κλήσεις callback
Χρησιμοποιήστε callbacks τύπου 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) με το δικό του view.
Φόρτωση και Εμφάνιση της Ροής
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
// Present share sheet
}
.onUserClick { context, userInfo, source in
// Navigate to user profile
}
.onMediaClick { mediaItem, index in
// Present full-screen image viewer
}
.task {
try? await sdk.load()
}
}
}
Το view της ροής περιλαμβάνει αυτόματα λειτουργία pull-to-refresh και infinite scroll.
Δημιουργία Δημοσιεύσεων
Χρησιμοποιήστε το 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 διαχειρίζεται τις αντιδράσεις με οπτιμιστικές ενημερώσεις:
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
// Handle user click
})
}
Σημείωση: 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 για μια παγκόσμια ροή χωρίς φίλτρο.
Αποθήκευση και Επαναφορά Κατάστασης της Ροής
Διατηρήστε την κατάσταση σελιδοποίησης (pagination) ανάμεσα σε συμβάντα κύκλου ζωής του view:
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}"
}
// Προαιρετικά (προεπιλεγμένο 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()]
Διαχείριση 
Ενέργειες Διαθέσιμες σε Όλους τους Χρήστες
- Επισήμανση/Αφαίρεση επισήμανσης -- αναφέρετε ένα σχόλιο για επανεξέταση
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)
Όλες οι ενέργειες διαχείρισης είναι επίσης διαθέσιμες μέσω του μενού περιβάλλοντος σχολίου στο UI. Οι ενέργειες για διαχειριστές εμφανίζονται μόνο όταν ο τρέχων χρήστης είναι διαχειριστής του ιστότοπου (ορίζεται μέσω του SSO isAdmin flag ή μέσω ρυθμίσεων του πίνακα ελέγχου).
Ενημερώσεις σε πραγματικό χρόνο 
Μετά την κλήση του sdk.load(), το SDK συνδρομείται αυτόματα σε WebSocket γεγονότα για το ρυθμισμένο urlId. Τα ακόλουθα συμβάντα διαχειρίζονται:
- Νέα σχόλια, επεξεργασίες και διαγραφές
- Ψηφοφορίες (νέες και αφαιρεθείσες)
- Αλλαγές κατάστασης καρφίτσας, κλειδώματος, αναφοράς και αποκλεισμού
- Παρουσία χρήστη (είσοδος/έξοδος)
- Άνοιγμα/κλείσιμο νήματος
- Απονομές διακριτικών
- Ενημερώσεις διαμόρφωσης εξυπηρετητή
Έλεγχος ζωντανής εμφάνισης
Κατά προεπιλογή, τα νέα σχόλια από άλλους χρήστες εμφανίζονται αμέσως:
sdk.showLiveRightAway = true // Προεπιλογή: εμφανίζεται αμέσως
Ορίστε αυτό σε false για να συγκρατηθούν τα νέα σχόλια πίσω από ένα κουμπί «N νέα σχόλια», επιτρέποντας στον χρήστη να επιλέξει πότε θα τα εμφανίσει:
sdk.showLiveRightAway = false
Παρουσία χρήστη
Ενδείξεις σύνδεσης/αποσύνδεσης εμφανίζονται αυτόματα στα avatar των χρηστών όταν ο διακομιστής ενεργοποιήσει την παρακολούθηση παρουσίας. Δεν απαιτείται πρόσθετη ρύθμιση στην πλευρά του πελάτη.
Σελιδοποίηση 
Μέγεθος Σελίδας
// Σχόλια: προεπιλογή 30
sdk.pageSize = 50
// Ροή: προεπιλογή 10
feedSDK.pageSize = 20
Φόρτωση Περισσότερων Σχολίων
Η διεπαφή χρήστη εμφανίζει αυτόματα στοιχεία ελέγχου σελιδοποίησης. Μπορείτε επίσης να ενεργοποιήσετε τη σελιδοποίηση προγραμματιστικά:
// Φόρτωση επόμενης σελίδας
try await sdk.loadMore()
// Φόρτωση όλων των υπολοίπων (απενεργοποιείται εάν >2000 σχόλια για λόγους απόδοσης)
try await sdk.loadAll()
// Έλεγχος κατάστασης
sdk.hasMore // Εάν υπάρχουν περισσότερες σελίδες
sdk.shouldShowLoadAll()
sdk.getCountRemainingToShow()
Σελιδοποίηση Παιδικών Σχολίων
Οι εμφωλευμένες απαντήσεις φορτώνονται κατά απαίτηση. Όταν ένας χρήστης επεκτείνει ένα νήμα, φορτώνονται τα πρώτα 5 παιδικά σχόλια. Εμφανίζεται ένα στοιχείο ελέγχου "load more replies" εάν υπάρχουν κι άλλες. Αυτό γίνεται αυτόματα από το UI.
Κατάσταση και παρατηρησιμότητα 
Both FastCommentsSDK and FastCommentsFeedSDK are ObservableObject classes with @Published properties. You can observe these in your SwiftUI views for reactive UI updates.
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
The comment tree is accessible via sdk.commentsTree:
// Επίπεδη λίστα ορατών κόμβων για απόδοση
sdk.commentsTree.visibleNodes
// Αναζήτηση σχολίου με βάση το αναγνωριστικό
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 της ανεβασμένης εικόνας.
Αναρτήσεις Feed
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"
)
Οι συμβολοσειρές διεπαφής χρήστη στην πλευρά του πελάτη χρησιμοποιούν τοπικοποίηση βασισμένη σε iOS bundles.
Παράδειγμα εφαρμογής 
Το αποθετήριο περιλαμβάνει μια πλήρη εφαρμογή παραδείγματος στο ExampleApp/ με επιδείξεις των:
- Σχόλια σε νήματα με SSO και προσαρμοσμένα θέματα
- Κοινωνική ροή με δημιουργία αναρτήσεων και φιλτράρισμα με ετικέτες
- Ζωντανή συνομιλία
- Απλές και ασφαλείς ροές SSO
- Προσαρμοσμένα κουμπιά στη γραμμή εργαλείων (σχόλια και ροή)
Χρειάζεστε βοήθεια;
Εάν αντιμετωπίσετε προβλήματα ή έχετε ερωτήσεις σχετικά με τη βιβλιοθήκη iOS, παρακαλούμε:
Συνεισφορά
Οι συνεισφορές είναι ευπρόσδεκτες! Παρακαλούμε επισκεφθείτε το αποθετήριο GitHub για οδηγίες σχετικά με τη συνεισφορά.