Chat avec Realm

Bonjour

A titre d’exercice, j’essaie de réaliser un chat sur Realm. Je rencontre le problème suivant: quand le user A écrit un message, il en est le owner, et est donc le seul à le voir. De même pour le user B… Du coup, chacun écrit et lit ses propres messages sans recevoir ceux de l’autre, ce qui est un peu embêtant pour un chat!

Comment faire pour que chacun puisse lire les messages de l’autre (et y répondre…) ? Faut-il partager un realm commun aux users A et B ou donner des accès de l’un au realm de l’autre ?

Merci de votre aide.

Hello @c.bourgarel

A mon avis, pour faire ce genre de chose, tu devrais utiliser le Realm Cloud, et donc utiliser une base de donnée en ligne.

Ensuite, tu peux créer un objet “Chat” (par exemple) qui serait partagée entre deux (ou plus) utilisateurs, et ainsi tu sais les “partager” et les afficher dans l’application des deux utilisateurs.

Bon amusement,

Alexandre

Bonjour Alexandre

J’utilise effectivement le Realm Cloud, la base de données est déjà en ligne. J’ai créé un objet “message” ci-dessous

class Message: Object {
@objc dynamic var id: String = UUID().uuidString
@objc dynamic var texte = “”
@objc dynamic var auteur = “”
@objc dynamic var timestamp = Date().timeIntervalSinceReferenceDate
override static func primaryKey() -> String? {
return “id”
}
}

Mon problème, c’est que je ne sais pas le partager entre plusieurs users. Faut-il utiliser le mécanisme des Permissions ?

Mmh, tout d’abord, est-ce que tu veux faire un chat “général” ? Ou un chat entre deux personnes spécifiques ?

Si c’est un chat général, alors dans ton application, tu récupères tous les messages, tout simplement.
Ainsi, lorsqu’un utilisateur envoi un message, il se stocke dans la base de donnée, et ensuite il faut que l’application des autres utilisateurs récupère tous les messages de la base de donnée.

Tu vois ce que je veux dire ?

Pas tout à fait. En fait, il y a un user qui a un rôle particulier, une sorte d’animateur, et les autres users peuvent lui poser des questions, mais seulement à lui.

Mais donc, quand tu te connectes à l’application, soit tu es l’animateur, soit tu es un user normal, qui envoi des messages à l’animateur. Enfin, est-ce qu’il y a plusieurs animateurs dans ton application ?
J’essaye juste de savoir si tu as un seul chat général, ou si tu as plusieurs chat avec plusieurs animateurs ?

Oui, l’animateur se connecte en tant qu’animateur, et voit tous les messages de tous les utilisateurs. Il peut répondre à chacun d’entre eux.

Les users “normaux” ne voient que leurs propres questions et les réponses de l’animateur à leur question.

Et il n’y a qu’un animateur, toujours le même…

Ok ok, je comprends mieux ! :slight_smile:

Avec ton objet “Message” du dessus, tu sauras afficher les messages de la personne qui les a envoyés, mais pas les réponses de l’animateur.

Moi, ce que je ferai, c’est que je créerai un objet “Chat”, ce qui permettrait de lier les messages de l’utilisateur (le normal) et ceux de l’animateur.

Ainsi, par exemple, tu aurais un utilisateur U1 qui enverrait un message à l’animateur A1, ce qui formerait un chat C1 (qui serait lié à U1 et A1). Par la suite, à chaque fois que U1 envoi un message à A1, ou que A1 répond à U1, tu lierais les messages à ce chat C1. Ainsi, tu sais récupérer tous les messages du chat C1 pour les afficher à U1 et A1, ce qui permettrait de voir les messages envoyés.

Tu vois ce que je veux dire ?
Si pas, je peux te faire un exemple :slight_smile:

Bonne idée. Si j’ai bien compris, les messages de l’animateur ne seraient pas regroupés dans un chat “animateur”, mais dispatchés dans les chats utilisateurs U1, U2, …

Oui, tout à fait ! :slight_smile:

Parce que si tu stockes tous les messages de l’animateur dans son propre chat, alors tu ne saurais pas savoir à qui l’animateur à répondu, donc tu ne sais pas les afficher aux bons utilisateurs.

Ok, je crois que j’ai compris :sweat_smile:

Merki !

Avec plaisir :slight_smile:

Bon amusement :slight_smile: