Community : fil in-app, commentaires et profils

Tout se pilote depuis Communauté dans la barre latérale, après avoir choisi l'app concernée. Chaque communauté appartient à une app et une seule.

Activer

Personnaliser → Général → Communauté activée.

L'activation fait trois choses d'un coup, pour que tu n'aies pas à les deviner :

  1. le fil devient visible dans le SDK
  2. un groupe par défaut est créé
  3. le produit Community est activé sur ton App ID

Tant qu'elle est éteinte, le SDK affiche un écran d'attente et aucun contenu n'est servi. C'est le défaut : on ne veut pas qu'un fil vide apparaisse dans une app en production le jour du déploiement.


Groupes

Les onglets de ton fil. Une publication appartient à exactement un groupe, ce qui rend les onglets lisibles et les compteurs honnêtes.

RéglageEffet
Nom, emoji, descriptionCe que voit le membre
Qui peut publier« Tout le monde » ou « L'équipe uniquement »
ArchiverMasqué dans l'app, ses publications restent en base

« L'équipe uniquement » transforme le groupe en tableau d'annonces : les membres lisent et commentent, ils ne publient pas. C'est le mécanisme derrière les groupes de bienvenue façon « À propos de… ».

Le groupe par défaut reçoit les publications sans groupe explicite. Il ne peut être ni supprimé ni archivé - sinon ces publications n'auraient plus de destination. Un groupe ne se supprime que vide ; sinon, archive-le.


Publications

Le tableau de tout ce qui est publié, par ton équipe comme par les membres. Filtrable par groupe, statut et recherche plein texte.

Publier

Une publication du studio porte le badge « équipe » et ne passe pas par la modération : tu n'as pas à passer devant ton propre filtre. La longueur maximale configurée s'applique aux membres, pas à tes annonces.

Options : épingler en tête de groupe, afficher ou masquer le badge équipe, programmer.

Programmer

Renseigne une date future : la publication part automatiquement à l'heure dite (granularité d'une minute). Une date future implique toujours une programmation, même si tu demandes « publier maintenant » - sinon une publication datée de demain apparaîtrait en tête de fil aujourd'hui.

Créer en lot

Jusqu'à 50 publications d'un coup, pour amorcer une communauté ou dérouler un calendrier éditorial. Un bloc par publication, les options communes en tête.

C'est tout ou rien : si une entrée est refusée, aucune n'est créée. Une série à moitié publiée serait plus pénible à rattraper qu'un échec franc, parce qu'il faudrait d'abord déterminer où elle s'est arrêtée.

Statuts

StatutSignification
PubliéeVisible dans le fil
En attente de relectureRetenue par la modération, visible de son seul auteur
ProgramméePartira à sa date
BrouillonNe partira pas tant que tu ne l'auras pas décidé
RetiréeRetirée par la modération, conservée pour l'audit

Supprimer ou retirer

Deux gestes différents :

  • Supprimer (tableau Publications) efface définitivement, avec commentaires et réactions. Pour du contenu qui n'aurait jamais dû exister - données personnelles publiées par erreur, demande d'effacement.
  • Retirer (file de modération) passe en « Retirée » et journalise la décision. C'est le geste pour sanctionner.

Membres

Tous ceux qui ont ouvert la communauté. Un profil est créé à la première ouverture du fil, sans inscription.

Modifiables en ligne :

  • Rôle - membre, modérateur, admin
  • Badge équipe - affiche un badge sous le pseudo dans le fil

Tu ne peux modifier ni le pseudo ni la bio d'un membre. Modérer un contenu est légitime, réécrire l'identité de quelqu'un ne l'est pas. Les sanctions passent par le bouton Décision, qui les journalise.


Modération

File

Les signalements des membres, enrichis de l'extrait du contenu visé, de son auteur et du nombre de signalements sur la même cible - de quoi trancher sans ouvrir trois écrans.

Un membre ne signale un contenu qu'une fois : sinon le compteur qui déclenche le masquage automatique serait trivial à manipuler.

Décisions

