java中的XMPP服务器没有收到来自GCM服务器的所有消息

德米特里

我已经使用 Smack 库实现了 XMPP 服务器,我的服务器从 Google Cloud Messaging 服务器(现在是 Firebase)获取消息,但问题是当我从 android 向 gcm 服务器发送一条消息时,我的 XMPP 服务器只收到第一条消息第二个被拦截,(我只能看到有消息的通知

<message id="gQaM0-6"><gcm xmlns="google:mobile:data">{"message_type":"ack","message_id":"0","to":"eVtypIWW7Q8:APA91bH5oU0AC3zyuCAWVYkMzoGQeIiGe71c2BL4lE5uFHRfB3iPXtD-qIJDmJZ3ySsPDi0VhkKl0Cz3XZG7rWa1Ca7pX9yQqzWSMXBiGK4SEO4Q-Owfr45E_VBJMrXqsSziuJhek"}</gcm></message>

但我没有数据,我在方法 void processPacket(Packet packet) 中得到的第一条消息是 XMPP 服务器的完整代码:

public class XMPPServer implements PacketListener {

    private static XMPPServer sInstance = null;
    private XMPPConnection connection;
    private ConnectionConfiguration config;
    private String mApiKey = null;
    private String mProjectId = null;
    private boolean mDebuggable = false;
    private String fcmServerUsername = null;

    public static XMPPServer getInstance() {
        if (sInstance == null) {
            throw new IllegalStateException("You have to prepare the client first");
        }
        return sInstance;
    }

    public static XMPPServer prepareClient(String projectId, String apiKey, boolean debuggable) {
        synchronized (XMPPServer.class) {
            if (sInstance == null) {
                sInstance = new XMPPServer(projectId, apiKey, debuggable);
            }
        }
        return sInstance;
    }

    private XMPPServer(String projectId, String apiKey, boolean debuggable) {
        this();
        mApiKey = apiKey;
        mProjectId = projectId;
        mDebuggable = debuggable;
        fcmServerUsername = mProjectId + "@" + Util.FCM_SERVER_CONNECTION;
    }

    private XMPPServer() {
        // Add GcmPacketExtension
        ProviderManager.getInstance().addExtensionProvider(Util.FCM_ELEMENT_NAME, Util.FCM_NAMESPACE,
                new PacketExtensionProvider() {

                    @Override
                    public PacketExtension parseExtension(XmlPullParser parser) throws Exception {
                        String json = parser.nextText();
                        GcmPacketExtension packet = new GcmPacketExtension(json);
                        return packet;
                    }
                });
    }

    /**
     * Connects to FCM Cloud Connection Server using the supplied credentials
     */
    public void connect() throws XMPPException {
        config = new ConnectionConfiguration(Util.FCM_SERVER, Util.FCM_PORT);
        config.setSecurityMode(SecurityMode.enabled);
        config.setReconnectionAllowed(true);
        config.setSocketFactory(SSLSocketFactory.getDefault());
        // Launch a window with info about packets sent and received
        config.setDebuggerEnabled(mDebuggable);

        connection = new XMPPConnection(config);
        connection.connect();

        connection.addConnectionListener(new ConnectionListener() {
                //a few overrided methods
        });
        // Handle incoming packets (the class implements the PacketListener)
        connection.addPacketListener(this, new PacketTypeFilter(Message.class));

        // Second message without data I get in this method (1)
        connection.addPacketWriterInterceptor(new PacketInterceptor() {
            @Override
            public void interceptPacket(Packet packet) {
                System.out.println("INTERCEPT PACKAGE: " + packet.toXML());
            }
        }, new PacketTypeFilter(Message.class));
        connection.login(fcmServerUsername, mApiKey);
    }
    /**
     * Normal message with my data I get in this method (2)
     */
    @SuppressWarnings("unchecked")
    @Override
    public void processPacket(Packet packet) {
        Message incomingMessage = (Message) packet;
        GcmPacketExtension gcmPacket = (GcmPacketExtension) incomingMessage.getExtension(Util.FCM_NAMESPACE);
        String json = gcmPacket.getJson();
        System.out.println("Message : " + json);
     }

几乎全代码,最重要的部分我用(1)和(2)标记,(使用搜索快速查找)为什么我只能收到带有我的数据的第一条消息?为什么第二条消息会转到 PacketInterceptor (mark (1) ) ?

泰亚姆

如果您使用Firebase Cloud Messaging(FCM),请检查您的应用服务器是否连接到以下端点:

// Production
fcm-xmpp.googleapis.com:5235

// Testing
fcm-xmpp.googleapis.com:5236

除此之外,您可能还想检查下游消息,其中提到一旦建立 XMPP 连接,CCS 和您的服务器使用正常的 XMPP<message>节来回发送 JSON 编码的消息。的主体<message>必须是:

<gcm xmlns:google:mobile:data>
    JSON payload
</gcm>

此外,请注意常规 FCM 消息的 JSON 有效负载中的异常。访问给定的链接以获取更多信息。

这些相关的 SO 帖子也可能有帮助:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

TCP 客户端(java)没有收到来自 TCP 服务器的消息(C#)

来自分类Dev

没有收到来自服务器的响应:Java.net.SocketException:recvfrom失败:ECONNRESET

来自分类Dev

通过XMPP服务器接收Java服务器上的所有消息

来自分类Dev

通过XMPP服务器接收Java服务器上的所有消息

来自分类Dev

多个POST请求后我没有收到来自服务器的数据

来自分类Dev

TCP 服务器未收到来自 TCP 客户端的消息 (Java)

来自分类Dev

如何知道何时收到来自服务器的响应?

来自分类Dev

无法收到来自远程服务器的响应

来自分类Dev

尽管所有消息均从服务器成功发送,但某些设备仍未收到GCM推送

来自分类Dev

验证客户端是否已收到来自服务器的消息

来自分类Dev

来自Google文档的Java中的Android XMPP服务器

来自分类Dev

gRPC Java 服务器:有没有办法获取从客户端收到的原始消息字节?

来自分类Dev

在重试相同消息之前,GCM CCS等待XMPP服务器的确认有多少时间?

来自分类Dev

我没有从客户端上的服务器收到消息

来自分类Dev

从Java服务器页面中删除所有HTML

来自分类Dev

我收到错误消息:没有DRb服务器正在运行。而是在本地进程中运行

来自分类Dev

使用android中的xmpp从服务器获取所有注册用户

来自分类Dev

来自服务器的 angularjs 响应传递所有 if 语句

来自分类Dev

没有服务器的简单消息应用程序

来自分类Dev

我应该如何在 Java 上部署 XMPP 服务器 GCM 以便 GCM 可以访问它并发送消息?

来自分类Dev

来自GCM服务器的401错误

来自分类Dev

有没有办法查看Hapi服务器中的所有路由

来自分类Dev

服务器收到所有数据,但客户端中HttpSendRequest返回FALSE 12002

来自分类Dev

收到来自IMAP服务器的推送电子邮件

来自分类Dev

如何从Java Restful服务器向GCM服务器发送消息

来自分类Dev

没有我自己的GCM服务器的Android客户端到客户端消息传递

来自分类Dev

GCM XMPP App服务器未收到下游错误

来自分类Dev

插件中的错误使500服务器错误,屏幕或日志中没有错误消息

来自分类Dev

如何将来自服务器的所有响应插入到明确的答案类别中?

Related 相关文章

  1. 1

    TCP 客户端(java)没有收到来自 TCP 服务器的消息(C#)

  2. 2

    没有收到来自服务器的响应:Java.net.SocketException:recvfrom失败:ECONNRESET

  3. 3

    通过XMPP服务器接收Java服务器上的所有消息

  4. 4

    通过XMPP服务器接收Java服务器上的所有消息

  5. 5

    多个POST请求后我没有收到来自服务器的数据

  6. 6

    TCP 服务器未收到来自 TCP 客户端的消息 (Java)

  7. 7

    如何知道何时收到来自服务器的响应?

  8. 8

    无法收到来自远程服务器的响应

  9. 9

    尽管所有消息均从服务器成功发送,但某些设备仍未收到GCM推送

  10. 10

    验证客户端是否已收到来自服务器的消息

  11. 11

    来自Google文档的Java中的Android XMPP服务器

  12. 12

    gRPC Java 服务器:有没有办法获取从客户端收到的原始消息字节?

  13. 13

    在重试相同消息之前,GCM CCS等待XMPP服务器的确认有多少时间?

  14. 14

    我没有从客户端上的服务器收到消息

  15. 15

    从Java服务器页面中删除所有HTML

  16. 16

    我收到错误消息:没有DRb服务器正在运行。而是在本地进程中运行

  17. 17

    使用android中的xmpp从服务器获取所有注册用户

  18. 18

    来自服务器的 angularjs 响应传递所有 if 语句

  19. 19

    没有服务器的简单消息应用程序

  20. 20

    我应该如何在 Java 上部署 XMPP 服务器 GCM 以便 GCM 可以访问它并发送消息?

  21. 21

    来自GCM服务器的401错误

  22. 22

    有没有办法查看Hapi服务器中的所有路由

  23. 23

    服务器收到所有数据,但客户端中HttpSendRequest返回FALSE 12002

  24. 24

    收到来自IMAP服务器的推送电子邮件

  25. 25

    如何从Java Restful服务器向GCM服务器发送消息

  26. 26

    没有我自己的GCM服务器的Android客户端到客户端消息传递

  27. 27

    GCM XMPP App服务器未收到下游错误

  28. 28

    插件中的错误使500服务器错误,屏幕或日志中没有错误消息

  29. 29

    如何将来自服务器的所有响应插入到明确的答案类别中?

热门标签

归档