كيفية تعيين / احصل على بيانات الملف الشخصي باستخدام XMPP باستخدام Smack

StackOverflow https://stackoverflow.com/questions/1838770

  •  12-09-2019
  •  | 
  •  

سؤال

أنا أعمل على عميل XMPP على Android، باستخدام مكتبة Smack. القائمة / المراسلة / الوجود الاشياء تعمل بشكل جيد للغاية. ومع ذلك، لم أجد طريقة لتخزين معلومات ملف تعريف إضافية (UserPicture، اسم الكلاب، ...).

الطريقة الوحيدة التي أراها من Googling تستخدم 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());

لذلك حدث خطأ ما، ولكن ليس هناك أي إشارة إلى ما كان عليه. حاولت هذا مع خادم جوجل Talk ونسختي الخاصة من Openfire بنفس النتيجة. راجع للشغل، أنا أستخدم هذا الإصدار من Smack: http://davanum.wordpress.com/2007/12/31/Android-just-use-uss-pi-pi-for-xmpp/

ماذا أفعل الخطأ هنا؟ ما هي الطريقة الصحيحة لتخزين المعلومات المتعلقة بالملف الشخصي مع Smack؟

هل كانت مفيدة؟

المحلول

لقد قمت بفحص مصدر Smack وذهب من خلال الأجزاء المهمة مع مصحح الأخطاء، وكذلك استخدام نافذة Debug Smack. المشكلة داخل تنفيذ vCard لل smack api.. وبعد إن حفظ VCARD يعمل كما هو موضح، ومع ذلك يتم كسر التحميل.

PARSEIQ (XMLPullParser Parser) هو جزء من فئة Packetreader.java وتعالج أنواع مختلفة من الحزم. تعالج فقط العلامات مع مساحات الأسماء التالية:

"Jabber: IQ: AUTH"، "Jabber: IQ: قائمة"، Jabber: IQ: سجل "،" Urn: IETF: Params: XML: NS: XMPP-BIND "

يبدو أيضا إذا كان هناك أي IQProvider مسجلة في Providermanager. وهذا هو جذر مشكلتي. لا يوجد IQProvider ل VCards المسجلة. لذلك مهما كانت المعلومات داخل علامة 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 لهذا المستخدم مع عميل آخر أولا، ومعرفة كيفية تغيير نتائج نتائجك. من أجل التشخيص، ستحتاج إلى تشغيل تصحيح البروتوكول في صفعة (استخدام "-Dsmack.debugEnabled=true"على آلة سطح المكتب)، ونشر البتات ذات الصلة هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top