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) 断开连接的主要内容,如果未能解决你的问题,请参考以下文章

使用 GCloud 模拟器的 Google Cloud PubSub V1

Cloud Function 部署问题以安排每日 Cloud SQL 导出到 Google Cloud Storage

Google Cloud Storage Bucket 未与 DNS 记录上的 CNAME 相关联,因为我的域使用我的域作为来源

agsxmpp 以编程方式创建用户帐户

Google Cloud Firestore 与 Google Cloud Spanner 的区别?

Google Cloud Compute Engine 是不是与 Google Cloud SQL 分开