AGSXMPP与Google Cloud Connection(GCM)断开连接

时间:2013-07-16 14:31:37

标签: xmpp google-cloud-messaging agsxmpp

通过XMPP连接到Google Cloud Connection Server(http://developer.android.com/google/gcm/ccs.html),以便向Android设备发送/接收通知。

在.NET4.5控制台应用程序中使用AGSXMPP(编写本文时的最新版本)进行测试。

但是,在发送开始XML后立即关闭连接。我找不到任何解释。

发送了什么:

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

请注意,在Google文档中,流是自动关闭的<stream />,因为AGSXMPP尚未发送此消息 - 不确定它是否有所作为。

使用wireshark,我可以看到消息是在流中发送的,Google通过TCP重置进行响应 - 然后关闭连接。

xmpp = new XmppClientConnection
         {
            UseSSL = true,
            UseStartTLS = true,
            Server = "gcm.googleapis.com",
            ConnectServer = "gcm.googleapis.com",
            Port = 5235,
            Username = "<SENDER ID>@gcm.googleapis.com",
            Password = <KEY>,
            AutoResolveConnectServer = false,
            SocketConnectionType = SocketConnectionType.Direct,
            KeepAlive = true,
         };

xmpp.Open();

我假设即使其他设置不正确(例如登录),我至少应该能够通过此流消息并建立各种连接。

1 个答案:

答案 0 :(得分:1)

Google文档中存在一些关于这种情况的混淆:

  

CCS需要传输层安全性(TLS)连接。这意味着   XMPP客户端必须启动TLS连接。

与agsXMPP相关,这意味着UseSSL而不是UseStartTLS。我都设置为true,但UseStartTLSUseSSL设置为false。 Google会在非SSL连接上关闭连接。将UseStartTLS设置为false(即使文档讨论使用TLS连接启动) - 将允许建立SSL连接,并且连接可以正常设置。

工作代码:

xmpp = new XmppClientConnection
         {
            UseSSL = true,
            UseStartTLS = false,
            Server = "gcm.googleapis.com",
            ConnectServer = "gcm.googleapis.com",
            Port = 5235,
            Username = "<SENDER ID>@gcm.googleapis.com",
            Password = <KEY>,
            AutoResolveConnectServer = false,
            SocketConnectionType = SocketConnectionType.Direct,
            KeepAlive = true,
         };

xmpp.Open();