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")
        }
        // другие репозитории...
    }
}

Базовое использование 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)

// Найдите представление комментариев в вашей разметке
val commentsView = findViewById<FastCommentsView>(R.id.commentsView)

// Установите экземпляр SDK для представления
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();
    }
});

// Загрузить ленту
feedView.load();

Интеграция живого чата Internal Link

Добавьте интерфейс чата в реальном времени в ваше приложение:

// Добавьте LiveChatView в ваш layout XML
// <com.fastcomments.sdk.LiveChatView
//     android:id="@+id/liveChatView"
//     android:layout_width="match_parent"
//     android:layout_height="match_parent" />

// Создайте конфигурацию для 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:

ПараметрОписание
tenantIdИдентификатор вашей учётной записи FastComments
urlIdИдентификатор, представляющий текущую страницу
ssoТокен SSO для аутентификации
allowAnonРазрешить анонимное комментирование
voteStyleСтиль голосования: UpDown или Heart
hideAvatarsСкрыть аватары пользователей
hasDarkBackgroundУказывает, что используется тёмная тема
customCSSПользовательские CSS-стили
enableInfiniteScrollingВключить пагинацию с бесконечной прокруткой
readonlyОтключить возможность комментирования, но отображать комментарии
disableVotingОтключить голосование
disableLiveCommentingОтключить обновления в реальном времени

Полная настройка темы Internal Link

Все кнопки и элементы интерфейса в 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>
    <!-- Изменить все основные элементы интерфейса -->
    <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 в Activity или Fragment, всегда вызывайте cleanup(), когда представление больше не требуется:

В Activity:

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

В Fragment:

@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 Library, пожалуйста:

Участие

Будем рады вашему вкладу! Пожалуйста, посетите репозиторий на GitHub для руководства по внесению вклада.