2016-08-02 6 views
2

Я делаю чат-приложение с smack. Я новичок в этой технологии.Создание нового пользователя с Smack 4.2.0-beta1 на ejabberd throws XMPP Исключение: запрещено - auth

Я создал некоторых пользователей ручного управления с сервера Ejabberd. Используя этих пользователей, я сделал один-один чат и групповой чат.

Но я пытался создать нового пользователя от андроида кода Но я получаю это ниже ошибки

XMPPError: forbidden - auth 
    08-02 08:23:36.273 31097-31097/com.agarangroup.hello W/System.err:  at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:232) 
    08-02 08:23:36.273 31097-31097/com.agarangroup.hello W/System.err:  at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:207) 

Это конфигурация я имею в ejabberd сервере

announce [{allow,[{acl,admin}]}] 
c2s [{deny,[{acl,blocked}]},{allow,[{acl,all}]}] 
c2s_shaper [{none,[{acl,admin}]},{normal,[all]}] 
configure [{allow,[{acl,admin}]}] 
local [{allow,[{acl,all}]}] 
max_user_offline_messages [{5000,[{acl,admin}]},{100,[all]}] 
max_user_sessions [{10,[all]}] 
muc_create [{allow,[{acl,all}]}] 
pubsub_createnode [{allow,[{acl,local}]}] 
register [{allow,[{acl,all}]}] 
s2s_shaper [{fast,[all]}] 
trusted_network [{allow,[{acl,loopback}]}] 

Обновлено:

Здесь я инициализирую свое соединение

private void initialiseConnection() { 
     DomainBareJid serviceName = null; 
     try { 
      serviceName = JidCreate.domainBareFrom(ServiceAddress); 
     } catch (XmppStringprepException e) { 
      e.printStackTrace(); 
     } 
     XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration 
       .builder().setKeystoreType(null); 
     // XMPPTCPConnectionConfiguration.builder().setKeystoreType(null); 

     config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 
     config.setServiceName(serviceName); 
     config.setHost(serverAddress); 
     config.setPort(5222); 
     config.setDebuggerEnabled(true); 
     XMPPTCPConnection.setUseStreamManagementDefault(true); 
     connection = new XMPPTCPConnection(config.build()); 
     XMPPConnectionListener connectionListener = new XMPPConnectionListener(); 
     connection.addConnectionListener(connectionListener); 
    } 

Я связь это соединение после инициализации

connection.connect(); 
        DeliveryReceiptManager dm = DeliveryReceiptManager 
          .getInstanceFor(connection); 
        dm.setAutoReceiptMode(AutoReceiptMode.always); 
        dm.addReceiptReceivedListener(new ReceiptReceivedListener() { 
         @Override 
         public void onReceiptReceived(Jid fromJid, Jid toJid, String receiptId, Stanza receipt) { 

         } 
        }); 
        connected = true; 

Method создать пользователя

public void createNewUser(){ 
     try { 
      /* UserRegisterUtil.registerAccount(connection,"Mathan","[email protected]"); 
      connection.disconnect(); 
      connection.connect();*/ 
      Localpart lp = Localpart.from("IamHere"); 
      // Registering the user 
      AccountManager accountManager = AccountManager.getInstance(connection); 
      accountManager.sensitiveOperationOverInsecureConnection(true); 
      accountManager.createAccount(lp, "mathan123"); // Skipping optional fields like email, first name, last name, etc.. 
      Toast.makeText(context, "=>User creation completed....", 
        Toast.LENGTH_LONG).show(); 
      Log.d("xmpp", ">User creation completed....!"); 
     } catch (SmackException.NoResponseException e) { 
      e.printStackTrace(); 
     } catch (XMPPException.XMPPErrorException e) { 
      e.printStackTrace(); 
     } catch (NotConnectedException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (XMPPException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (SmackException e) { 
      e.printStackTrace(); 
     } 
    } 

Это ошибка, я получил это говорит Отказано ACL. Но я не знаю, как изменить его в windows ejabberd server.

<error code='403' type='auth'><forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/><text xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>Denied by ACL</text></error> 

Может кто-нибудь сказать мне, как создать нового пользователя, что я хочу изменить в этом файле конфигурации?

Также у меня есть некоторые сомнения

Как получить сообщения в автономном режиме в андроида с помощью привкусом библиотеки?

Как получить историю чата?

ответ

0

О создании пользователя: Сначала вам нужно подключиться (а не подключиться к сети) и связаться с нами.

Более того, все имя пользователя должно быть в нижнем регистре:

accountManager.createAccount(lp.toLowerCase(), "mathan123"); 


О оффлайновых сообщений: они отправляются, когда пользователь будет выходить в интернет

Об истории чата: извините, у меня нет Expirience с Ejabber, но для обычного чата 1vs1 вам, вероятно, нужно будет хранить на клиенте или добавлять на сервер какую-либо пользовательскую функцию (например, Openfire).

+0

Я уже подключился к серверу. Также я изменил имя пользователя в маленьком письме, но он говорит то же самое. :( – MathaN

+0

Я обновил свой вопрос, вы можете посмотреть на него :) @MrPk – MathaN

+0

это больше похоже на проблему Ejabber + ACL (LDAP?), Однако может быть интересно прочитать часть при подключении к серверу – MrPk