Comment configurer / obtenir des données de profil avec XMPP en utilisant Smack
Question
Je travaille sur un client XMPP sur Android, en utilisant la bibliothèque Smack. La liste des choses / messagerie / présence est en cours d'exécution très bien. Cependant, je ne l'ai pas trouvé un moyen de stocker des informations de profil supplémentaire (userpicture, le nom de chiens, ...).
La seule façon que je vois de googler utilise VCards. Mais il ne fonctionnait tout simplement pas. J'ai essayé ce qui suit:
VCard vCard = new VCard();
vCard.load(connection);
vCard.setEmailHome("meine_home@email.de");
vCard.setLastName("Scheller");
vCard.setField("blafasel", "asdf");
vCard.save(connection);
Alors que je cherchais un moyen de voir que les informations VCard. Il n'a ni apparaître dans iChat, ni dans ce System.out:
vCard.load(connection, user);
System.out.println(user + " has this vCard: " + vCard.toXML());
Alors quelque chose allait mal, mais theres aucune indication ce qu'elle était. J'ai essayé avec le serveur de Google Talk et ma propre copie de openfire avec le même résultat. BTW, je suis en utilisant cette version de Smack: http://davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/
Qu'est-ce que je fais mal ici? Quelle est la bonne façon de stocker les informations relatives profil avec Smack?
La solution
J'ai vérifié la source de Smack et est passé par les parties importantes avec un débogueur, ainsi que l'utilisation de la fenêtre de débogage Smack. Le problème est dans la mise en œuvre VCard du
Il semble également s'il y a un IQProvider enregistré dans le ProviderManager. Et c'est la racine de mon problème. Il n'y a pas IQProvider pour VCards enregistrés. Donc, quelle que soit l'information est à l'intérieur de la balise vCard obtient simplement abandonné. Il est pas trop difficile d'enregistrer ce IQProvider si: Ceci a résolu mon petit exemple ci-dessus pour sauver ma propre vCard et le télécharger à nouveau. Je suis toujours des problèmes avec le téléchargement d'autres utilisateurs vcards ... allons avoir de plus près cette question et peut-être ouvrir un autre fil pour cette question. ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider());
Autres conseils
Vous pouvez utiliser le code suivant pour obtenir des informations.
VCard card = new VCard();
card.load(connection, "user@fqdn");
System.out.println("Voice: "+card.getPhoneHome("VOICE"));
essayez de définir une vCard pour cet utilisateur avec un autre client d'abord, et voir comment cela change vos résultats. Afin de diagnostiquer plus loin, vous devrez activer le débogage du protocole Smack (utilisation « -Dsmack.debugEnabled=true
» sur une machine de bureau), et afficher les bits correspondants ici.