FastComments.com

FastComments Android Library


Это официальная библиотека Android для FastComments.

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

Репозиторий

Просмотреть на GitHub


Возможности Internal Link

  • 🔄 Живое комментирование с обновлениями в реальном времени
  • 📱 Нативные компоненты интерфейса для Android
  • 🧵 Тредовые обсуждения с ответами
  • 👤 Безопасная аутентификация SSO
  • 👍 Система голосования с настраиваемыми стилями
  • 🔔 Уведомления пользователей и отображение присутствия
  • 🔍 Возможности модерации комментариев
  • 📱 Интеграция с социальной лентой
  • ♾️ Пагинация с бесконечной прокруткой
  • 🎨 Широкие возможности темизации

Требования Internal Link

  • Android SDK 26+ (Android 8.0 Oreo или более поздняя версия)
  • Java 8+

Установка Internal Link

Добавьте SDK FastComments в файл 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...
    }
}

Базовое использование 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 для руководства по внесению вклада.