使用ejabberd添加nick字段以注册新的xmpp用户名

时间:2018-06-05 11:09:37

标签: xmpp ejabberd

我想从客户端发送“nick”字段,以便在ejabberd中注册新的用户名。但是服务器只将用户名,密码和说明字段发送回客户端进行填写。我已检查下面的mod_register来修改这些字段,但没有提供。

https://docs.ejabberd.im/admin/configuration/#mod-register

2018-05-29 23:01:08.426 [debug] <0.4613.3>@xmpp_socket:send:218 (tls|<0.4613.3>) Send XML on stream = <<"
<iq xml:lang='en' from='xmpp.test.in' type='result' id='mCbQBXKp-Sd4'>
    <query xmlns='jabber:iq:register'>
        <username/>
        <password/>
        <instructions>Choose a username and password to register with this server</instructions>
    </query>
</iq>">>

有没有人可以帮我解决如何将尼克纳入注册本身?

1 个答案:

答案 0 :(得分:0)

如果您使用Android的Smack客户端,您可以在createAccount方法中发送其他属性,如:

public void signup(String user, String password, String nickname) throws SmackInvocationException {
    connect();

    Map<String, String> attributes = new HashMap<String, String>();
    attributes.put("name", nickname);
    try {
        AccountManager.getInstance(con).createAccount(user, password, attributes);
    } catch (Exception e) {
        throw new SmackInvocationException(e);
    }
}

另一种方法是使用Vcard和VcardManager并在smack中设置昵称(登录或注册后):

    private Context context;
    private XMPPConnection con;

    public SmackVCardHelper(Context context, XMPPConnection con) {
        this.context = context;
        this.con = con;
    }

    public void save(String nickname) throws SmackInvocationException {
        VCard vCard = VCardManager.getInstanceFor(connection).loadVCard();

        try {
            vCard.setNickName(nickname);
            vCard.saveVCard(vcard);
        } catch (Exception e) {
            throw new SmackInvocationException(e);
        }
    }