FastComments.com

Додайте коментарі до вашого Android-додатку

Це офіційна бібліотека Android для FastComments.

Віджети коментарів FastComments для Android

Репозиторій

Переглянути на GitHub


AI агенти кодування Internal Link

skills.sh

Надайте вашому агенту коду контекст FastComments, який йому потрібен — віджети, конфігурація, Secure SSO, REST API та SDK:

npx skills add fastcomments/skills

Працює з Claude Code, Codex, Cursor, Copilot, Gemini та будь‑яким іншим агентом, який підтримує skills CLI.

Функції Internal Link

  • 🔄 Живе коментування з оновленнями в реальному часі
  • 📱 Нативні компоненти інтерфейсу Android
  • 🧵 Дискусії у вигляді ниток з відповідями
  • 👤 Безпечна автентифікація SSO
  • 👍 Система голосування з налаштовуваними стилями
  • 🔔 Сповіщення користувачів та індикація присутності
  • 🔍 Можливості модерації коментарів
  • 📱 Інтеграція соціальної стрічки
  • ♾️ Пагінація з безкінечним прокручуванням
  • 🎨 Всеохопна система тем

Вимоги Internal Link

  • Android SDK 26+ (Android 8.0 Oreo або новіша)
  • Java 8+

Встановлення Internal Link


Додайте FastComments SDK у файл build.gradle.kts вашого застосунку:

dependencies {
    implementation("com.fastcomments:sdk:2.0.0")
}

Переконайтеся, що у вашому проекті settings.gradle.kts є репозиторій Repsy:

dependencyResolutionManagement {
    repositories {
        maven {
            url = uri("https://repo.repsy.io/mvn/winrid/fastcomments")
        }
        // other repositories...
    }
}

Базове використання Internal Link

1. Додайте FastCommentsView до вашого макета

<com.fastcomments.sdk.FastCommentsView
    android:id="@+id/commentsView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

2. Ініціалізуйте та налаштуйте SDK

// Налаштуйте SDK
val config = CommentWidgetConfig(
    "your-tenant-id", 
    "page-url-id", 
    "Page Title", 
    "yourdomain.com", 
    "Site Name"
)

// Додаткові параметри конфігурації
config.voteStyle = VoteStyle.UpDown // або VoteStyle.Heart
config.enableInfiniteScrolling = true
config.hasDarkBackground = true // для підтримки темного режиму

// Ініціалізуйте SDK
val sdk = FastCommentsSDK(config)

// Знайдіть FastCommentsView у вашому макеті
val commentsView = findViewById<FastCommentsView>(R.id.commentsView)

// Встановіть екземпляр SDK для view
commentsView.setSDK(sdk)

// Завантажте коментарі
commentsView.load()

Безпечна SSO автентифікація Internal Link

Реалізуйте безпечну аутентифікацію для ваших користувачів:

// Створіть дані користувача (бажано на вашому сервері)
val userData = SecureSSOUserData(
    "user-id",
    "user@example.com",
    "User Name",
    "https://path-to-avatar.jpg"
)

// Згенеруйте SSO-токен (повинно виконуватися на сервері!)
val sso = FastCommentsSSO.createSecure("YOUR_API_KEY", userData)
val token = sso.prepareToSend()

// Додайте до конфігурації
config.sso = token

Інтеграція стрічки Internal Link

Відобразити стрічку у стилі соціальної мережі з коментарями:

// Налаштувати SDK
CommentWidgetConfig config = new CommentWidgetConfig();
config.tenantId = "your-tenant-id";
config.urlId = "page-url-id";

// Ініціалізувати Feed SDK
FastCommentsFeedSDK feedSDK = new FastCommentsFeedSDK(config);

// Налаштувати відображення стрічки
FastCommentsFeedView feedView = findViewById(R.id.feedView);
feedView.setSDK(feedSDK);

// Встановити слухача взаємодії
feedView.setFeedViewInteractionListener(new FastCommentsFeedView.OnFeedViewInteractionListener() {
    @Override
    public void onFeedLoaded(List<FeedPost> posts) {
        // Стрічка успішно завантажена
    }

    @Override
    public void onFeedError(String errorMessage) {
        // Обробити помилки
    }

    @Override
    public void onPostSelected(FeedPost post) {
        // Користувач вибрав допис
    }

    @Override
    public void onCommentsRequested(FeedPost post) {
        // Показати коментарі для допису
        CommentsDialog dialog = new CommentsDialog(context, post, feedSDK);
        dialog.show();
    }
});

// Load the feed
feedView.load();

Інтеграція живого чату Internal Link

Додайте інтерфейс чату в реальному часі до вашого додатка:

// Додайте LiveChatView до вашого XML-макета
// <com.fastcomments.sdk.LiveChatView
//     android:id="@+id/liveChatView"
//     android:layout_width="match_parent"
//     android:layout_height="match_parent" />

// Create a configuration for the SDK
val config = CommentWidgetConfig().apply {
    tenantId = "your-tenant-id"
    urlId = "chat-room-identifier" 
    pageTitle = "Chat Room Name"
}
LiveChatView.setupLiveChatConfig(config)

// Необов'язково: додайте автентифікацію користувача
val userData = SimpleSSOUserData(
    "User Name",
    "user@example.com",
    "https://path-to-avatar.jpg"
)
val sso = FastCommentsSSO(userData)
config.sso = sso.prepareToSend()

// Ініціалізуйте SDK
val sdk = FastCommentsSDK().configure(config)

