xmpp 书签的自动加入选项不起作用

2024-06-21

我正在尝试使用 XEP-0048 - 书签(http://xmpp.org/extensions/xep-0048.html http://xmpp.org/extensions/xep-0048.html).

我正在使用 RobbieHanson XMPPFramework,ejabberd v13.x 到目前为止,我已经能够使用以下代码向房间添加书签:

-(void) createBookmarkforRoom:(NSString *)roomJid {
    NSXMLElement *nick = [NSXMLElement elementWithName:@"nick" stringValue:@"Marge"];

    NSXMLElement *conference = [DDXMLNode elementWithName:@"conference"];
    [conference addAttributeWithName:@"name" stringValue:@"BookmarkName"];
    [conference addAttributeWithName:@"autojoin" stringValue:@"true"];
    [conference addAttributeWithName:@"jid" stringValue:roomJid];

    [conference addChild:nick];

    NSXMLElement *storage =[DDXMLNode elementWithName:@"storage"];
    [storage addAttributeWithName:@"xmlns" stringValue:@"storage:bookmarks"];

    [storage addChild:conference];

    NSDictionary *options = [NSDictionary dictionaryWithObjects:@[@"pubsub#persist_items",@"pubsub#access_model"]
                                                    forKeys:@[@"true",@"whitelist"]];

    [self.publishSubscribeModule publishToNode:@"storage:bookmarks"
                                     entry:(NSXMLElement *)storage
                                withItemID:(NSString *)@"current"
                                   options:(NSDictionary *)options];

}

以下 xml 已成功发送:

<iq type="set" id="2749368B-E365-45D6-A4B0-2F79DC6F4747">
   <pubsub xmlns="http://jabber.org/protocol/pubsub">
      <publish node="storage:bookmarks">
         <item id="current">
            <storage xmlns="storage:bookmarks">
               <conference name="BookmarkName" autojoin="true" jid="[email protected] /cdn-cgi/l/email-protection">
                  <nick>Marge</nick>
               </conference>
            </storage>
         </item>
      </publish>
      <publish-options>
         <x xmlns="jabber:x:data" type="submit">
            <field var="FORM_TYPE" type="hidden">
               <value>http://jabber.org/protocol/pubsub#publish-options</value>
            </field>
            <field var="true">
               <value>pubsub#persist_items</value>
            </field>
            <field var="whitelist">
               <value>pubsub#access_model</value>
            </field>
         </x>
      </publish-options>
   </pubsub>
</iq>

我收到:

<iq xmlns="jabber:client" from="[email protected] /cdn-cgi/l/email-protection" to="[email protected] /cdn-cgi/l/email-protection/41045582821403862604272126" id="2749368B-E365-45D6-A4B0-2F79DC6F4747" type="result">
   <pubsub xmlns="http://jabber.org/protocol/pubsub">
      <publish node="storage:bookmarks">
         <item id="current" />
      </publish>
   </pubsub>
</iq>

当我尝试使用以下代码获取书签时:

-(void)requestBookmarks {
    DDXMLElement *pubsub = [DDXMLElement elementWithName:@"pubsub" xmlns:@"http://jabber.org/protocol/pubsub"];

    DDXMLElement *items = [DDXMLElement elementWithName:@"items"];
    [items addAttributeWithName:@"node" stringValue:@"storage:bookmarks"];

    [pubsub addChild:items];

    XMPPIQ *iqBookmark = [XMPPIQ iqWithType:@"get" elementID:@"retrievebookmark10" child:pubsub];
    [self.stream sendElement:iqBookmark];
}

它发送以下 xml:

<iq type="get" id="retrievebookmark10">
    <pubsub xmlns="http://jabber.org/protocol/pubsub">
        <items node="storage:bookmarks"/>
    </pubsub>
</iq>

我收到:

<iq xmlns="jabber:client" from="[email protected] /cdn-cgi/l/email-protection" to="[email protected] /cdn-cgi/l/email-protection/41045582821403862604272126" id="retrievebookmark10" type="result">
    <pubsub xmlns="http://jabber.org/protocol/pubsub">
        <items node="storage:bookmarks">
            <item id="current">
                <storage xmlns="storage:bookmarks">
                    <conference name="BookmarkName" autojoin="true" jid="[email protected] /cdn-cgi/l/email-protection">
                        <nick>Marge</nick>
                    </conference>
                </storage>
            </item>
        </items>
    </pubsub>
</iq>

所以看来我可以成功存储书签并检索它们。但是,当我尝试在房间里说话时[email protected] /cdn-cgi/l/email-protection如果没有手动加入,我会收到一条错误消息,提示我必须先加入房间,然后才能在房间里说话。如果我(手动)加入房间,一切都会正常。

在服务器端,我使用了mod_pubsub具有以下选项的模块:

  mod_pubsub:
   access_createnode: pubsub_createnode
    ## reduces resource comsumption, but XEP incompliant
   ignore_pep_from_offline: true
    ## XEP compliant, but increases resource comsumption
    ## ignore_pep_from_offline: false
   last_item_cache: false
   plugins:
     - "flat"
     - "hometree"
     - "pep" # pep requires mod_caps

我想知道为什么我必须手动加入标有“auto-join = true”的房间。有什么线索吗?


自动加入书签房间完全是客户端功能 - 客户端应该在启动时检索书签,并显式加入标记为“自动加入”的房间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xmpp 书签的自动加入选项不起作用 的相关文章

  • 如何将 inproc 传输与 pyzmq 一起使用?

    我已经设置了两个小脚本来模仿 pyzmq 的发布和订阅过程 但是 我无法使用inproc运输 我能够使用tcp 127 0 0 1 8080好吧 只是不是 inproc pub server py import zmq import ran
  • 使用 smack 库在 JAVA 中实现 GCM CCS (XMPP)。与 gcm.googleapis.com 连接失败

    我正在尝试使用 GCM 在 android 客户端和 java 中的服务器应用程序之间进行通信 我正在使用基于 XMPP 的 GCM 因为我需要异步 双向消息 在我的客户端 1 Google Play 服务检查显示需要更新 google p
  • 如何使用 Smack 通过 XMPP 设置/获取配置文件数据

    我正在 Android 上使用 Smack 库开发 XMPP 客户端 花名册 消息 状态等内容运行得很好 然而 我没有找到一种方法来存储额外的个人资料信息 用户图片 狗的名字 我从谷歌搜索中看到的唯一方法是使用 VCard 但它根本不起作用
  • ZeroMQ,我们可以使用 inproc: 传输以及 pub/sub 消息传递模式吗

    设想 我们正在评估ZeroMQ 具体来说jeroMq 用于事件驱动机制 应用程序是分布式的 其中多个服务 发布者和订阅者都是服务 可以存在于同一个 jvm 中或不同的节点中 这取决于部署架构 观察 为了玩玩我创建了一个pub sub图案与i
  • 使用 C# 代码使用 iTextSharp 将页面书签添加到现有 PDF

    我的要求与这个问题中描述的相同 使用 iTextSharp 4 1 6 为特定页面添加书签 https stackoverflow com questions 19360946 bookmark to specific page using
  • 无法向 openfire 服务器发送消息

    我无法使用 SMACK API 向 openfire 服务器上的 XMPP 客户端发送消息 我不确定我哪里出错了 我在 gtalk 上测试了相同的代码 它工作正常 public class SenderTest public static
  • 在 GCP PubSub 中收到任何响应之前重试总超时时间已超过

    我正在尝试使用 Node js 推送到 PubSub 主题 google cloud pubsub模块 这是 JavaScript 代码 const pubsub require google cloud pubsub class MyPu
  • AMQP如何克服直接使用TCP的困难?

    AMQP如何克服直接使用TCP发送消息时的困难 或者更具体地说 在发布 订阅场景中 在 AMQP 中 有一个代理 该代理接收消息 然后完成将消息路由到交换器和队列的困难部分 您还可以设置持久队列 即使客户端断开连接 也可以为客户端保存消息
  • aSmack 即服务

    基本上我有一个运行整个项目的主类 该代码运行完美 尽管一旦应用程序失去焦点 它就会变得不活动 我想知道如何将其变成一项服务 一个会在启动时启动的 该应用程序将是一个用于通知的单向消息系统 IE 桌面客户端 gt Openfire 服务器 g
  • Redis Cluster 与 Pub/Sub 中的 ZeroMQ,用于水平扩展的分布式系统

    如果我要设计一个巨大的分布式系统 其吞吐量应随系统中的订阅者数量和通道数量线性扩展 哪个会更好 1 Redis集群 仅适用于Redis 3 0 alpha 如果是集群模式 您可以在一个节点上发布并在另一个完全不同的节点上订阅 消息将传播并到
  • 如何通过 BOSH 使用 XMPP

    所以我对 BOSH 到底是什么有点困惑 这是一种使用http与XMPP服务器交互的方式吗 例如 openfire 使用 BOSHhttp domain com 7070 http bind http domain com 7070 http
  • Node.js 上的 starttls > 0.4.0

    我遇到了这个线程Node js HTTPS 安全错误 https stackoverflow com questions 5136353 node js https secure error其中提到 tls 模块是现在在节点上执行 TLS
  • pubnub 和 head.js

    有没有人成功整合过pubnub http www pubnub com 和 head js 正确吗 Pubnub http www pubnub com 希望我将他们的脚本放在页面底部并带有 div 就在它前面的标签 这可以确保在最后调用
  • ejabberd:运行安装后脚本时出错

    我正在尝试安装ejabberd在我的电脑上 但我不断收到此错误 Error running Post Install Script The installation may not have completed correctly ejab
  • 登录异常 SASL 身份验证在 android 中使用 DIGEST-MD5 asmack 机制失败

    我尝试连接 Xmpp 服务器 但出现异常 登录异常 SASL 身份验证使用 DIGEST MD5 机制失败 我使用这个代码 任何人都可以帮助我 或者代码 try if xmppConnection null ConnectionConfig
  • 如何在 Visual Studio 中删除 Brief 书签?

    我已经为 Visual Studio 创建了绑定Edit BriefBookmarkDropx命令 Edit BriefBookmarkDrop1 Ctrl Shift 1 Edit BriefBookmarkDrop2 Ctrl Shif
  • Nestjs全局pubsub实例和依赖注入

    我遵循了有关 pubsub subscriptions 的 Nestjs DOCS 根据示例 pubsub 在给定解析器的顶部初始化为 const pubSub new PubSub 后来文档说 我们在这里使用了本地 PubSub 实例 相
  • XMPPFramework - 如何创建多用户聊天室?

    我如何使用XMPPFramework在iPhone中实现GroupChat 我尝试了以下代码 但房间没有创建 我如何知道房间是否创建 XMPPRoomDelegate没有被调用 当Stream断开连接时 调用handleDidLeaveRo
  • 如何使用 ejabberd 进行视频通话?

    如何使用ejabberd进行视频通话 如msn和skype ejabberd 本身不处理音频 视频 音频和视频通过 Jingle XEP 0166 进行处理 这是客户端到客户端的 如果您想发出音频或视频呼叫 您应该确保两个客户端都通过正常的
  • java.io.EOFException:没有更多可用数据 - 预期结束标记 关闭开始标记

    我正在使用 xmpp 开发一个聊天应用程序 根据我们的要求 我们有三台服务器 Apache Tomcat 7 ejabbered 2 1 11 和 mysql 5 5 to run xmppbot on tomcat used below

随机推荐

  • Java 的类加载器与 jars-with-jars

    我们有一个可执行的 JAR 文件有时包含其他 JAR 文件 整个事情依赖于另外四个下载的 JAR 骑在太空中一只巨大的部署乌龟的背上 在运行时 我们动态加载嵌套的 JAR 文件 执行以下操作 wearyingly verbose error
  • asp.net mvc 3 razor 从 IEnumerable 获取一个元素

    我的视图模型 LIST 看起来像这样 public class ConversationModel public int ID get set public string Body get set public DateTime Datet
  • 如何使用 (a)smack 在 Android 上保持 XMPP 连接稳定?

    我使用适用于 Android 的 asmack android 7 beem 库 我有一个后台服务正在运行 例如我的应用程序保持活动状态 但 XMPP 连接迟早会在没有任何通知的情况下消失 服务器表示客户端仍然在线 但没有发送或接收数据包
  • 删除连接中不存在的记录

    想象两个表 A 和 B A B 1 2 2 3 6 5 4 7 9 11 13 23 9 现在我想从 A 中删除 B 中不存在的记录 例如从 A 中删除 1 6 和 4 我最初的想法是您可以 否定 联接的结果 DELETE FROM A W
  • 为什么 PostgreSQL 会重新分配角色命令,更改模板数据库的所有者

    想象一下现有的数据库称为store a与一表产品 还有一个用户叫store a user 数据库 表 数据 对象等都属于store a user 我现在创建一个名为的新用户store b user和一个名为的新数据库store b通过模板化
  • 纯粹使用 WIX 进行修补

    我正在努力纯粹使用 WIX 创建补丁 我希望有人能指导我正确的方向 我有几百个源文件 我对它们进行加热以创建一个收获文件 然后使用蜡烛和光创建一个包 我需要更改一些配置文件 并使用更改创建第二个包 我使用 Torch 和 Pyro 创建 w
  • 网站是否可以跟踪用户的 chrome 扩展程序或他们的行为?

    我对网站访问者的 Chrome 扩展程序及其功能非常感兴趣 传出网络通讯 文件保存 存储等 有没有可能检测到这些 No 这将是对隐私的严重侵犯 最接近检测扩展的方法是检查页面的 DOM 和 JS 环境 看看浏览器是否以您意想不到的方式修改了
  • 打破java中的递归

    递归有点像 分而治之 的风格 它在变得更小的同时分裂 树数据结构 我希望它在发现违规时完全中断 这意味着打破所有递归路径 并返回 true 这可能吗 无论你做什么 你都必须释放堆栈 这留下了两个选择 魔法返回值 正如汤姆之一所描述的 抛出异
  • google apps 脚本 ==> UrlFetchApp、方法 GET 和 cookie

    我使用 UrlFetchApp 发送用户和密码 POST 方法 获取cookie后 并在其他请求中使用 GET方法 但是这个新请求不起作用 我认为这个 cookie 在这个新请求中没有正确使用 谁能帮我 var opt method pos
  • 用于动态字符计数的 Jasmine 单元测试用例

    任何人都可以给我编写测试用例的例子来检查是否 jquery 和 jasmine 中调用 keyup 事件中的函数 我对 jquery 和 jasmine 相当陌生 所以对这些错误感到抱歉 当用户在输入字段中输入字符时 该程序显示剩余的字符数
  • 如何在我自己的网络服务器上导出并托管 ggvis 图表?

    据我了解 ggvis 运行在闪亮的之上 但我不知道如何在没有 R shiny 的情况下导出在网络服务器上运行单个 ggvis 图表所需的所有文件 这对于交互式绘图来说是不可能的 因为 每个交互式 ggvis 图都必须连接到正在运行的 R 会
  • Java - 基类和子类中的 equals 方法

    我有一个简单的基类 后来由许多单独的类扩展 这些类可能会引入新的字段 但不一定 我在基类中定义了一个 equals 方法 但也为一些子类重写了该方法 可以在基类 子类中混合定义吗 就我而言 这是为了避免代码重复检查相同的字段 看一眼 实现
  • UNIX 中 $@ 和 $* 有什么区别?

    有什么区别 and 在UNIX 中 当在脚本中回显时 它们似乎都会产生相同的输出 请参阅特殊参数下的 bash 手册页 Special Parameters The shell treats several parameters speci
  • Ant - 如何获取特定文件夹中的所有文件名

    这是我的生成jar包的Ant脚本 我有一堆清单类路径属性的jar包 它们都在特定的文件夹中 我不想硬编码 如何自动获取它们
  • 如何调用 Numpy 数组中的元素?

    这看起来是一个非常简单的问题 但我找不到答案 如何调用 Numpy 数组中的元素 import numpy as np arr np array 1 2 3 4 5 6 7 8 9 10 print arr 0 0 上面的代码不起作用 只需
  • Delphi定时器比毫秒更精确

    我在 Delphi 中有一个程序 它以 25 赫兹 每秒 25 次 的速度从外部应用程序获取帧 然后通过创建 1 2 个额外帧将其转换为 60 赫兹 每秒 60 帧 我需要通过连续构建帧缓冲区并从单独的线程输出帧来输出这些额外的帧 问题是
  • iPhone 核心数据:无法找到 NSManagedObjectModel

    我使用 Apple 的 CoreDataBooks 示例项目作为核心数据的学习辅助工具 我修改了应用程序 以便在加载应用程序时我首先显示菜单页面 而不是图书表视图 RootViewController 我做了以下事情 我在界面生成器中创建了
  • ASP.NET Identity Extend 方法来访问用户属性

    我可以扩展方法来访问用户属性吗 有这样的方法 User Identity GetUserId User Identity GetUserName 可以从视图和控制器访问它们 我想使用以下方法扩展此功能 User Identity GetUs
  • IIS 和网络花园配置

    允许 IIS 在每个应用程序池 网络花园配置 中生成多个工作进程是否具有显着的性能优势 哪些性能计数器表明这可能是个好主意 我知道会话状态必须在进程外运行 但是还有其他问题吗 我做了一些研究 发现这篇有用的文章 其中涵盖了许多潜在的问题 并
  • xmpp 书签的自动加入选项不起作用

    我正在尝试使用 XEP 0048 书签 http xmpp org extensions xep 0048 html http xmpp org extensions xep 0048 html 我正在使用 RobbieHanson XMP