문제

Smack 라이브러리를 사용하여 Android의 XMPP 클라이언트에서 작업하고 있습니다. 명단/메시징/존재 물건이 매우 잘 진행되고 있습니다. 그러나 추가 프로필 정보 (userPicture, Dogs Name, ...)를 저장하는 방법을 찾지 못했습니다.

인터넷 검색에서 볼 수있는 유일한 방법은 vcards를 사용하는 것입니다. 그러나 그것은 단순히 작동하지 않았습니다. 다음을 시도했습니다.

        VCard vCard = new VCard();
        vCard.load(connection);
        vCard.setEmailHome("meine_home@email.de");
        vCard.setLastName("Scheller");
        vCard.setField("blafasel", "asdf");
        vCard.save(connection);

그런 다음 VCARD 정보를 볼 방법을 찾고있었습니다. ICHAT 나이 시스템에 나타나지 않았습니다.

        vCard.load(connection, user);
        System.out.println(user + " has this vCard: " + vCard.toXML());

그래서 무엇이든 잘못되었지만 그것이 무엇인지 징후는 없습니다. Google 토크 서버와 동일한 결과로 OpenFire 사본으로 이것을 시도했습니다. BTW, 나는이 버전의 smack을 사용하고 있습니다. http://davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/

여기서 내가 뭘 잘못하고 있니? Smack과 함께 프로필 관련 정보를 저장하는 올바른 방법은 무엇입니까?

도움이 되었습니까?

해결책

Smack의 소스를 확인하고 Debugger와 Smack 디버그 창을 사용하여 중요한 부품을 통과했습니다. 문제는 VCARD 구현 내부입니다 Smack API. VCARD를 저장하는 것은 설명대로 작동하지만 로딩은 고장납니다.

parseiq (xmlpullparser parser)는 packetreader.java 클래스의 일부이며 다양한 유형의 패키지를 처리합니다. 다음 네임 스페이스가있는 태그 만 처리합니다.

"Jabber : IQ : Auth", "Jabber : IQ : 명단", "Jabber : IQ : Register", "Urn : IETF : PARAMS : XML : NS : XMPP-BIND"

또한 제공자 관리자에 등록 된 IQProvider가있는 경우에도 보입니다. 그리고 이것은 내 문제의 근본입니다. 등록 된 VCARDS 용 IQProvider는 없습니다. 따라서 VCARD 태그 내부에 정보가 무엇이든 간단히 삭제됩니다.

이 IQProvider를 등록하는 것은 그리 어렵지 않습니다.

    ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider());

이것은 내 자신의 vcard를 저장하고 다시 다운로드하기위한 나의 작은 예를 해결했습니다. 나는 여전히 다른 사용자 vcards를 다운로드하는 데 어려움을 겪고 있습니다 ... 이것에 대해 자세히 살펴보고 그 문제에 대한 다른 스레드를 열 것입니다.

다른 팁

다음 코드를 사용하여 정보를 얻을 수 있습니다.

VCard card = new VCard();
card.load(connection, "user@fqdn");
System.out.println("Voice: "+card.getPhoneHome("VOICE"));

먼저 다른 클라이언트를 사용하여 해당 사용자를 위해 vcard를 설정하고 결과가 어떻게 변경되는지 확인하십시오. 더 진단하려면 Smack에서 프로토콜 디버깅을 켜야합니다 (사용”-Dsmack.debugEnabled=true"데스크탑 머신에서), 여기에 관련 비트를 게시하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top