// Налаштуйте LiveChatView
val liveChatView = findViewById<LiveChatView>(R.id.liveChatView)
liveChatView.setSDK(sdk)
liveChatView.load()

// Не забудьте обробку життєвого циклу
override fun onResume() {
    super.onResume()
    sdk.refreshLiveEvents()
}

override fun onDestroy() {
    super.onDestroy()
    sdk.cleanup()
}

Прикладні проєкти Internal Link


Ознайомтеся з цими демонстраційними реалізаціями:


Опції конфігурації Internal Link


SDK надає багато параметрів конфігурації через клас CommentWidgetConfig:

ОпціяОпис
tenantIdID вашого облікового запису FastComments
urlIdID, що представляє поточну сторінку
ssoТокен SSO для автентифікації
allowAnonДозволити анонімне коментування
voteStyleСтиль голосування: UpDown або Heart
hideAvatarsПриховати аватари користувачів
hasDarkBackgroundВказує на темний режим
customCSSВласні CSS-стилі
enableInfiniteScrollingУвімкнути нескінченну прокрутку (пагінацію)
readonlyВимкнути можливість коментування, але показувати коментарі
disableVotingВимкнути функцію голосування
disableLiveCommentingВимкнути оновлення в реальному часі

Всеохоплююче налаштування теми Internal Link

Усі кнопки та елементи UI в FastComments SDK підтримують темізацію. Використовуйте FastCommentsTheme.Builder для повного контролю над брендингом вашого додатка.

Програмна темізація (рекомендовано)

val theme = FastCommentsTheme.Builder()
    // Кнопки дій: Відправити, голосування, меню, кнопки вподобати/поділитися
    .setActionButtonColor(Color.parseColor("#FF1976D2"))
    
    // Кнопки відповіді: Кнопки відповіді на коментарі  
    .setReplyButtonColor(Color.parseColor("#FF4CAF50"))
    
    // Перемикачі: Кнопки показати/сховати відповіді
    .setToggleRepliesButtonColor(Color.parseColor("#FFFF5722"))
    
    // Кнопки завантажити ще: Кнопки пагінації
    .setLoadMoreButtonTextColor(Color.parseColor("#FF9C27B0"))
    
    .setPrimaryColor(Color.parseColor("#FF6200EE"))
    .setLinkColor(Color.parseColor("#FF1976D2"))
    .setDialogHeaderBackgroundColor(Color.parseColor("#FF333333"))
    .build()

// Застосувати тему
sdk.setTheme(theme)

Швидка заміна кольорів

Перевизначте ресурси кольорів у вашому colors.xml для простого брендингу:

<!-- У res/values/colors.xml вашого додатка -->
<resources>
    <!-- Змініть усі основні елементи UI -->
    <color name="primary">#FF1976D2</color>
    
    <!-- Або налаштуйте певні типи кнопок -->
    <color name="fastcomments_action_button_color">#FF1976D2</color>
    <color name="fastcomments_reply_button_color">#FF4CAF50</color>
    <color name="fastcomments_toggle_replies_button_color">#FFFF5722</color>
    <color name="fastcomments_load_more_button_text_color">#FF9C27B0</color>
</resources>

Покриття темізації кнопок

Кожна кнопка в SDK підтримує темізацію:

  • Кнопки відправлення, кнопки голосування, кнопки меню, кнопки відповіді
  • Кнопки показати/сховати відповіді, кнопки завантажити ще
  • Кнопки дій стрічки (подобається, коментар, поділитися)
  • Кнопки діалогів (відправити, скасувати, зберегти)
  • Динамічні кнопки завдань у дописах стрічки

Детальну документацію з темізації див. у THEMING.md.

Управління пам'яттю Internal Link

Запобігання витокам пам'яті

Щоб запобігти витокам пам'яті під час використання представлень FastComments у Activities або Fragments, завжди викликайте cleanup(), коли представлення більше не потрібне:

У Activities:

@Override
protected void onDestroy() {
    super.onDestroy();
    // Очистіть представлення FastComments, щоб запобігти витокам пам'яті
    if (feedView != null) {
        feedView.cleanup();
    }
    if (commentsView != null) {
        commentsView.cleanup();
    }
}

У Fragments:

@Override
public void onDestroyView() {
    super.onDestroyView();
    // Очистіть представлення FastComments, коли view фрагмента знищується
    if (feedView != null) {
        feedView.cleanup();
        feedView = null;
    }
}

@Override
public void onDestroy() {
    super.onDestroy();
    // Додаткове очищення при знищенні фрагмента
    if (feedSDK != null) {
        feedSDK.cleanup();
        feedSDK = null;
    }
}

Під час переключення фрагментів:

// Перед заміною або видаленням фрагмента, що містить представлення FastComments
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.container);
if (currentFragment instanceof YourFragmentWithFeedView) {
    ((YourFragmentWithFeedView) currentFragment).cleanupFeedView();
}

// Потім продовжте транзакцію фрагмента
getSupportFragmentManager().beginTransaction()
    .replace(R.id.container, newFragment)
    .commit();

Важливо: Завжди викликайте методи cleanup() для запобігання витокам пам'яті, особливо коли:

  • Activity знищуються
  • Подання фрагментів знищуються
  • Перемикання між фрагментами
  • Перехід з екранів з компонентами FastComments

Потрібна допомога?

Якщо ви зіткнулися з будь-якими проблемами або маєте питання щодо Android-бібліотеки, будь ласка:

Участь у проєкті

Внески вітаються! Будь ласка, відвідайте репозиторій на GitHub для інструкцій щодо внесків.