AGSXMPP отключается с помощью Google Cloud Connection (GCM)
Подключение через XMPP к Google Cloud Connection Server ( http://developer.android.com/google/gcm/ccs.html) с целью отправки / получения уведомлений на устройства Android.
Использование AGSXMPP (последняя версия на момент написания) в консольном приложении.NET4.5 для тестирования.
Однако сразу после отправки открывающего 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();
Я предполагаю, что даже если другие настройки неверны (например, логин), я должен хотя бы быть в состоянии обойти это потоковое сообщение и установить своего рода соединение.
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();