2016-07-01 6 views
2

Ich versuche zu FCM mit der Klaps Bibliothek verbinden:Falsche Ausnahme Codierung, wenn sie FCM mit Smack Bibliothek verbinden

Hier ist, was ich versucht habe. Es funktioniert, aber ich bekomme eine Ausnahme, wenn die Verbindung versucht, sich anzumelden.

new Thread(new Runnable(){ 
XMPPTCPConnectionConfiguration.Builder configBuilder =  XMPPTCPConnectionConfiguration.builder(); 
private Handler umm; 
@Override 
public void run() { 
         configBuilder.setSecurityMode(XMPPTCPConnectionConfiguration.SecurityMode.disabled); 
configBuilder.setServiceName("fcm-xmpp.googleapis.com"); 
configBuilder.setHost("fcm-xmpp.googleapis.com");//MAYBE PROBLEM HERE?? 
configBuilder.setPort(5236); 
configBuilder.setCompressionEnabled(false); 
configBuilder.setSendPresence(true); 
         configBuilder.setSocketFactory(SSLSocketFactory.getDefault()); 
InterfaceClass.FCMconnection = new XMPPTCPConnection(configBuilder.build()); 
umm = yes; 

try { 
InterfaceClass.FCMconnection.connect(); 
Log.v("pony", "white horse"); 
//InterfaceClass.FCMloggin.start(); 
android.os.Message y4 = android.os.Message.obtain(); 
y4.what = LOGINTOFCM; 
umm.sendMessage(y4); 
//the rest of the thread is just exception handling in catch clauses 

Sobald mein Handler empfängt die Nachricht, die ich mit der Verbindung einzuloggen versuchen wie folgt aus:

try {      FCMconnection.login("[email protected]","SERVER_KEY"); 
Log.d("black","r2d2"); 
} catch (XMPPException e) {//exception thrown here 
e.printStackTrace(); 
Log.d("black","maity "+e); 

ich folgende excecption erhalten: „smack.sasl.SASLErrorException: SASLError mit X-OAuth2 : incorrect- encoding "

Jetzt aus der Dokumentation heißt es klar zu implementieren SASL einfachen Mechanismus, , aber ich weiß nicht wie? Hier ist, was die Dokumentation sagt:

„Die Verbindung hat zwei wichtige Anforderungen:..

Sie müssen einen Transport Layer Security (TLS) Verbindung initiieren Beachten Sie, dass CCS zur Zeit nicht die Erweiterung STARTTLS unterstützen CCS erfordert einen SASL PLAIN-Authentifizierungsmechanismus unter Verwendung von @ gcm.googleapis.com (FCM-Absender-ID) und des Serverschlüssels als Kennwort, wobei die Absender-ID und der Serverschlüssel die Werte sind, die Sie bei der Konfiguration Ihrer Client-App erhalten haben für Ihre Plattform für Informationen zum Erhalt dieser Anmeldeinformationen. "

Hat jemand eine Idee, was könnte diese Ausnahme verursachen? Wie sollte ich eine Verbindung zu FCM mit der Smack-Bibliothek herstellen?

Vielen Dank für einen Hinweis.

Antwort

1

Per Dokumentation zu FCM über XMPP-Protokoll anschließen muss:

1) TLS-Verbindung in der Transportschicht, diese Erweiterung SSL-Kontext mit TLS-Protokoll

2) Plain SASL-Protokoll zu erreichen, schaffen, stellen Sie sicher, „Smack -sasl-javax-4.1.8.jar "ist in Ihrem Build-Setup integriert. Das hat mir viel Zeit

herauszufinden

3) Host-Service-Name und die Portnummer korrekt ist (Code-Schnipsel unten siehe)

Below Codeausschnitt funktioniert perfekt für mich:

SSLContext sslContext = null; 
try { 
    sslContext = SSLContext.getInstance("TLS"); 
    sslContext.init(null, null, null); 
} catch (Exception e) { 
    //Failed to get default ssl context with TLS enabled... something can't proceed further 
} 
XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder(); 
config.setConnectTimeout(CONNECTION_TIMEOUT); 
config.setSendPresence(true); 
config.setCustomSSLContext(sslContext); 
config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 
config.setServiceName("gcm.googleapis.com"); 
config.setHost("fcm-xmpp.googleapis.com"); 
config.setPort(5236);//not production server 
config.setDebuggerEnabled(true); 
config.setCompressionEnabled(true); 
config.setSocketFactory(sslContext.getSocketFactory()); 
(mConnection = new XMPPTCPConnection(config.build())).addConnectionListener(ConnectionSession.this); 
mConnection.setPacketReplyTimeout(REPLY_TIMEOUT); 
mConnection.connect(); 
mConnection.login(userID, password); //use your app server credential here 

Smack Version 4.8.1 implementiert und getestet von Openfire Setup.

Hoffe, dass diese jemandem helfen !!

Verwandte Themen