如何使用 Smack 在 XMPP 服务器中按名称搜索注册用户? [英] How to search registered users by name in XMPP server with Smack?

查看:35
本文介绍了如何使用 Smack 在 XMPP 服务器中按名称搜索注册用户?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 asmack 库在 Android 中开发聊天应用程序.我正在使用 EJABBERD XMPP 服务器.我已经完成了一些功能,包括登录、注册和名册条目等,

I'm working on developing chat application in Android with asmack library. I'm using EJABBERD XMPP server. I have done some functionality including login, registration and roster entries etc.,

现在我想从 XMPP 服务器搜索注册用户以发送好友请求.我用谷歌搜索并尝试了一些代码,但仍然没有成功.

Now i want to search Registered users from XMPP server to send Buddy request. I googled and tried some codes but still not get succeed.

我正在使用以下代码从 XMPP 服务器搜索用户.

I'm using the following code, to Search the user from XMPP server.

UserSearchManager userSearchManager = new UserSearchManager(connection);
Form searchForm = userSearchManager.getSearchForm("search." + connection.getServiceName());
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer("Name", true);
answerForm.setAnswer("search", "test"); // here i'm passsing the Text value to search

ReportedData resultData;
resultData = userSearchManager.getSearchResults(answerForm, "search."+ connection.getServiceName());

Iterator<Row> it = resultData.getRows();
Row row = null;
while (it.hasNext()) {
    String value = it.next().toString();
    Log.i("Iteartor values......", " " + value);
    System.out.println("Jabber_id :" + row.getValues("jid").next().toString());
    System.out.println("Name :" + row.getValues("Name").next().toString());
    row = it.next();
}

当我执行上述代码时.我在 LogCat 中收到以下错误.

When i execute the above Code. I'm getting the following error in LogCat.

service-unavailable(503)

    at org.jivesoftware.smackx.search.UserSearch.getSearchForm(UserSearch.java:84)

    at org.jivesoftware.smackx.search.UserSearchManager.getSearchForm(UserSearchManager.java:73)

需要进行哪些更改才能获得搜索结果?

What changes need to be made to make to get the search results?

ejabberd.cfg

%%%   =======
%%%   MODULES

%%
%% Modules enabled in all ejabberd virtual hosts.
%%
{modules,
 [
  {mod_adhoc,    []},
  {mod_announce, [{access, announce}]}, % requires mod_adhoc
  {mod_caps,     []},
  {mod_configure,[]}, % requires mod_adhoc
  {mod_admin_extra, []},
  {mod_disco,    []},
  %%{mod_echo,   [{host, "echo.localhost"}]},
  {mod_irc,      []},
  %% NOTE that mod_http_fileserver must also be enabled in the
  %% "request_handlers" clause of the "ejabberd_http" listener
  %% configuration (see the "LISTENING PORTS" section above).
  %%{mod_http_fileserver, [
  %%                       {docroot, "/var/www"}, 
  %%                       {accesslog, "/var/log/ejabberd/access.log"}
  %%                      ]},
  {mod_last,     []},
  {mod_muc,      [
          %%{host, "conference.@HOST@"},
          {access, muc},
          {access_create, muc},
          {access_persistent, muc},
          {access_admin, muc_admin},
          {max_users, 500}
         ]},
  %%{mod_muc_log,[]},
  {mod_offline,  [{access_max_user_messages, max_user_offline_messages}]},
  {mod_privacy,  []},
  {mod_private,  []},
  {mod_proxy65,  [
          {access, local},
          {shaper, c2s_shaper}
         ]},
  {mod_pubsub,   [ % requires mod_caps
          {access_createnode, pubsub_createnode},
          {pep_sendlast_offline, false},
          {last_item_cache, false},
          %%{plugins, ["default", "pep"]}
          {plugins, ["flat", "hometree", "pep"]}  % pep requires mod_caps
         ]},
  {mod_register, [
          %%
          %% After successful registration, the user receives
          %% a message with this subject and body.
          %%
          {welcome_message, {"Welcome!",
                     "Welcome to a Jabber service powered by Debian. "
                     "For information about Jabber visit "
                     "http://www.jabber.org"}},
          %% Replace it with 'none' if you don't want to send such message:
          %%{welcome_message, none},

          %%
          %% When a user registers, send a notification to
          %% these Jabber accounts.
          %%
          %%{registration_watchers, ["admin1@example.org"]},

          {access, register}
         ]},
  {mod_roster,   []},
  %%{mod_service_log,[]},
  %%{mod_shared_roster,[]},
  {mod_stats,    []},
  {mod_time,     []},
  {mod_vcard,    []},
  {mod_version,  []}
 ]}.

推荐答案

由于 ejabberd 的默认配置是将搜索服务保留在 vjud.example.com 上,而不是 search.example.com,您需要更改此行:

As the default configuration of ejabberd is to keep the search service on vjud.example.com, not search.example.com, you'd need to change this line:

Form searchForm = userSearchManager.getSearchForm("search." + connection.getServiceName());

到此:

Form searchForm = userSearchManager.getSearchForm("vjud." + connection.getServiceName());

这篇关于如何使用 Smack 在 XMPP 服务器中按名称搜索注册用户?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