
Язык 🇺🇦 Русский (Украина)
Документация
Начало работы
Использование
Аутентификация
Конфигурация
FastComments Android Library
Это официальная Android-библиотека для FastComments.
Виджеты комментариев FastComments для Android
Репозиторий
Функции 
- 🔄 Живое комментирование с обновлениями в реальном времени
- 📱 Нативные UI-компоненты для Android
- 🧵 Древовидные обсуждения с ответами
- 👤 Безопасная аутентификация SSO
- 👍 Система голосования с настраиваемыми стилями
- 🔔 Уведомления пользователей и информация о присутствии
- 🔍 Возможности модерации комментариев
- 📱 Интеграция с социальной лентой
- ♾️ Пагинация с бесконечной прокруткой
- 🎨 Всесторонняя настройка тем
Установка 
Добавьте FastComments SDK в файл build.gradle.kts вашего приложения:
dependencies {
implementation("com.fastcomments:sdk:0.0.1")
}
Убедитесь, что у вас есть репозиторий Repsy в settings.gradle.kts вашего проекта:
dependencyResolutionManagement {
repositories {
maven {
url = uri("https://repo.repsy.io/mvn/winrid/fastcomments")
}
// other repositories...
}
}
Базовое использование 
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-аутентификация 
Реализуйте безопасную аутентификацию для ваших пользователей:
// Создайте данные пользователя (желательно на вашем сервере)
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
Интеграция ленты 
Отобразить ленту в стиле социальной сети с комментариями:
// Настроить 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();
Интеграция чата в реальном времени 
Добавьте интерфейс чата в реальном времени в ваше приложение:
// Add LiveChatView to your layout 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)
// Optional: Add user authentication
val userData = SimpleSSOUserData(
"User Name",
"user@example.com",
"https://path-to-avatar.jpg"
)
val sso = FastCommentsSSO(userData)
config.sso = sso.prepareToSend()
// Initialize the SDK
val sdk = FastCommentsSDK().configure(config)
// Set up the live chat view
val liveChatView = findViewById<LiveChatView>(R.id.liveChatView)
liveChatView.setSDK(sdk)
liveChatView.load()
// Don't forget lifecycle handling
override fun onResume() {
super.onResume()
sdk.refreshLiveEvents()
}
override fun onDestroy() {
super.onDestroy()
sdk.cleanup()
}
Примеры проектов 
Ознакомьтесь с этими демонстрационными реализациями:
- Базовый пример комментариев
- Реализация безопасного SSO
- Пример интеграции ленты
- Пример живого чата
- Пример диалогового окна комментариев
Параметры конфигурации 
SDK предоставляет множество параметров конфигурации через класс CommentWidgetConfig:
| Опция | Описание |
|---|---|
tenantId |
ID вашего аккаунта FastComments |
urlId |
ID, представляющий текущую страницу |
sso |
SSO-токен для аутентификации |
allowAnon |
Разрешить анонимное комментирование |
voteStyle |
Стиль голосования — UpDown или Heart |
hideAvatars |
Скрыть аватары пользователей |
hasDarkBackground |
Указывает тёмный фон |
customCSS |
Пользовательские CSS-стили |
enableInfiniteScrolling |
Включить пагинацию с бесконечной прокруткой |
readonly |
Отключить возможность комментирования, но отображать комментарии |
disableVoting |
Отключить возможность голосования |
disableLiveCommenting |
Отключить обновления в реальном времени |
| --- |
Полная настройка темы 
Все кнопки и элементы интерфейса в FastComments SDK поддерживают темing. Используйте 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.
Управление памятью 
Предотвращение утечек памяти
Чтобы предотвратить утечки памяти при использовании представлений 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;
}
}
При переключении Fragments:
// Перед заменой или удалением фрагмента, содержащего представления FastComments
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.container);
if (currentFragment instanceof YourFragmentWithFeedView) {
((YourFragmentWithFeedView) currentFragment).cleanupFeedView();
}
// Затем выполните транзакцию фрагмента
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, newFragment)
.commit();
Важно: Всегда вызывайте методы cleanup(), чтобы предотвратить утечки памяти, особенно в следующих случаях:
- Activities уничтожаются
- Представления Fragment уничтожаются
- Переключение между fragments
- Переход с экранов, содержащих компоненты FastComments
Нужна помощь?
Если вы столкнулись с проблемами или у вас есть вопросы по Android-библиотеке, пожалуйста:
Вклад
Вклады приветствуются! Пожалуйста, посетите репозиторий GitHub для получения руководства по внесению вклада.