2014-09-19 4 views
4

Scénario:iOS: XMPP: Obtenir des messages hors ligne


Problème:

  • messages que j'ai envoyé à un utilisateur hors connexion est perdue.
  • L'utilisateur, lorsqu'il est en ligne, ne reçoit pas les messages hors ligne.
  • Dans le chat de groupe, c'est bien, parce que l'utilisateur est de nouveau joint à ChatRoom, il reçoit par défaut tous les messages. Mais en mode de conversation un-à-un, les messages sont perdus.

sauver tous l'historique des chats et les récupérer a déjà été mis en œuvre. J'utilise XMPPMessageArchiving & XMPPMessageArchivingCoreDataStorage pour atteindre le même.

Ce sera très utile, si quelqu'un peut me diriger vers la bonne direction pour résoudre ce problème.

+0

quel serveur xmpp utilisez-vous? Assurez-vous que le stockage hors-ligne est activé – vitalyster

Répondre

7

Les messages hors ligne sont sous la responsabilité du serveur. La gestion des messages hors ligne est expliquée dans XEP- 160

Du côté client, vous devez vous assurer que vous envoyez des strophes de message avec des types de "normal" ou "chat".

Vous devez également vous assurer que le stockage des messages hors ligne est activé dans eJabberd.

Une fois que vous pouvez venir vous en ligne obtenez tous les messages hors ligne un par un dans

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message` 

XMPPMessage sera comme suit, avec un retard et une étiquette d'horodatage.

<message xmlns="jabber:client" from="[email protected]/demoResource" to="[email protected]" type="chat" id="234E5B61-C450-4F15-B2E6-5AF68AA8D376"><body>offline message test body</body><html xmlns="http://jabber.org/protocol/xhtml-im"><body xmlns="http://www.w3.org/1999/xhtml" style="background-color:#e9e9e9;color:#000000;"><span style="font-family: 'Helvetica';font-size: 12px;">offline message test body</span></body></html><x xmlns="jabber:x:event"><composing></composing></x><active xmlns="http://jabber.org/protocol/chatstates"></active><delay xmlns="urn:xmpp:delay" from="suhailk-imac.local" stamp="2014-09-19T10:41:50Z">Offline Storage</delay><x xmlns="jabber:x:delay" stamp="20140919T10:41:50"></x></message> 
+0

Nous avons créé Application pour le chat et pour le moment, il fonctionne correctement lorsque les utilisateurs sont en ligne. Nous sommes confrontés à un problème lorsque les utilisateurs passent en mode hors connexion. A ce moment-là, nous recevons un message dans la table offmessagearchive après 30 secondes avec l'aide du plugin Monitoring Service. Est-il possible que ce plugin nous aide à insérer des messages dans la base de données plus rapidement? –

2

Chaque fois que l'utilisateur est en ligne, envoyer la présence de l'utilisateur en utilisant XMPPPresence. Dès que ejabberd apprend que l'utilisateur est présent, il renvoie tous les messages hors ligne à l'utilisateur

Questions connexes