通过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();
我假设即使其他设置不正确(例如登录),我至少应该能够通过此流消息并建立各种连接。
答案 0 :(得分:1)
Google文档中存在一些关于这种情况的混淆:
CCS需要传输层安全性(TLS)连接。这意味着 XMPP客户端必须启动TLS连接。
与agsXMPP相关,这意味着UseSSL
而不是UseStartTLS
。我都设置为true,但UseStartTLS
将UseSSL
设置为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();