
Dil 🇹🇷 Türkçe
Dokümantasyon
Başlarken
Kimlik Doğrulama
Kullanım
Add Comments to Your iOS App
Bu, FastComments için resmi iOS Kütüphanesidir.
iOS uygulamanıza canlı yorum, sohbet ve inceleme widget'ları gömün.
Depo
Özellikler 
- İç içe yanıtlar ve sayfalandırma ile dallanmış yorum ağaçları
- Gönderi oluşturma, reaksiyonlar ve medya ekleri ile sosyal akış
- Otomatik kaydırma ve tarih ayırıcıları ile canlı sohbet modu
- WebSocket üzerinden gerçek zamanlı güncellemeler (yeni yorumlar, oylar, kullanıcı varlığı)
- Tek Oturum Açma (test için Basit SSO, üretim için Güvenli SSO)
- Kalın, italik, kod ve @bahsetmeler ile zengin metin düzenleme
- Yapılandırılabilir stillerle oylama (yukarı/aşağı oklar veya kalpler)
- Moderasyon eylemleri: bayraklama, sabitleme, kilitleme, engelleme
- Ön ayarlar ve tam özelleştirme ile kapsamlı tema desteği
- Yorumlar ve akış gönderisi oluşturma için özel araç çubuğu düğmeleri
- Resim yüklemeleri
- AB bölge desteği
- Kullanıcı varlığı (çevrimiçi/çevrimdışı göstergeler)
- Etiket tabanlı akış filtreleme
- Yerelleştirme desteği
Kurulum 
FastCommentsUI'yi Swift Package Manager kullanarak projenize ekleyin.
Xcode'da: File > Add Package Dependencies, ardından depo URL'sini girin.
Veya bunu Package.swift'inize ekleyin:
dependencies: [
.package(url: "https://github.com/fastcomments/fastcomments-ios.git", from: "1.0.0")
]
Daha sonra ürünü hedefinize ekleyin:
.target(
name: "YourApp",
dependencies: [
.product(name: "FastCommentsUI", package: "fastcomments-ios")
]
)
Gerekli yerlerde her iki modülü içe aktarın:
import FastCommentsUI
import FastCommentsSwift
Hızlı Başlangıç 
Bir yorum widget'ını görüntülemek için minimum kurulum:
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()
}
}
}
Replace "demo" with your FastComments tenant ID. The urlId identifies the page or thread where comments are stored.
Kimlik Doğrulama (SSO) 
FastComments üç kimlik doğrulama modunu destekler:
- Anonim -- SSO belirteci yok; kullanıcılar oturum tabanlı kimlikler alır
- Basit SSO -- demolar ve testler için istemci tarafı token (güvenli değildir)
- Güvenli SSO -- üretim için sunucu tarafından imzalanmış token
Basit SSO
Demolar ve yerel testler için faydalıdır. Basit SSO ile herkes herhangi bir kullanıcıyı taklit edebilir, bu yüzden üretimde kullanmayın.
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-- kullanıcı kimliği (ayarlanmazsa varsayılan olarak e-posta)displayName-- ayrı görüntüleme adıdisplayLabel-- ismin yanına gösterilen özel etiket (ör. "VIP")websiteUrl-- kullanıcının adına verilen bağlantılocale-- yerel ayar koduisProfileActivityPrivate-- profil etkinliğini gizle (varsayılan olarak true)
Güvenli SSO
Üretimde, backend'iniz API gizli anahtarınızı kullanarak imzalanmış bir SSO tokeni oluşturur. iOS uygulaması bu tokeni sunucunuzdan alır ve config'e geçirir.
Sunucunuzda (FastComments Swift SDK veya herhangi bir dil kullanılarak):
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
iOS uygulamanızda:
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 {
// Tokeni sunucunuzdan al
let token = try? await fetchSSOTokenFromYourBackend()
// Token ile yeni bir config oluşturun veya yüklemeden önce ayarlayın
isLoadingToken = false
try? await sdk.load()
}
}
}
SecureSSOUserData supports additional fields:
optedInNotifications-- e-posta bildirimleri için onaydisplayLabel-- özel etiketdisplayName-- görünen adwebsiteUrl-- web sitesi URL'sigroupIds-- grup üyelikleriisAdmin-- yönetici ayrıcalıklarıisModerator-- moderator ayrıcalıklarıisProfileActivityPrivate-- profil gizliliği
Dallanmış Yorumlar 
Temel Kullanım
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()
}
}
}
Oy Stilleri
Varsayılan oy stili yukarı/aşağı oklarını gösterir. Kalp-stili oylar için ._1 kullanın:
FastCommentsView(sdk: sdk, voteStyle: ._1)
| Stil | Görünüm |
|---|---|
._0 |
Yukarı/aşağı ok düğmeleri ve net sayı |
._1 |
Tek kalp düğmesi ve sayı |
Olay Geri Çağrıları
Kullanıcı etkileşimlerini işlemek için modifier tarzı geri çağrıları kullanın:
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 veya .avatar
print("Tapped \(userInfo.displayName)")
}
Tema Uygulama
SwiftUI ortamı aracılığıyla bir tema iletin:
FastCommentsView(sdk: sdk)
.fastCommentsTheme(myTheme)
.task { try? await sdk.load() }
Veya doğrudan SDK üzerinde ayarlayın:
sdk.theme = FastCommentsTheme.modern
Sıralama Yönü
sdk.defaultSortDirection = .nf // En yeni önce (varsayılan)
sdk.defaultSortDirection = .of // En eski önce
sdk.defaultSortDirection = .mr // En alakalı
Canlı Sohbet 
LiveChatView otomatik kaydırma, tarih ayırıcıları ve kompakt bir düzen ile gerçek zamanlı bir sohbet deneyimi sunar. SDK'yı otomatik olarak en eski ilk sıralama ve anında canlı görüntüleme için yapılandırır.
struct ChatView: View {
@StateObject private var sdk: FastCommentsSDK = {
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "chat-room-1",
sso: ssoToken // SSO önerilir, böylece kullanıcıların isimleri görünür
)
return FastCommentsSDK(config: config)
}()
var body: some View {
LiveChatView(sdk: sdk)
.onCommentPosted { comment in
print("Sent: \(comment.commentHTML)")
}
.task {
try? await sdk.load()
}
}
}
LiveChatView şu geri çağırmaları destekler:
.onCommentPosted-- kullanıcı bir mesaj gönderdiğinde tetiklenir.onCommentDeleted-- bir mesaj silindiğinde tetiklenir.onUserClick-- bir kullanıcının adına veya avatarına dokunulduğunda tetiklenir
Sosyal Akış 
The feed sistemi kendi görünümüne sahip ayrı bir SDK'dır (FastCommentsFeedSDK).
Feed'i Yükleme ve Görüntüleme
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
// Paylaşım sayfasını göster
}
.onUserClick { context, userInfo, source in
// Kullanıcı profiline git
}
.onMediaClick { mediaItem, index in
// Tam ekran resim görüntüleyiciyi göster
}
.task {
try? await sdk.load()
}
}
}
Feed görünümü otomatik olarak çekerek yenileme (pull-to-refresh) ve sonsuz kaydırma (infinite scroll) içerir.
Gönderi Oluşturma
Gönderi oluşturma formunu göstermek için FeedPostCreateView'i kullanın:
@State private var showCreatePost = false
// Görünüm gövdenizde:
.sheet(isPresented: $showCreatePost) {
FeedPostCreateView(
sdk: sdk,
onPostCreated: { post in
showCreatePost = false
Task { try? await sdk.refresh() }
},
onCancelled: {
showCreatePost = false
}
)
}
Gönderilere Tepki Verme
SDK reaksiyonları iyimser güncellemelerle yönetir:
try await sdk.reactPost(postId: post.id, reactionType: "l")
// Reaksiyon durumunu kontrol et
let hasLiked = sdk.hasUserReacted(postId: post.id, reactType: "l")
let likeCount = sdk.getLikeCount(postId: post.id)
Bir Gönderide Yorumları Açma
Bir feed gönderisi için yorumları göstermek üzere CommentsSheet'i kullanın. İçeride feed SDK'nın konfigürasyonunu kullanarak bir FastCommentsSDK örneği oluşturur:
.sheet(item: $commentsPost) { post in
CommentsSheet(post: post, feedSDK: sdk, onUserClick: { context, userInfo, source in
// Kullanıcı tıklamasını işle
})
}
Not: .sheet(item:) için FeedPost'un Identifiable protokolüne uyması gerekir. Bu uzantıyı ekleyin:
extension FeedPost: @retroactive Identifiable {}
Etiket Tabanlı Feed Filtreleme
Feed gönderilerini etiketlere göre filtrelemek için TagSupplier protokolünü uygulayın:
struct TeamTagSupplier: TagSupplier {
func getTags(currentUser: UserSessionInfo?) -> [String]? {
guard let user = currentUser else { return nil }
return ["team:\(user.id ?? "")", "public"]
}
}
sdk.tagSupplier = TeamTagSupplier()
Filtrelenmemiş küresel feed için nil döndürün.
Feed Durumunu Kaydetme ve Geri Yükleme
Sayfalandırma (pagination) durumunu görünüm yaşam döngüsü olayları boyunca koruyun:
let state = sdk.savePaginationState()
// Later...
sdk.restorePaginationState(state)
Gönderileri Silme
sdk.onPostDeleted = { postId in
print("Post \(postId) was deleted")
}
Tema Özelleştirme 
Tema Ön Ayarlar
Dört yerleşik ön ayar mevcuttur:
// Sistem varsayılanları
sdk.theme = FastCommentsTheme.default
// Gölgelere ve büyük yuvarlatılmış köşelere sahip kartlar
sdk.theme = FastCommentsTheme.modern
// Düz, gölge yok, küçük köşe yarıçapı, konu çizgisi yok
sdk.theme = FastCommentsTheme.minimal
// Tüm işlem renklerini tek bir marka rengi yap
sdk.theme = FastCommentsTheme.allPrimary(.indigo)
Yorum Görüntüleme Stilleri
var theme = FastCommentsTheme()
theme.commentStyle = .flat // Bölücülerle düz liste (varsayılan)
theme.commentStyle = .card // Gölgelere sahip yuvarlatılmış kartlar
theme.commentStyle = .bubble // Sohbet balonu stili
Renkler
Tüm renk özellikleri isteğe bağlıdır. Ayarlanmamış değerler uygun sistem varsayılanlarına geri döner.
var theme = FastCommentsTheme()
// Marka renkleri
theme.primaryColor = .indigo
theme.primaryLightColor = .indigo.opacity(0.6)
theme.primaryDarkColor = Color(red: 0.2, green: 0.1, blue: 0.5)
// Arka planlar
theme.commentBackgroundColor = Color(.secondarySystemGroupedBackground)
theme.containerBackgroundColor = Color(.systemGroupedBackground)
// İşlem düğmeleri
theme.actionButtonColor = .indigo
theme.replyButtonColor = .indigo
theme.toggleRepliesButtonColor = .indigo.opacity(0.8)
theme.loadMoreButtonTextColor = .indigo
// Oylar
theme.voteActiveColor = .red
theme.voteCountColor = .primary
theme.voteCountZeroColor = .secondary
theme.voteDividerColor = Color(.separator)
// Bağlantılar
theme.linkColor = .indigo
theme.linkColorPressed = .indigo.opacity(0.5)
// Diyaloglar
theme.dialogHeaderBackgroundColor = .indigo
theme.dialogHeaderTextColor = .white
// Giriş çubuğu
theme.inputBarBackgroundColor = Color(.systemBackground)
theme.inputBarBorderColor = Color(.separator)
// Diğer
theme.onlineIndicatorColor = .green
theme.separatorColor = Color(.separator)
theme.badgeBackgroundColor = .gray.opacity(0.2)
theme.threadLineColor = .indigo.opacity(0.15)
Tipografi
theme.commenterNameFont = .subheadline.weight(.bold)
theme.bodyFont = .body
theme.captionFont = .caption
theme.actionFont = .caption.weight(.medium)
Düzen ve Aralık
theme.cornerRadius = .large // .none, .small, .medium, .large
theme.commentSpacing = 4 // Yorum satırları arasındaki mesafe (puan)
theme.nestingIndent = 20 // Her iç içe seviye için girinti (puan cinsinden)
theme.avatarSize = 36 // Kök yorumlar için avatar çapı
theme.replyAvatarSize = 28 // İç içe yanıtlar için avatar çapı
Görsel Efektler
theme.showShadows = true // Kartlarda hafif gölgeler
theme.showThreadLine = true // İç içe yanıtları bağlayan dikey çizgi
theme.animateVotes = true // Oy değişikliklerinde yay animasyonu
Tema Uygulama Yöntemleri
İki yaklaşım:
// SwiftUI ortamı aracılığıyla (görünüm hiyerarşisi için önerilir)
FastCommentsView(sdk: sdk)
.fastCommentsTheme(theme)
// Doğrudan SDK üzerinde
sdk.theme = theme
Özel Araç Çubuğu Düğmeleri 
Yorum Araç Çubuğu Düğmeleri
Yorum giriş araç çubuğuna düğmeler eklemek için CustomToolbarButton protokolünü uygulayın:
struct EmojiButton: CustomToolbarButton {
let id = "emoji"
let iconSystemName = "face.smiling" // SF Symbol name
let contentDescription = "Add Emoji"
let badgeText: String? = nil // İsteğe bağlı rozet sayısı
func onClick(text: Binding<String>) {
text.wrappedValue += "\u{1F44D}"
}
// Optional overrides (default to true)
func isEnabled() -> Bool { true }
func isVisible() -> Bool { true }
}
Görünümü oluştururken özel düğmeleri iletin:
FastCommentsView(
sdk: sdk,
customToolbarButtons: [EmojiButton(), CodeBlockButton()]
)
Veya SDK üzerinde küresel olarak ekleyin (tüm örneklere uygulanır):
sdk.addGlobalCustomToolbarButton(EmojiButton())
sdk.removeGlobalCustomToolbarButton(id: "emoji")
sdk.clearGlobalCustomToolbarButtons()
Feed Araç Çubuğu Düğmeleri
Gönderi oluşturma formu için FeedCustomToolbarButton'ı uygulayın:
struct HashtagButton: FeedCustomToolbarButton {
let id = "hashtag"
let iconSystemName = "number"
let contentDescription = "Add Hashtag"
func onClick(content: Binding<String>) {
content.wrappedValue += "#"
}
}
Oluşturma görünümüne iletin:
FeedPostCreateView(
sdk: sdk,
customToolbarButtons: [HashtagButton()],
onPostCreated: { _ in },
onCancelled: { }
)
Veya feed SDK üzerinde bunları küresel olarak ayarlayın:
sdk.globalFeedToolbarButtons = [HashtagButton()]
Moderasyon 
Tüm Kullanıcılar İçin Kullanılabilir Eylemler
- Bildir/Bildirimi Kaldır -- bir yorumu inceleme için bildir
try await sdk.flagComment(commentId: commentId)
try await sdk.unflagComment(commentId: commentId)
- Engelle/Engellemeyi Kaldır -- bir kullanıcının tüm yorumlarını gizle (her görüntüleyici için)
try await sdk.blockUser(commentId: commentId)
try await sdk.unblockUser(commentId: commentId)
Yalnızca Yönetici Eylemleri
- Sabitle/Sabitlemeyi Kaldır -- bir yorumu konu dizisinin en üstüne sabitle
try await sdk.pinComment(commentId: commentId)
try await sdk.unpinComment(commentId: commentId)
- Kilitle/Kilidi Aç -- yoruma yeni yanıtların eklenmesini engelle
try await sdk.lockComment(commentId: commentId)
try await sdk.unlockComment(commentId: commentId)
Tüm moderasyon eylemleri ayrıca kullanıcı arayüzündeki (UI) yorum bağlam menüsünden de kullanılabilir. Yönetici eylemleri yalnızca geçerli kullanıcı site yöneticisi olduğunda görünür (SSO ile ayarlanan isAdmin bayrağı veya yönetim paneli yapılandırması aracılığıyla).
Gerçek Zamanlı Güncellemeler 
sdk.load() çağrıldıktan sonra, SDK yapılandırılmış urlId için WebSocket etkinliklerine otomatik olarak abone olur. Aşağıdaki etkinlikler işlenir:
- Yeni yorumlar, düzenlemeler ve silinmeler
- Oylar (yeni ve kaldırılan)
- Sabitleme, kilitleme, işaretleme ve engelleme durum değişiklikleri
- Kullanıcı varlığı (katılma/ayrılma)
- İleti dizisi açma/kapatma
- Rozet verilmesi
- Sunucu yapılandırması güncellemeleri
Canlı Görünümü Kontrol Etme
Varsayılan olarak, diğer kullanıcılardan gelen yeni yorumlar hemen görünür:
sdk.showLiveRightAway = true // Varsayılan: anında göster
Bunu false olarak ayarlayın, yeni yorumları "N yeni yorum" düğmesinin arkasında tamponlayarak kullanıcının bunları ne zaman göstereceğini seçmesine izin verir:
sdk.showLiveRightAway = false
Kullanıcı Varlığı
Sunucu varlık takibini etkinleştirdiğinde, çevrimiçi/çevrimdışı göstergeleri otomatik olarak kullanıcı avatarlarında görünür. İstemci tarafında ek bir yapılandırma gerekmez.
Sayfalandırma 
Sayfa Boyutu
// Yorumlar: varsayılan 30
sdk.pageSize = 50
// Besleme: varsayılan 10
feedSDK.pageSize = 20
Daha Fazla Yorum Yükleme
Arayüz sayfalama kontrollerini otomatik olarak gösterir. Ayrıca sayfalamayı programlı olarak da tetikleyebilirsiniz:
// Sonraki sayfayı yükle
try await sdk.loadMore()
// Kalan tümünü yükle (performans nedeniyle >2000 yorum varsa devre dışı bırakılır)
try await sdk.loadAll()
// Durumu kontrol et
sdk.hasMore // Daha fazla sayfa var mı
sdk.shouldShowLoadAll()
sdk.getCountRemainingToShow()
Alt Yorum Sayfalandırma
İç içe yanıtlar tembel olarak yüklenir. Bir kullanıcı bir diziyi genişlettiğinde, ilk 5 alt yorum yüklenir. Daha fazla varsa "daha fazla yanıtı yükle" kontrolü görünür. Bu, arayüz tarafından otomatik olarak yönetilir.
Durum ve Gözlemlenebilirlik 
Hem FastCommentsSDK hem de FastCommentsFeedSDK, @Published özelliklere sahip ObservableObject sınıflarıdır. Reaktif UI güncellemeleri için bunları SwiftUI görünümlerinizde gözlemleyebilirsiniz.
FastCommentsSDK Yayınlanan Özellikleri
| Property | Type | Description |
|---|---|---|
commentCountOnServer |
Int |
Sunucudaki toplam yorum sayısı |
newRootCommentCount |
Int |
Arabelleklenmiş yeni yorumlar ( showLiveRightAway false olduğunda ) |
currentUser |
UserSessionInfo? |
Mevcut kimliği doğrulanmış kullanıcı |
isSiteAdmin |
Bool |
Geçerli kullanıcının site yöneticisi olup olmadığı |
isClosed |
Bool |
Yorum dizisinin kapalı olup olmadığı |
hasBillingIssue |
Bool |
Bir faturalama sorunu olup olmadığı |
isLoading |
Bool |
Bir ağ isteğinin devam etmekte olup olmadığı |
hasMore |
Bool |
Daha fazla yorum sayfasının olup olmadığı |
blockingErrorMessage |
String? |
UI'nın çalışmasını engelleyen hata |
warningMessage |
String? |
Engelleyici olmayan uyarı mesajı |
isDemo |
Bool |
Demo modunda çalışıp çalışmadığı |
commentsVisible |
Bool |
Yorum görünürlüğünü açıp kapama |
toolbarEnabled |
Bool |
Biçimlendirme araç çubuğunun gösterilip gösterilmediği |
FastCommentsFeedSDK Yayınlanan Özellikleri
| Property | Type | Description |
|---|---|---|
feedPosts |
[FeedPost] |
Şu anda yüklü feed gönderileri |
hasMore |
Bool |
Daha fazla sayfa olup olmadığı |
currentUser |
UserSessionInfo? |
Mevcut kimliği doğrulanmış kullanıcı |
blockingErrorMessage |
String? |
Engelleyici hata mesajı |
isLoading |
Bool |
Bir ağ isteğinin devam etmekte olup olmadığı |
newPostsCount |
Int |
Son yüklemeden bu yana yeni gönderi sayısı |
Yorum Ağacı
Yorum ağacına sdk.commentsTree üzerinden erişilebilir:
// Flat list of visible nodes for rendering
sdk.commentsTree.visibleNodes
// Lookup a comment by ID
sdk.commentsTree.commentsById["comment-id"]
AB Bölgesi 
AB veri merkezini kullanmak için, yapılandırmanızda region alanını şu şekilde ayarlayın:
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "my-page",
region: "eu"
)
Bu, tüm API isteklerini ve WebSocket bağlantılarını eu.fastcomments.com adresine yönlendirir.
Temizlik 
Bir SDK örneği ile işiniz bittiğinde (örn. görünüm kapatıldığında), WebSocket bağlantısını kapatmak ve arka plan görevlerini iptal etmek için cleanup() çağırın:
sdk.cleanup()
SwiftUI'nin @StateObject ile yönetilen görünümler için, bu genellikle .onDisappear içinde veya görünüm bellekte serbest bırakıldığında çağrılır.
Resim Yüklemeleri 
Yorumlar
let imageUrl = try await sdk.uploadImage(imageData: jpegData, filename: "photo.jpg")
Yüklenen resmin URL dizesini döndürür.
Akış Gönderileri
let mediaItem = try await feedSDK.uploadImage(imageData: jpegData, filename: "photo.jpg")
// Paralel olarak birden çok resmi yükle
let mediaItems = try await feedSDK.uploadImages(images: [
(jpegData1, "photo1.jpg"),
(jpegData2, "photo2.jpg")
])
Kullanıcı Etiketlemeleri 
@mention otomatik tamamlama için kullanıcıları arayın:
let results = try await sdk.searchUsers(query: "jan")
// [UserSearchResult] döner; userId, username, avatar vb.
Yerleşik CommentInputBar, @mention otomatik tamamlama özelliğini yönetir.
Yorumları Düzenleme ve Silme 
Edit
try await sdk.editComment(commentId: commentId, newText: "Updated text")
Sunucu HTML'yi yeniden render eder. Yerel yorum otomatik olarak güncellenir.
Delete
try await sdk.deleteComment(commentId: commentId)
Bir yorumu silmek, yerel ağaçtaki tüm alt öğelerini de kaldırır.
Her iki işlem de, geçerli kullanıcı yorumun yazarı (veya site yöneticisi) olduğunda, arayüzdeki yorum bağlam menüsü aracılığıyla kullanılabilir.
Hata Yönetimi 
SDK yöntemleri FastCommentsError fırlatır; bu, LocalizedError ile uyumludur:
do {
try await sdk.load()
} catch let error as FastCommentsError {
print(error.translatedError ?? error.reason ?? "Unknown error")
} catch {
print(error.localizedDescription)
}
FastCommentsError özellikleri:
code-- API'den gelen hata kodureason-- İngilizce hata açıklamasıtranslatedError-- sunucu tarafından sağlanan yerelleştirilmiş hata mesajı
Engelleme hataları ayrıca sdk.blockingErrorMessage aracılığıyla otomatik olarak ortaya çıkarılır; yerleşik görünümler bunları kullanıcıya gösterir.
Yerelleştirme 
Sunucu tarafından sağlanan dizeleri yerelleştirmek için yapılandırmaya bir yerel kodu iletin:
let config = FastCommentsWidgetConfig(
tenantId: "YOUR_TENANT_ID",
urlId: "my-page",
locale: "fr_fr"
)
İstemci tarafı kullanıcı arayüzü dizeleri iOS bundle tabanlı yerelleştirmeyi kullanır.
Örnek Uygulama 
Depo, ExampleApp/ içinde aşağıdaki gösterimleri barındıran tam bir örnek uygulama içerir:
- SSO ve özel temalar ile dallanmış (threaded) yorumlar
- Gönderi oluşturma ve etiket filtreleme özellikli sosyal akış
- Canlı sohbet
- Basit ve Güvenli SSO akışları
- Özel araç çubuğu düğmeleri (yorumlar ve akış)
Yardıma mı ihtiyacınız var?
iOS Kütüphanesi ile ilgili herhangi bir sorunla karşılaşırsanız veya sorularınız olursa lütfen:
Katkıda Bulunma
Katkılar memnuniyetle karşılanır! Katkı yönergeleri için lütfen GitHub deposunu ziyaret edin.