Une seule route pour toutes les actions, ce qui garantit qu'aucune décision n'échappe au journal.

Sur un contenu :

ActionEffet
Laisser en ligneÉcarte les signalements, le contenu reste
RetirerMasqué pour tous, conservé pour l'audit
Remettre en ligneAnnule un retrait

Sur un profil :

ActionEffet
AvertirTrace au journal, aucun effet visible
Shadow banLe membre publie et voit ses contenus, personne d'autre. Jamais notifié
BannirLecture seule
Lever la sanctionRetour à la normale
Effacer le profilPseudo, bio et avatar effacés (RGPD). Les publications restent, signées du nom d'alors

Ban et shadow ban acceptent une durée ; sans durée, la sanction est permanente. Une sanction temporaire est levée automatiquement au retour du membre.

Le shadow ban est le seul outil qui ne s'annonce pas. Un membre banni le sait et va se plaindre ailleurs ; un membre shadow banni continue de parler dans le vide. À réserver aux cas où le bruit est le problème.

Modes

Personnaliser → Modération.

ModeComportement
DésactivéeTout est publié. Les signalements arrivent quand même
AutomatiqueChaque contenu est évalué avant publication
ManuelleRien n'est publié sans validation. Tenable seulement à faible volume

En mode automatique, deux seuils entre 0 et 1 :

  • au-delà du seuil de relecture, le contenu part en file au lieu d'être publié ;
  • au-delà du seuil de refus, il est refusé d'emblée et l'auteur le sait.

Les mots interdits sont comparés sur des mots entiers, sans tenir compte de la casse ni des accents. Une correspondance refuse le contenu sans appeler le classifieur.

Le masquage automatique après N signalements met le contenu de côté en attendant l'arbitrage. C'est ce qui permet à la communauté de se défendre la nuit. Zéro le désactive.

En cas de panne du classifieur, le contenu est publié. Une communauté qui refuse tout parce qu'un fournisseur est indisponible est cassée de façon bien plus visible qu'une heure de contenu non filtré. Les signalements restent le filet de sécurité.

Journal

Toutes les décisions, humaines et automatiques, avec leur motif. Jamais modifié, jamais purgé : c'est ce qui permet de répondre « pourquoi ce membre a-t-il été banni ? » six mois plus tard.


Statistiques

Chaque compteur est affiché avec sa valeur sur la période précédente de même durée. « 240 publications » ne dit rien ; « 240 contre 180 » dit tout.

Audience

Membres, nouveaux membres, membres actifs, actifs par jour, ouvertures.

« Membres actifs » compte les personnes distinctes ayant ouvert la communauté, pas le nombre d'ouvertures.

Contribution

Publications, commentaires, réactions, vues, et le taux de participation : la part des membres actifs qui publient ou commentent.

C'est la métrique qui distingue une communauté d'un mur d'annonces. Une audience qui monte avec un taux qui s'effondre décrit une communauté qu'on regarde sans y participer.

Les vues sont uniques par membre : rescroller un post ne regonfle pas le compteur.

Santé

Signalements en attente, signalements sur la période, contenus retirés, membres bannis. Ces métriques sont inversées à l'affichage - une hausse est en rouge.

Rétention

Part de chaque cohorte hebdomadaire encore active N semaines plus tard. L'intensité de la couleur porte l'information : on lit une courbe qui s'affaisse d'un coup d'œil.

C'est le seul indicateur qui dit si la communauté tient. Une courbe d'activité peut monter uniquement parce que tu acquiers, pendant que chaque cohorte s'évapore.

Classements

Meilleurs contributeurs et publications les plus vues, sur la période et non en cumul. Un classement figé sur le total récompenserait éternellement les anciens et masquerait qui porte la communauté ce mois-ci.


Personnaliser

Quatre onglets, chacun enregistrable indépendamment : régler la modération n'écrase pas le thème.

OngletContenu
GénéralActivation, fonctionnalités, traduction
ApparenceCouleur, police, taille, arrondi, thème clair/sombre, aperçu
ContenuLongueurs max, images par post, lignes avant « voir plus », anti-flood
ModérationMode, seuils, masquage auto, règles, mots interdits

