
Мова 🇺🇦 Українська
Документація
Початок роботи
Використання
Аутентифікація
Конфігурація
FastComments Android Library
Це офіційна бібліотека Android для FastComments.
Віджети коментарів FastComments для Android
Репозиторій
Можливості 
- 🔄 Живе коментування з оновленнями в реальному часі
- 📱 Нативні компоненти інтерфейсу 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")
}
// інші репозиторії...
}
}
Основне використання 
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-аутентифікація 
Реалізуйте безпечну аутентифікацію для ваших користувачів:
// Створіть дані користувача (бажано на вашому сервері)
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();
}
});
// Load the feed
feedView.load();
Інтеграція чату в реальному часі 
Додайте інтерфейс чату в реальному часі до вашого додатка:
// Додайте 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()
}
Приклади проєктів 
Ознайомтеся з цими демонстраційними реалізаціями:
- Базовий приклад коментарів
- Реалізація Secure SSO
- Приклад інтеграції Feed
- Приклад Live Chat
- Приклад діалогу коментарів
Параметри конфігурації 
SDK надає багато параметрів конфігурації через клас CommentWidgetConfig:
| Опція | Опис |
|---|---|
tenantId |
ID вашого облікового запису FastComments |
urlId |
ID, що представляє поточну сторінку |
sso |
Токен SSO для автентифікації |
allowAnon |
Дозволити анонімне коментування |
voteStyle |
Стиль голосування: UpDown або Heart |
hideAvatars |
Приховати аватари користувачів |
hasDarkBackground |
Вказує на темний режим |
customCSS |
Власні CSS-стилі |
enableInfiniteScrolling |
Увімкнути нескінченну прокрутку (пагінацію) |
readonly |
Вимкнути можливість коментування, але показувати коментарі |
disableVoting |
Вимкнути функцію голосування |
disableLiveCommenting |
Вимкнути оновлення в реальному часі |
| --- |
Повне налаштування теми 
Усі кнопки та елементи 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.
Керування пам'яттю 
Запобігання витокам пам'яті
Щоб запобігти витокам пам'яті під час використання представлень 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 для інструкцій щодо внесків.