FastComments.com

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

GitHub'da Görüntüle


Özellikler Internal Link

  • İç 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

Gereksinimler Internal Link


  • iOS 16+ veya macOS 14+
  • Swift 5.9+
  • SwiftUI

Kurulum Internal Link


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ıç Internal Link

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) Internal Link

FastComments üç kimlik doğrulama modunu destekler:

  1. Anonim -- SSO belirteci yok; kullanıcılar oturum tabanlı kimlikler alır
  2. Basit SSO -- demolar ve testler için istemci tarafı token (güvenli değildir)
  3. 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 kodu
  • isProfileActivityPrivate -- 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 onay
  • displayLabel -- özel etiket
  • displayName -- görünen ad
  • websiteUrl -- web sitesi URL'si
  • groupIds -- grup üyelikleri
  • isAdmin -- yönetici ayrıcalıkları
  • isModerator -- moderator ayrıcalıkları
  • isProfileActivityPrivate -- profil gizliliği


Dallanmış Yorumlar Internal Link

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 Internal Link

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ış Internal Link

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 Internal Link

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 Internal Link

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 Internal Link

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 Internal Link

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 Internal Link

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 Internal Link

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 Internal Link


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 Internal Link

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 Internal Link

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 Internal Link

@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 Internal Link

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 Internal Link


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 kodu
  • reason -- İ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 Internal Link


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 Internal Link


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.