使用 smack 库的 GCM NoResponseException:回复超时内未收到响应

2024-03-21

我是 gcm 新手,我尝试使用 Smack API 连接到 GCM 的云连接服务器(XMPP)。一开始还好 我的代码:

uid = "123456789";
apiKey = "A**************B";
XMPPTCPConnectionConfiguration.Builder config;
config.setSocketFactory(SSLSocketFactory.getDefault());
    config = XMPPTCPConnectionConfiguration.builder();
    config.setUsernameAndPassword(uid,apiKey);
    config.setServiceName("gcm.googleapis.com");
    config.setHost("gcm.googleapis.com");
    config.setPort(5235);
    config.setDebuggerEnabled(true);
    mConnection = new XMPPTCPConnection(config.build());
    mConnection.setPacketReplyTimeout(10000);
    try {
         mConnection.connect();
         mConnection.login();
        }
   catch (SmackException | IOException | XMPPException e) {
            System.out.println("Exception at SmackCcsClient.init()");
            e.printStackTrace();
        }

但我无法通过最初的握手过程。我一开始使用了一些虚拟的随机 GCMID 来测试下游消息传递,它显示在 smack 调试窗口中,但后来,相同的代码在以下 xml feed 之后没有显示任何内容:原始发送数据包:

<stream:stream xmlns='jabber:client' to='gcm.googleapis.com'  xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>

我尝试过

mConnection.login(uid+"@gcm.googleapis.com",apiKey);//even though i assume its next step of the handshake.

控制台打印以下错误:

org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 10000ms (~10s). Used filter: No filter used or filter was 'null'.
at org.jivesoftware.smack.SmackException$NoResponseException.newWith(SmackException.java:106)
at org.jivesoftware.smack.SmackException$NoResponseException.newWith(SmackException.java:85)
at org.jivesoftware.smack.SynchronizationPoint.checkForResponse(SynchronizationPoint.java:253)
at org.jivesoftware.smack.SynchronizationPoint.checkIfSuccessOrWait(SynchronizationPoint.java:146)
at org.jivesoftware.smack.SynchronizationPoint.checkIfSuccessOrWaitOrThrow(SynchronizationPoint.java:125)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:837)
at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:360)
at psdc.gcm.SmackCcsClient.init(SmackCcsClient.java:64)
at psdc.gcm.GCMServer.activate(GCMServer.java:44)
at psdc.servlets.Mapper.selectIds(Mapper.java:191)
at psdc.servlets.Mapper.doPost(Mapper.java:152)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

Jun 25, 2015 5:36:18 PM org.jivesoftware.smack.AbstractXMPPConnection callConnectionClosedOnErrorListener
WARNING: Connection closed with error
java.io.EOFException: input contained no data
    at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:2965)
    at org.xmlpull.mxp1.MXParser.more(MXParser.java:3003)
    at org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1409)
    at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1394)
    at org.xmlpull.mxp1.MXParser.next(MXParser.java:1092)
    at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1151)
    at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$200(XMPPTCPConnection.java:937)
    at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:952)
    at java.lang.Thread.run(Unknown Source)

请帮助我解决这个问题,因为我真的陷入了这个困境,无处可去。请告诉我一种方法来检查我的 xml 请求是否到达谷歌。

我使用 SMACK 库版本 4.1.1


使用 config.setSecurityMode(ConnectionConfiguration.SecurityMode.ifpossible);解决了我的问题。它定义要使用的连接的配置。如果服务器支持相同的功能,则打开 TLS。

refer : http://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smack/ConnectionConfiguration.html http://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smack/ConnectionConfiguration.html

