首页 > 解决方案 > 如何在 android 上使用 smack 4.3.5 检索用户的真实姓名?

问题描述

在将他添加到我的名册之前,我需要检索用户的真实姓名,但我还没有找到任何方法来做到这一点。你们中的一些人可能会建议我在将他添加到我的名册之前获取用户的真实姓名。 在此处输入图像描述

   roster.addSubscribeListener((from, subscribeRequest) -> {

         //Here I need to get the real name of the user.
    
        return SubscribeListener.SubscribeAnswer.ApproveAndAlsoRequestIfRequired;
    });

标签: androidpluginsopenfiresmack

解决方案


用于在 smack 中检索用户的真实姓名,以便您必须使用 Vcard ( https://xmpp.org/extensions/xep-0054.html ) 管理名称。vCard 是个人用户信息存储的现有且广泛使用的标准,有点像电子名片。

下面的代码使用 XMPP 连接保存 Vcard

fun updateVCard(firstName: String, lastName: String) {
    val vCardManager: VCardManager = VCardManager.getInstanceFor(connection)
    val vCard = VCard()

    vCard.firstName = firstName
    vCard.lastName = lastName
    vCard.setField("FN", firstName)

    try {
        vCardManager.saveVCard(vCard)
        Log.e("updateVCard", "updateVCard: update success")
    } catch (e: Exception) {
        e.printStackTrace()
        Log.e("updateVCard", "updateVCard: error " + e.message)
    }

}

现在此代码用于获取存储在服务器 Vcard 中的用户详细信息

val vCard = getUserDetail(jid); val 用户名 = vCard?.getField("FN") + " " + vCard?.lastName

fun getUserDetail(JID: String): VCard? {
    var jid: EntityBareJid? = null
    var vCard: VCard? = null
    try {
        jid = JidCreate.entityBareFrom(JID)
        vCard = VCardManager.getInstanceFor(connection).loadVCard(jid) as VCard
    } catch (e: java.lang.Exception) {
        e.printStackTrace()
    }
    return vCard
}

推荐阅读