Search code examples
firebasepush-notificationxmppfirebase-cloud-messaginggloox

Send PUSH notification to Google Firebase by Gloox XMPP library


I'm try to send the PUSH notification to android device as the guide(https://firebase.google.com/docs/cloud-messaging/server#connecting), I'm using the Gloox library to send it, but the server respond me some unreadable data(\x15\x3\x1 ) from google server and failed to parse:

log: level: 0, area: 8, This is gloox 1.0.20, connecting to fcm-xmpp.googleapis.com:5236...
log: level: 0, area: 32, Connecting to fcm-xmpp.googleapis.com (64.233.188.188:5236)
log: level: 0, area: 32, Connected to fcm-xmpp.googleapis.com (64.233.188.188:5236)
log: level: 0, area: 262144, <stream:stream to="gcm.googleapis.com" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">
log: level: 2, area: 8, parse error (at pos 0): 

Solution

  • I got it solved, that is because the Firebase doesn't support "STARTTLS", but the GLOOX enabled "STARTTLS"(send XML before the TLS handshake) by default.

    We should use below code to disable "STARTTLS":

        JID jid("[email protected]");
        j = new Client(jid, "AAAAADMKj3w:APA9178fdsksW-0rDT0dTu1rMoO0N30J_KldYx9XsQ86fd3540bTIR9e54wDLpU0TWdPf8DnsBRZH-YEc5rtHuRMJRPE_92bcKkLNT42JQ-9fzLJW1yu34r89diWiBS6Rt6_56WzUUmJarc2WCDzz2Tj");    
        j->setServer("fcm-xmpp.googleapis.com");
        j->setConnectionImpl(new ConnectionTLS(j, new ConnectionTCPClient(j->logInstance(), "fcm-xmpp.googleapis.com", 5236), j->logInstance()));
        j->setPort( 5236 ); // For release will be 5235  // The TLS and SASL default is enabled
        j->setTls( TLSOptional );
        j->setSasl(true);
        j->registerConnectionListener(this);
        j->registerMessageSessionHandler(this, 0);
        j->disco()->setVersion("PortSIP PBX", "9.0");
        j->disco()->setIdentity("PushSender", "Sender");
        j->disco()->addFeature(XMLNS_CHAT_STATES);