2013-09-04 9 views
7

Ich möchte einen bestimmten Freund aus meiner Chat-Liste mit XMPP blockieren. Code funktioniert gut. Es gibt keine Ausnahme, aber ich kann einen Benutzer nicht blockieren. Ich benutze Open Fire Server. Welche Änderungen sollte ich am Server vornehmen?Problem beim Blockieren von Benutzer in Chatliste mit Smack und Öffnen Feuerserver

Kannst du Leute eine Idee haben?

Mein Code:

public void XMPPAddNewPrivacyList(Connection connection, String userName) { 

    String listName = "newList"; 

    // Create the list of PrivacyItem that will allow or 
    // deny some privacy aspect 

    List<PrivacyItem> privacyItems = new Vector<PrivacyItem>(); 

    PrivacyItem item = new PrivacyItem(PrivacyItem.Type.jid.toString(), 
      false, 1); 
    item.setValue(userName); 
    privacyItems.add(item); 

    // Create the new list. 

    try { 
     PrivacyListManager privacyManager = new PrivacyListManager(connection); 
     privacyManager = PrivacyListManager 
       .getInstanceFor(connection); 
     privacyManager.createPrivacyList(listName, privacyItems); 

    } catch (XMPPException e) { 
     System.out.println("PRIVACY_ERROR: " + e); 
    } 
} 
+0

hallo ich PrivacyListManager.getInstanceFor (Verbindung) als null bin immer. Bitte hilf mir, ich kann nicht verstehen, warum es so null wird. –

+0

Hallo, es funktioniert gut in Java, aber ich bekomme eine Ausnahme in asmack. Ich weiß, wo das Problem ist, können Sie mir den Vormund für Datenschutzliste Code für mich geben. –

Antwort

0

Ich denke, dass das Problem eine der folgenden sein sollte:

  • Username nicht korrekt ist, zum Beispiel "[email protected]".
  • Sie nicht für die Privatsphäre Änderungen hören Ich meine, du hast die PrivacyListListener Schnittstelle nicht implementieren.
  • Im PrivacyItem-Konstruktor sollten Sie nicht PrivacyRule.JID statt PrivacyItem.Type.jid.toString()? Verwenden.
  • Wenn Sie einen Freund blockieren möchten, sollten Sie updatePrivacyList statt createPrivacyList verwenden.

Ich empfehle Sie in der Dokumentation einen genaueren Blick Smack documentation

+0

Hi astinx, bitte posten Sie einen funktionierenden Code zum Blockieren des Benutzers. Ich habe ein Problem mit dem Blockieren des Benutzers. Ich erhalte PrivacyListManager .getInstanceFor (Verbindung) Rückkehr mir null.Please helfen –

+0

Leider können wir schon vor langer Zeit die XMPP Tech begraben. Wir sind jetzt ein Knoten ist ein viel besserer Ansatz, viel schneller und zuverlässig, wir hatten einen Chat mit fast 2000-Benutzer verwenden, XMMP könnte diese Anforderung nicht verarbeiten. – 4gus71n

3

try this ...

public boolean blockFriend(String friendName) { 

    PrivacyItem item=new PrivacyItem(PrivacyItem.Type.jid,friendName, false, 7); 
    PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(connection); 
    List<PrivacyItem> list=new ArrayList<PrivacyItem>(); 
    list.add(item); 

    try { 
     privacyManager.updatePrivacyList(NEWLIST, list); 
     privacyManager.setActiveListName(NEWLIST); 
     return true; 
    } catch (SmackException.NoResponseException |XMPPException.XMPPErrorException | SmackException.NotConnectedException e) { 
     e.printStackTrace(); 
     return false; 
    } 


} 

und für unblock nur falsch ersetzen gilt Aufgabe privacyitem `

0
// Here function for block user on xmpp 

    public boolean blockUser(String userName) { 

    String jid = [email protected] 
    String listName = "public"; 

    // Create the list of PrivacyItem that will allow or 
    // deny some privacy aspect 

    //ArrayList privacyItems = new ArrayList(); 

    List<PrivacyItem> privacyItems = new Vector<PrivacyItem>(); 


    PrivacyItem item = new PrivacyItem(PrivacyItem.Type.jid, jid, false, 1); 
    // item.setValue(userName); 
    item.setFilterIQ(false); 
    item.setFilterMessage(false); 
    item.setFilterPresenceIn(false); 
    item.setFilterPresenceOut(false); 

    privacyItems.add(item); 

    // Get the privacy manager for the current connection. 

    // Create the new list. 
    PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(XMPPUtils.INSTANCE.connection); 


    try { 
     privacyManager.updatePrivacyList(listName, privacyItems); 
     privacyManager.setActiveListName(listName); 

     return true; 
    } catch (Exception e) { 
     Log.e("PRIVACY_ERROR: ", " " + e.toString()); 
     e.printStackTrace(); 
    } 

    return false; 
} 
0

Datenschutz ist eine Methode für Benutzer, die Kommunikation von bestimmten anderen Benutzern zu blockieren. In XMPP geschieht dies durch die Verwaltung der eigenen Datenschutzlisten.

1 - Um eine neue Liste im Server hinzuzufügen, kann der Kunde implementieren so etwas wie:



    // Create a privacy manager for the current connection._ 
    PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection); 
    // Retrieve server privacy lists_ 
    PrivacyList[] lists = privacyManager.getPrivacyLists(); 

2 - Um eine neue Liste im Server hinzuzufügen, kann der Kunde etwas implementieren wie :

// Set the name of the list_ 
String listName = "newList"; 

// Create the list of PrivacyItem that will allow or deny some privacy aspect_ 
String user = "[email protected]"; 
String groupName = "enemies"; 
ArrayList privacyItems = new ArrayList(); 

PrivacyItem item = new PrivacyItem(PrivacyItem.Type.jid, user, true, 1); 
privacyItems.add(item); 

item = new PrivacyItem(PrivacyItem.Type.subscription, PrivacyItem.SUBSCRIPTION_BOTH, true, 2); 
privacyItems.add(item); 

item = new PrivacyItem(PrivacyItem.Type.group, groupName, false, 3); 
item.setFilterMessage(true); 
privacyItems.add(item); 

// Get the privacy manager for the current connection._ 
PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection); 
// Create the new list._ 
privacyManager.createPrivacyList(listName, privacyItems);