如何在xmpp中将用户添加到名单?

时间:2015-11-26 04:23:06

标签: android xmpp smack

我使用以下代码成功创建了一个用户:

class CategoriesController < ApplicationController
def new
@page_title= 'Add new Category'
@category= Category.new
end

def create
end

def update
end

def edit
end

def destroy
end

def index
end

def show
end
def category_params 
params.require(:category).permit(:name)
end
end

但是我无法使用以下代码将其他用户添加到登录用户的名单中:

accountmanager = new org.jivesoftware.smack.AccountManager(connection);
accountmanager.createAccount(fbuserid,fbuserid);

我总是将响应视为null。有人请帮我解决这个问题,并提前致谢

1 个答案:

答案 0 :(得分:4)

Rosters and presence使用基于权限的模型,用户必须在将其添加到其他人的名单之前提供权限。这可以确保只有经过批准的用户才能查看其在线信息,从而保护用户的隐私。因此,当您添加新的名单条目时,它将处于待处理状态,直到其他用户接受您的请求。

如果其他用户请求在线订阅,以便他们可以将您添加到他们的名单中,则必须接受或拒绝该请求。 Smack以三种方式之一处理在线订阅请求:

自动接受所有在线订阅请求。 自动拒绝所有在线订阅请求。 手动处理在线订阅请求。可以使用设置模式 Roster.setSubscriptionMode(Roster.SubscriptionMode)方法。简单客户端通常使用其中一种自动订阅模式,而功能齐全的客户端应手动处理订阅请求,并让最终用户接受或拒绝每个请求。如果使用手动模式,则应注册PacketListener,以侦听类型为Presence.Type.subscribe的Presence数据包。

首先在代码中尝试此操作以在名册中添加用户以及请求用户权限。

    roster = Roster.getInstanceFor(connection);
            if (!roster.isLoaded())
                try {
                    roster.reloadAndWait();
                } catch (SmackException.NotLoggedInException e) {
                    Log.i(TAG, "NotLoggedInException");
                    e.printStackTrace();
                } catch (SmackException.NotConnectedException e) {
                    Log.i(TAG, "NotConnectedException");
                    e.printStackTrace();
                }
   roster.createEntry(jID, name, null);

从一个用户登录后,在其他用户端/代码中:

    roster.setSubscriptionMode(Roster.SubscriptionMode.accept_all);

要在线提供用户状态:

    Presence presence = new Presence(Presence.Type.available);
            presence.setStatus("Online, Programmatically!");
            presence.setPriority(24);
            presence.setMode(Presence.Mode.available);
            roster = Roster.getInstanceFor(connection);