
Idioma 🇪🇸 Español
Documentación
Primeros pasos
Uso
Autenticación
Configuración
FastComments Android Library
Esta es la biblioteca oficial de Android para FastComments.
Widgets de comentarios de FastComments para Android
Repositorio
Características 
- 🔄 Comentarios en vivo con actualizaciones en tiempo real
- 📱 Componentes de IU nativos para Android
- 🧵 Discusiones en hilos con respuestas
- 👤 Autenticación SSO segura
- 👍 Sistema de votación con estilos personalizables
- 🔔 Notificaciones y presencia de usuarios
- 🔍 Capacidades de moderación de comentarios
- 📱 Integración de feeds sociales
- ♾️ Paginación con desplazamiento infinito
- 🎨 Personalización completa de temas
Instalación 
Agrega el SDK de FastComments al archivo build.gradle.kts de tu aplicación:
dependencies {
implementation("com.fastcomments:sdk:0.0.1")
}
Asegúrate de tener el repositorio Repsy en el archivo settings.gradle.kts de tu proyecto:
dependencyResolutionManagement {
repositories {
maven {
url = uri("https://repo.repsy.io/mvn/winrid/fastcomments")
}
// other repositories...
}
}
Uso básico 
1. Agrega FastCommentsView a tu diseño
<com.fastcomments.sdk.FastCommentsView
android:id="@+id/commentsView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
2. Inicializa y configura el SDK
// Configura el SDK
val config = CommentWidgetConfig(
"your-tenant-id",
"page-url-id",
"Page Title",
"yourdomain.com",
"Site Name"
)
// Opciones de configuración adicionales
config.voteStyle = VoteStyle.UpDown // o VoteStyle.Heart
config.enableInfiniteScrolling = true
config.hasDarkBackground = true // para soporte de modo oscuro
// Inicializa el SDK
val sdk = FastCommentsSDK(config)
// Busca la vista de comentarios en tu diseño
val commentsView = findViewById<FastCommentsView>(R.id.commentsView)
// Asigna la instancia del SDK a la vista
commentsView.setSDK(sdk)
// Carga los comentarios
commentsView.load()
Autenticación SSO segura 
Implemente la autenticación segura para sus usuarios:
// Crear datos de usuario (idealmente en su servidor)
val userData = SecureSSOUserData(
"user-id",
"user@example.com",
"User Name",
"https://path-to-avatar.jpg"
)
// Generar token SSO (¡debe hacerse del lado del servidor!)
val sso = FastCommentsSSO.createSecure("YOUR_API_KEY", userData)
val token = sso.prepareToSend()
// Agregar a la configuración
config.sso = token
Integración de feeds 
Muestra un feed al estilo de redes sociales con comentarios:
// Configurar el SDK
CommentWidgetConfig config = new CommentWidgetConfig();
config.tenantId = "your-tenant-id";
config.urlId = "page-url-id";
// Inicializar el Feed SDK
FastCommentsFeedSDK feedSDK = new FastCommentsFeedSDK(config);
// Configurar la vista del feed
FastCommentsFeedView feedView = findViewById(R.id.feedView);
feedView.setSDK(feedSDK);
// Establecer el listener de interacción
feedView.setFeedViewInteractionListener(new FastCommentsFeedView.OnFeedViewInteractionListener() {
@Override
public void onFeedLoaded(List<FeedPost> posts) {
// Feed cargado correctamente
}
@Override
public void onFeedError(String errorMessage) {
// Manejar errores
}
@Override
public void onPostSelected(FeedPost post) {
// Usuario seleccionó una publicación
}
@Override
public void onCommentsRequested(FeedPost post) {
// Mostrar comentarios de la publicación
CommentsDialog dialog = new CommentsDialog(context, post, feedSDK);
dialog.show();
}
});
// Cargar el feed
feedView.load();
Integración de chat en vivo 
Agrega una interfaz de chat en tiempo real a tu aplicación:
// Agrega LiveChatView a tu layout XML
// <com.fastcomments.sdk.LiveChatView
// android:id="@+id/liveChatView"
// android:layout_width="match_parent"
// android:layout_height="match_parent" />
// Crea una configuración para el SDK
val config = CommentWidgetConfig().apply {
tenantId = "your-tenant-id"
urlId = "chat-room-identifier"
pageTitle = "Chat Room Name"
}
LiveChatView.setupLiveChatConfig(config)
// Opcional: Agrega autenticación de usuario
val userData = SimpleSSOUserData(
"User Name",
"user@example.com",
"https://path-to-avatar.jpg"
)
val sso = FastCommentsSSO(userData)
config.sso = sso.prepareToSend()
// Inicializa el SDK
val sdk = FastCommentsSDK().configure(config)
// Configura la vista de chat en vivo
val liveChatView = findViewById<LiveChatView>(R.id.liveChatView)
liveChatView.setSDK(sdk)
liveChatView.load()
// No olvides el manejo del ciclo de vida
override fun onResume() {
super.onResume()
sdk.refreshLiveEvents()
}
override fun onDestroy() {
super.onDestroy()
sdk.cleanup()
}
Proyectos de ejemplo 
Echa un vistazo a estas implementaciones de demostración:
- Ejemplo básico de comentarios
- Implementación de SSO segura
- Ejemplo de integración de feed
- Ejemplo de chat en vivo
- Ejemplo de diálogo de comentarios
Opciones de configuración 
El SDK ofrece muchas opciones de configuración a través de la clase CommentWidgetConfig:
| Option | Description |
|---|---|
tenantId |
ID de su cuenta de FastComments |
urlId |
ID que representa la página actual |
sso |
Token SSO para la autenticación |
allowAnon |
Permitir comentarios anónimos |
voteStyle |
Estilo de votación UpDown o Heart |
hideAvatars |
Ocultar avatares de usuario |
hasDarkBackground |
Indica modo oscuro |
customCSS |
Estilos CSS personalizados |
enableInfiniteScrolling |
Habilitar paginación por desplazamiento infinito |
readonly |
Desactivar la posibilidad de comentar pero mostrar los comentarios |
disableVoting |
Desactivar la funcionalidad de votación |
disableLiveCommenting |
Desactivar las actualizaciones en tiempo real |
| --- |
Personalización completa del tema 
Todos los botones y elementos de la interfaz de usuario en el SDK de FastComments son personalizables mediante temas. Usa FastCommentsTheme.Builder para tener control completo sobre la identidad visual de tu aplicación.
Tematización programática (recomendado)
val theme = FastCommentsTheme.Builder()
// Botones de acción: enviar, votar, menú, botones de me gusta/compartir
.setActionButtonColor(Color.parseColor("#FF1976D2"))
// Botones de respuesta: botones de respuesta a comentarios
.setReplyButtonColor(Color.parseColor("#FF4CAF50"))
// Botones alternables: botones de mostrar/ocultar respuestas
.setToggleRepliesButtonColor(Color.parseColor("#FFFF5722"))
// Botones de cargar más: botones de paginación
.setLoadMoreButtonTextColor(Color.parseColor("#FF9C27B0"))
.setPrimaryColor(Color.parseColor("#FF6200EE"))
.setLinkColor(Color.parseColor("#FF1976D2"))
.setDialogHeaderBackgroundColor(Color.parseColor("#FF333333"))
.build()
// Aplicar el tema
sdk.setTheme(theme)
Anulación rápida de colores
Override color resources in your colors.xml for simple branding:
<!-- En el res/values/colors.xml de tu aplicación -->
<resources>
<!-- Cambia todos los elementos principales de la interfaz de usuario -->
<color name="primary">#FF1976D2</color>
<!-- O personaliza tipos de botones específicos -->
<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>
Cobertura de botones tematizados
Cada botón en el SDK admite tematización:
- Botones de enviar, botones de voto, botones de menú, botones de respuesta
- Botones de mostrar/ocultar respuestas, botones de cargar más
- Botones de acción del feed (me gusta, comentar, compartir)
- Botones de diálogo (enviar, cancelar, guardar)
- Botones de tareas dinámicas en entradas del feed
Para documentación detallada sobre tematización, consulta THEMING.md.
Gestión de memoria 
Prevención de fugas de memoria
Para evitar fugas de memoria al usar vistas de FastComments en Actividades o Fragmentos, siempre llama a cleanup() cuando la vista ya no sea necesaria:
En Actividades:
@Override
protected void onDestroy() {
super.onDestroy();
// Limpiar vistas de FastComments para evitar fugas de memoria
if (feedView != null) {
feedView.cleanup();
}
if (commentsView != null) {
commentsView.cleanup();
}
}
En Fragmentos:
@Override
public void onDestroyView() {
super.onDestroyView();
// Limpiar vistas de FastComments cuando la vista del fragmento se destruye
if (feedView != null) {
feedView.cleanup();
feedView = null;
}
}
@Override
public void onDestroy() {
super.onDestroy();
// Limpieza adicional cuando el fragmento se destruye
if (feedSDK != null) {
feedSDK.cleanup();
feedSDK = null;
}
}
Al cambiar de Fragmentos:
// Antes de reemplazar o quitar un fragmento que contenga vistas de FastComments
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.container);
if (currentFragment instanceof YourFragmentWithFeedView) {
((YourFragmentWithFeedView) currentFragment).cleanupFeedView();
}
// Luego continúa con la transacción de fragmentos
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, newFragment)
.commit();
Importante: Siempre llama a los métodos cleanup() para evitar fugas de memoria, especialmente cuando:
- Se destruyen las Actividades
- Se destruyen las vistas de los Fragmentos
- Al cambiar entre Fragmentos
- Al navegar fuera de pantallas con componentes de FastComments
¿Necesita ayuda?
Si encuentra algún problema o tiene preguntas sobre la biblioteca de Android, por favor:
Contribuciones
¡Las contribuciones son bienvenidas! Por favor visite el repositorio de GitHub para las directrices de contribución.