config = XMPPTCPConnectionConfiguration.builder();
config.setSecurityMode(ConnectionConfiguration.SecurityMode.ifpossible);
        config.setSocketFactory(SSLSocketFactory.getDefault());
        config.setUsernameAndPassword(uid,apiKey);
        config.setServiceName("gcm.googleapis.com");
        config.setHost("gcm.googleapis.com");
        config.setPort(5235);
        config.setDebuggerEnabled(true);
            mConnection = new XMPPTCPConnection(config.build());
            mConnection.setPacketReplyTimeout(10000);

            try {
                mConnection.connect();

希望它能帮助某人。

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

使用 smack 库的 GCM NoResponseException:回复超时内未收到响应 的相关文章

  • 当我尝试连接到服务器时出现“远程服务器超时”异常

    尝试连接时openfire服务器通过以下代码 Connection connection new XMPPConnection https 192 168 0 101 5222 connection connect 我收到一个异常 上面写着
  • 实例 ID 服务是否会在应用升级时启动回调 onTokenRefresh()?

    实例 ID 服务是否会在应用升级时启动回调 onTokenRefresh 参考doc https developers google com instance id 指出 令牌是唯一且安全的 但如果出现安全问题或用户在设备恢复期间卸载并重新
  • 使用 smack 和 openfire 服务器在聊天列表中阻止用户的问题

    我想从我的聊天列表中屏蔽某个特定的朋友XMPP 代码工作正常 没有例外 但我无法阻止用户 我正在使用开火服务器 我应该在服务器上进行哪些更改 你们有什么想法吗 My code public void XMPPAddNewPrivacyLis
  • GCM 返回空消息类型

    我创建了一个使用 GoogleCloudMessaging 的应用程序 应用程序可以注册到 gcm 并将其注册 ID 存储到我服务器上的数据库中 我正在使用 php 来发送推送通知 但是当 google 将其发送到我的设备时 意图服务发现其
  • 更简单的推送通知,也许询问服务器是否有?

    我正在开发一个IDE 作为管理员 我可以向我的所有客户 移动设备 发送通知 我一直在搜索并找到 GCM 和其他服务 我想知道是否有任何更简单的解决方案 我考虑过每 1 小时从所有客户端 移动设备 向我的服务器发起一次休息呼叫 以检查是否有新
  • 应用程序被终止时未收到推送

    我正在使用新的 FCM 将消息从我的服务器推送到我的 Android 应用程序 to APA91bHun4MxP5egoKMwt2KZFBaFUH 1RYqx data Nick Mario Room PortugalVSDenmark 我
  • 投票与推送 - 有什么理由避免推送通知?

    我刚刚作为 技术 产品经理继承了一个 Android 应用程序项目 该项目使用5 秒计时器轮询远程 URL查看应用程序启动的某些工作是否已完成 我最初的反应当然是建议用推送 通知机制替换它 最好是Android内置的GCM 这样工作就从手机
  • Android VOIP 应用程序在 Doze 模式下的行为

    我正在 Android 上开发旧版 VOIP 应用程序 它目前不使用 Google Cloud Messaging 技术 只是永远保留自己的 TCP 连接 最近 谷歌推出了 Android M 预览版打瞌睡模式 https develope
  • 如何在 Android 上保持在后台监听推送通知

    我正在研究 Android 中的推送通知 现在的问题是 我想在应用程序启动后立即在后台运行推送通知 因为我不知道服务器何时将数据推送到设备 主要要求是我们的企业应用程序有超过 10 个活动 并且根据收到的通知 我必须将相关活动置于前台 以便
  • 使用 smack 库在 JAVA 中实现 GCM CCS (XMPP)。与 gcm.googleapis.com 连接失败

    我正在尝试使用 GCM 在 android 客户端和 java 中的服务器应用程序之间进行通信 我正在使用基于 XMPP 的 GCM 因为我需要异步 双向消息 在我的客户端 1 Google Play 服务检查显示需要更新 google p
  • Android GCM 向服务器发送令牌

    The GCM 示例项目 https github com googlesamples google services blob master android gcm app src main java gcm play android s
  • 我应该在我的活动中缓存来自 SharedPreferences 的数据吗?

    我正在开发一个基于 GCM 的应用程序 用户可以在其中订阅多个主题 我需要知道用户在两个地方订阅了哪些主题 主要活动 展示Subscribe or Unsubscribe用户界面中的按钮 GCM 侦听器服务 通过以下方式过滤消息并处理 过时
  • 如何在 Android 的这个特定用例中实现 MQTT?

    我的用例 登录到我的应用程序的用户应该能够向在另一台 Android 设备上登录到该应用程序的自己发送消息 如果用户拥有多个设备 那么一旦他打开该消息 其他设备上的通知必然会消失 Doubts 如何跨设备向特定用户发送数据 我了解如何使用
  • GCM 条款和条件

    有谁知道在哪里可以找到有关哪些内容可以通过 GCM 通知发送以及哪些内容不可以发送的条款和条件 我似乎在任何地方都找不到任何文档 当您注册开设 Google API 帐户时 您会得到这些条款和条件 https developers goog
  • GCM 卷曲操作超时

    我的服务器上存储了几个负责 GCM 操作的 php 文件 它们似乎在需要时工作得很好 但它们经常返回一个错误 指出 卷曲错误 操作在 0 毫秒后超时 0 中的 0 收到的字节数 这是服务器的问题还是我的 GCM 代码的问题 下面是我的 ph
  • Android GCM主题订阅限制

    随着 android gcm 中主题的引入 我正在评估此选项 以简化保持服务器与某些订阅同步所需要做的工作 不过我在文档中读到主题的使用仅限于 100 万个订阅 这是否意味着您不能拥有超过 100 万个用户 具有一个或多个主题 或者您只能订
  • 设备收到 GCM Android 通知但未显示

    尽管通知已在应用程序本身中注册 但我的 Ionic Android 应用程序的 GCM Cloud 消息通知未出现在我的设备的主屏幕中 我正在使用 npm 模块node gcm https www npmjs com package nod
  • Android 的 GCM 推送通知[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 最近 我尝试学习 GCM 并制作一个测试应用程序 该应用程序将通过 androids 官方网站获取 an
  • 使用 Asp.Net 的 GCM 推送通知

    正如您可能已经看到的 Google 正在迁移其推送通知系统 http developer android com guide google gcm c2dm html http developer android com guide goo
  • GCM 向主题发送消息:TOO_MANY_TOPICS 错误

    以前 GCM 每个应用程序有 100 万个主题订阅的限制 我发现他们现在已经取消了这一限制 基于发布 订阅模型 主题消息支持 每个应用程序无限订阅 https developers google com cloud messaging to

随机推荐

  • Spring Security 令牌身份验证 - RESTful JSON 服务

    我希望将 Spring Security 用于 Spring MVC 应用程序 该应用程序严格来说是一个 JSON Web 服务 我做了一些研究并阅读了一些文章 但还没有真正找到完整的内容 我希望应用程序完全无状态并使用基于令牌的身份验证
  • Azure 持久编排功能触发两次

    我正在尝试实现 Azure Durable Function 工作流程 每隔 6 分钟 我就会有一个 Azure TimerTrigger 函数调用一个 Azure Orchestration Function OrchestrationT
  • 在 CodeIgniter 中发送数据和重定向

    我有一个简单的 C CRUD 函数 我想发送一条消息 错误或成功 以及来自我编写的 插入 函数的重定向 有没有办法通过重定向来附加 POST 字段 在伪代码中我有 function view all set up some initial
  • python读取大型二进制文件最有效的方法是什么

    我有一个大 21 GB 文件 我想将其读入内存 然后传递给一个子例程 该子例程对我透明地处理数据 我在 Centos 6 5 上使用 python 2 6 6 因此无法升级操作系统或 python 目前 我正在使用 f open image
  • Git 克隆中的 Ansible 和 Git 权限被拒绝(公钥)

    我有一本剧本 我试图从私人存储库 GIT 克隆到服务器 我已经设置了 ssh 转发 当我 ssh 进入服务器并尝试从同一存储库手动克隆时 它成功工作 但是 当我使用 ansible 将存储库克隆到服务器时 它失败并显示 权限被拒绝公钥 这是
  • Threejs 变换矩阵排序

    我想知道 Threejs 如何对多个矩阵进行排序 例如 var mesh new THREE Mesh geometry material mesh position set 0 20 0 T transform matrix mesh r
  • XML 模式 xs:alternative 在 JSON 模式中是否可用?

    是否可以在 JSON Schema 中使用替代方案 在 XSD 中 这可以使用xs alternative元素 例如参见 如何在 XML Schema 1 1 中使用替代方案 https stackoverflow com question
  • 交叉编译器默认包含路径设置

    首先 一些背景知识 我正在尝试在 Beagleboard xM 上编写 Android 驱动程序和应用程序 我已经下载了他们的 Android 开发套件 安装了它 并且可以使用以下指示成功构建其中的所有内容http processors w
  • 纱线全局命令在 Mac 上失败

    我正在尝试使用纱线添加 vtex 但出现以下错误 Usage Error The yarn global commands have been removed in 2 x consider using yarn dlx or a thir
  • 带有 Vue 项目路由的 Azure 静态 Web 应用程序无法正常工作

    我有一个使用 Azure Static Web App 部署的 vue 项目 项目包含路由器 历史模式 功能 它在本地运行完美 但部署到 Azure 路径链接后无法正常工作 例如 当我尝试从浏览器导航访问 mysite com about
  • 我可以在 C 或 C++ 中使用二进制文字吗?

    我需要使用二进制数 我尝试写 const char x 00010000 但这没有用 我知道我可以使用与以下值相同的十六进制数00010000 但我想知道 C 中是否有二进制数的类型 如果没有 是否有其他解决方案可以解决我的问题 如果您使用
  • 恢复域对象的最佳方法

    这是一个如此简单而常见的场景 我想知道到目前为止我是如何做到的以及为什么现在遇到问题 我有这个对象 基础设施程序集的一部分 public class Queue public class QueueItem public QueueItem
  • 使用 JavaScript 测试 url 可用性

    是否可以通过 jQuery 或纯 JavaScript 测试另一个域上的网页是否可用 我尝试使用 ajax 调用获取响应标头 但无论我测试自己的域之外的哪个网站 我都会收到错误 那么我的服务器上真的需要代理脚本吗 或者我可以跳过该请求吗 是
  • 如何为邮递员请求生成未来的日期和时间

    name IronMan phone number 555555555 number of guest 10 tables 2 reservation start at 2020 10 15T10 00 00 861873Z reserva
  • 按行组合 pandas 数据帧的有效方法

    我有 14 个数据框 每个数据框有 14 列和超过 250 000 行 数据框具有相同的列标题 我想按行合并数据框 我尝试将数据帧连接到 不断增长的 数据帧 这需要几个小时 本质上 我做了如下 13 次这样的事情 DF pd DataFra
  • 应用“文本溢出:省略号;”到内部 div

    I have a div structure similar to following image 我需要应用 文本溢出 省略号 在较小的窗口中使用此 div 结构中的文本 图 2 但它并没有像我预期的那样适用 这是我的 HTML 代码 h
  • Android 的所选项目选择器不起作用

    我有一个列表视图 我想在其中以自定义方式突出显示所选项目 我正在设置适配器中的每个项目属性getView方法 包括itemView setSelected true 主布局通过以下方式定义列表视图
  • C# 比较两个不同对象的列表[重复]

    这个问题在这里已经有答案了 I saw 比较两个 List 的最快方法 https stackoverflow com questions 12795882 quickest way to compare two list但我很难使其适应我
  • 级联空引用异常检查?

    有没有办法在 C 中进行通用级联空引用检查 我想要实现的是 如果我试图访问一个字符串变量 它是类 C 的一部分 而类 C 又在类 B 中 而类 B 又在 A 中 ABC str 如果我传入 A 我必须检查 A 是否为空 然后检查 B 是否为
  • 使用 smack 库的 GCM NoResponseException:回复超时内未收到响应

    我是 gcm 新手 我尝试使用 Smack API 连接到 GCM 的云连接服务器 XMPP 一开始还好 我的代码 uid 123456789 apiKey A B XMPPTCPConnectionConfiguration Builde