Habe gcm ccs für Chat-Modul implementiert und ich kann Nachrichten senden und empfangen. Im Folgenden finden Sie die Hauptanschlussmodul,Smack 4.1.0 GCM CCS reagiert nicht mehr nach einer Weile
config = XMPPTCPConnectionConfiguration.builder()
.setServiceName("gcm-pesu.googleapis.com")
.setPort(GCM_PORT)
.setHost(GCM_SERVER)
.setCompressionEnabled(false)
.setConnectTimeout(30000)
.setSecurityMode(SecurityMode.ifpossible)
.setSendPresence(false)
.setSocketFactory(SSLSocketFactory.getDefault())
.build();
connection = new XMPPTCPConnection(config);
connection.connect();
Roster roster = Roster.getInstanceFor(connection);
roster.setRosterLoadedAtLogin(false);
connection.addConnectionListener(new LoggingConnectionListener());
// Handle incoming packets
connection.addAsyncStanzaListener(new MyStanzaListener(), new MyStanzaFilter());
// Log all outgoing packets
connection.addPacketInterceptor(new MyStanzaInterceptor(), new MyStanzaFilter());
connection.login(mProjectId + "@gcm.googleapis.com", mApiKey);
logger.info("logged in: " + mProjectId);
PingManager pm = PingManager.getInstanceFor(connection);
pm.setPingInterval(300);
pm.pingMyServer();
pm.registerPingFailedListener(new PingFailedListener() {
@Override
public void pingFailed() {
connection.disconnect();
logger.error("GCM CCS, Ping failed !!");
}
});
Das Problem, das ich in leite wird keine Nachricht von GCM empfängt, nach einer gewissen Zeit von Clientgerät gesendet. Allerdings sieht der Herzschlag normal aus und ich bekomme auch in diesem Fall Pong von GCM. Hat das etwas mit SSL zu tun?
Haben Verbindung Trockenlegung Fall wie folgt behandelt,
String controlType = (String) jsonObject.get("control_type");
volatile boolean connectionDraining = false;
if ("CONNECTION_DRAINING".equals(controlType)) {
connectionDraining = true;
try {
connection.disconnect();
connect();
connectionDraining = false;
} catch (Exception e) {
logger.error("Error establishing new connection after draining ", e);
}
}
Haben auch die Verbindung Drainage-Logik implementiert.Haben hinzugefügt, dass in dem oben genannten Beitrag überprüfen Sie bitte, ob das korrekt ist. – Itachi
Wenn Sie eine CONNECTION_DRAINING-Nachricht erhalten, sollten Sie sofort damit beginnen, Nachrichten an eine andere CCS-Verbindung zu senden und ggf. eine neue Verbindung zu öffnen. Sie sollten jedoch die ursprüngliche Verbindung offen lassen. ... Schließen Sie die Verbindung nicht, starten Sie eine neue und warten Sie, bis die alte Verbindung von Google geschlossen wird. –