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();
Другие вопросы по тегам