Tout changement est repris par le SDK à la prochaine ouverture, sans republication de l'app.

Utiliser ta propre police

Dans Apparence, choisis « Personnalisée » et saisis le nom PostScript d'une police déjà embarquée dans ton app - pas le nom du fichier.

bash
# Trouver le nom PostScript d'un fichier de police
mdls -name com_apple_ats_name_postscript MaPolice.ttf

Si le SDK ne trouve pas la police, il retombe silencieusement sur la police système : une police manquante ne doit pas rendre le fil illisible.

Réglage iOS uniquement : sur Android, « personnalisée » et « arrondie » retombent sur la police par défaut du système. Embarquer une fonte dans le SDK pèserait sur toutes les apps intégratrices, y compris celles qui n'en veulent pas.

Traduction instantanée

Les contenus sont traduits dans la langue de l'appareil du lecteur. Le premier lecteur d'une langue paie l'appel au traducteur, les suivants lisent le cache - c'est ce qui rend la fonctionnalité soutenable.

Le membre peut toujours revenir au texte original.


Intégrer le fil dans ton app

Le fil est rendu en natif par le SDK. Ton app fournit un point d'entrée - un onglet, un bouton - et le SDK dessine le reste. Deux prérequis :

  1. Le SDK est installé et AppwinCore.configure est appelé au démarrage (AppwinCore.instance.configure en Dart).
  2. La communauté est activée, comme décrit en haut de page. Sans ça, le SDK rend un écran d'attente et les appels reçoivent un 403.

SwiftUI - dans un onglet

swift
import AppwinCommunity

TabView {
  HomeView()
    .tabItem { Label("Accueil", systemImage: "house") }

  AppwinCommunity.communityView()
    .tabItem { Label("Communauté", systemImage: "bubble.left.and.bubble.right") }
}

UIKit

swift
let communityVC = AppwinCommunity.communityViewController()
communityVC.tabBarItem = UITabBarItem(
  title: "Communauté",
  image: UIImage(systemName: "bubble.left.and.bubble.right"),
  tag: 1
)
tabBarController.viewControllers = [homeVC, communityVC, profileVC]

Modal

swift
AppwinCommunity.presentCommunity()

Ce que le membre peut faire

Selon ce qui est activé dans le dashboard :

  • lire le fil, filtrer par groupe, tirer pour rafraîchir
  • publier, éditer et supprimer ses propres contenus
  • commenter, répondre à un commentaire (un seul niveau)
  • réagir aux publications et commentaires
  • consulter les profils, éditer le sien, redevenir anonyme
  • signaler une publication, un commentaire ou un profil
  • lire dans sa langue si la traduction est activée

Chacun de ces points a un interrupteur côté studio. Une fonctionnalité désactivée disparaît de l'interface, elle n'est pas grisée.


Localisation

Les libellés du SDK sont résolus dans les ressources de ton app, pas dans celles du module. Tu peux donc traduire ou réécrire n'importe quel libellé sans attendre une livraison de notre part.

Ajoute un AppwinCommunity.strings à ton projet :

Texte brut
"community.new_post" = "Partager quelque chose";
"community.like" = "J'aime";
"community.comments" = "Réactions";

Les clés sont listées dans CommunityStrings.swift.

Sans ressource fournie, le SDK utilise ses défauts anglais - jamais une clé brute à l'écran. Deux usages :

  • traduire dans une langue qu'on ne fournit pas encore
  • réécrire un libellé qui ne colle pas à ton ton

Dépannage

SymptômeCause probable
Écran « bientôt disponible »Communauté désactivée dans le dashboard
403 sur tous les appelsProduit Community pas activé sur l'App ID - réactive depuis Personnaliser
Fil vide sans erreurAucune publication ; publie depuis le dashboard pour amorcer
Le fil ne scrolle pas (Flutter)Un widget parent intercepte la gestuelle
Écran d'erreur natifconfigure pas appelé avant l'affichage de la vue
Compilation iOS échoueCible de déploiement sous iOS 16

Suite