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

Posted

技术标签:

【中文标题】AGSXMPP 与 Google Cloud Connection (GCM) 断开连接【英文标题】:AGSXMPP disconnects with Google Cloud Connection (GCM) 【发布时间】:2013-07-16 14:31:37 【问题描述】:

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

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

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

发送的内容:

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

请注意,在 Google 文档中,流是自关闭的 &lt;stream /&gt;,因为 AGSMMP 没有发送此信息 - 不确定它是否有影响。

使用wireshark,我可以看到消息是以流的形式发送的,Google 会通过TCP Reset 响应该消息-然后关闭连接。

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();

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

【问题讨论】:

你实现登录了吗? @BarbarosAlp 是的,在将 UseSSL 设置为 true 并将 UseStartTLS 设置为 false 之后 - 我能够登录。 我刚才发现了一些东西,你可以设置没有“@gcm.googleapis.com”后缀的用户名。现在 OnAuthError 被解雇并说项目未列入白名单。所以我填写了表格并将其发送到谷歌。你已经填好了表格,对吧?谢谢 【参考方案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();

【讨论】:

以上是关于AGSXMPP 与 Google Cloud Connection (GCM) 断开连接的主要内容,如果未能解决你的问题,请参考以下文章