13

仕様から —</p>

7.14 部屋から出る

マルチユーザー チャット ルームを終了するために、占有者は、ルームで現在使用している <room@service/nick> に「使用不可」タイプのプレゼンス スタンザを送信します。

例 80. 占有者が部屋を出る

<presence
    from='hag66@shakespeare.lit/pda'
    to='coven@chat.shakespeare.lit/thirdwitch'
    type='unavailable'/>

これは、ユーザーが XMPP サーバーから切断するとすぐに、サーバー側のグループから削除されることを意味します。問題は単純です — 私はこの動作を望んでいません。Whatsapp と同様の動作が必要です。つまり、ユーザーがオフラインになっても、MUC ルーム (サーバー側で永続的に構成されている) の一部であり、他の居住者からメッセージを受信します。

XEP-0045 と XMPPFramework for iOS の仕様とドキュメントを考えると、これを達成する方法や、従来の ejabberd サーバーでこれを達成できるかどうかはわかりません。

4

4 に答える 4

9

XEP-45 は 10 年以上前に設計されました。当時、設計者は IRC チャネルのようなものを念頭に置いていました。XEP-45 のすべては、ユーザーがクライアントの起動/終了時にルームに出入りすることを前提に設計されています。

WhatsApp Groupchat は異なります。ユーザーはグループチャットに参加すると、そのチャットの (完全な) 履歴を表示できます。ユーザーのクライアントがオフライン/利用できない場合でも、グループチャットの一部と見なされます。

XMPP コミュニティは現在、そのような機能を提供する新しい XEP に取り組んでいます。これはXEP-0369: Mediated Information eXchangeと呼ばれます。これは、XEP-0045 の精神的な後継者であり、現代のグループチャットに期待される機能を提供します。

于 2014-09-23T10:43:21.163 に答える
5

Whatsapp モデルは想像以上にシンプルです。ユーザーが切断してもオンラインでユーザー セッションを維持し、セッションを「再接続」するとメッセージを再送信します。XEP-0198では、従来の XMPP セッションと同様の概念が導入されています。より長い非アクティブ期間を構成するだけで済みます (通常、XEP-0198 は 300 秒を想定していますが、whatsapp のようなメッセンジャーは 24 時間以上セッションを保持します)。

于 2014-09-22T23:40:31.480 に答える
1

はい、次のように構成を設定することで、グループを永続化できます。

NSString *var = [field attributeStringValueForName:@"var"];
if ([var isEqualToString:@"muc#roomconfig_persistentroom"])
{
    [field removeChildAtIndex:0];
    [field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
}
于 2014-09-25T09:40:25.157 に答える