Wie setzt / bekommen Profildaten mit XMPP mit Smack
Frage
Ich arbeite an einem XMPP-Client auf Android, die Smack-Bibliothek. Die Liste / Messaging / Anwesenheit Zeug ist sehr gut läuft. Allerdings habe ich nicht einen Weg finden, zusätzliche Profilinformationen (userpicture, die Hunde Name, ...) zu speichern.
Die einzige Möglichkeit, die ich von googeln sehen ist VCards verwenden. Aber es hat einfach nicht funktionieren. Ich habe versucht, die folgenden:
VCard vCard = new VCard();
vCard.load(connection);
vCard.setEmailHome("meine_home@email.de");
vCard.setLastName("Scheller");
vCard.setField("blafasel", "asdf");
vCard.save(connection);
Dann wurde ich auf der Suche nach einer Möglichkeit, dass VCard Informationen anzuzeigen. Es hat weder zeigen in iChat noch in diesem System.out:
vCard.load(connection, user);
System.out.println(user + " has this vCard: " + vCard.toXML());
So etwas schief gelaufen ist, aber Theres keinen Hinweis darauf, was es war. Ich habe versucht, dies mit dem Google-Talk-Server und meine eigenen Kopie von Openfire mit dem gleichen Ergebnis. Btw, ich diese Version von Smack bin mit: http://davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/
Was mache ich hier falsch? Was ist der richtige Weg, Profil zu speichern bezogenen Informationen mit Smack?
Lösung
Ich habe die Quelle von Smack ausgecheckt und ging durch die wichtigen Teile mit einem Debugger, sowie die Smack Debug-Fenster. Das Problem ist in der VCard Umsetzung des
Es sieht auch, wenn es irgendeine registriert ist IQProvider in dem Provider. Und dies ist die Wurzel meines Problems. Es gibt keine IQProvider für VCards registriert. Also, was Informationen ist innerhalb des vCard-Tag einfach fallen gelassen wird. Es ist nicht allzu schwer, diese IQProvider zu registrieren aber: Dies löste mein kleines Beispiel über meine eigene vCard zum Speichern und es erneut herunterzuladen. Ich bin immer noch Probleme mit anderen Benutzern der Herunterladen vcards ... gonna hat eine näher in diesen aussieht und vielleicht einen anderen Thread zu diesem Thema öffnen. ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider());
Andere Tipps
Sie können den folgenden Code verwenden, Informationen zu erhalten.
VCard card = new VCard();
card.load(connection, "user@fqdn");
System.out.println("Voice: "+card.getPhoneHome("VOICE"));
Versuchen Sie es mit einem anderen Client eine vCard für diesen Benutzer zuerst einstellen und sehen, wie das Ihre Ergebnisse ändert. Um weiter zu diagnostizieren, müssen Sie auf Protokoll Debuggen in Smack (use „-Dsmack.debugEnabled=true
“ auf einem Desktop-Rechner) drehen, und posten die entsprechenden Bits hier.