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 文档中,流是自关闭的 <stream />
,因为 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,但 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();
【讨论】:
以上是关于AGSXMPP 与 Google Cloud Connection (GCM) 断开连接的主要内容,如果未能解决你的问题,请参考以下文章
使用 GCloud 模拟器的 Google Cloud PubSub V1
Cloud Function 部署问题以安排每日 Cloud SQL 导出到 Google Cloud Storage
Google Cloud Storage Bucket 未与 DNS 记录上的 CNAME 相关联,因为我的域使用我的域作为来源