1

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

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

但是,在发送打开的 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 />,因为 AGSSMPP 没有发送这个 - 不确定它是否有所作为。

使用wireshark,我可以看到消息是在一个流中发送的,谷歌用一个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();

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

4

1 回答 1

1

Google 文档中对这种气味存在一些混淆:

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

关于 agsXMPP,这意味着UseSSL而不是UseStartTLS. 我都设置为真,但UseStartTLS设置UseSSL为假。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();
于 2013-07-16T17:24:12.943 回答