Skip to content Skip to sidebar Skip to footer

Android Smack Library Subscription(not Showing Inbond Or Outbond Notifications)

I am working on an android chat application in which i am using smack library for instant messaging everything is working fine but the huge problem is in subscription. How to send

Solution 1:

Okay, I toiled hard at this for a couple of days and finally got things working. I have implemented it with a manual subscription mode (ie. user needs to accept another user's request manually).

The server keeps pushing subscribe request to the user (upon re-login) if the user hasn't sent a subscribed or unsubscribed back. So what you can do is save the incoming subscribe requests locally in a list and display that as a "friend request list" for manual accept/reject. If your application gets restarted (and hence re-connects to server), the server will push subscribe requests again.

This is how it works:

  • User1 sends subscribe presence to User2.
  • Roster entry gets automatically created in User1's roster (but not in User2's roster).
  • User2 receives subscribe request from User1.
  • User2 sends back a subscribed presence to User2 (User2 > User1 subscription complete).
  • User2 checks if User1 is in User2's roster. User1 is not in User2's roster. User2 sends back a subscribe presence to User1.
  • Roster entry gets automatically created in User2's roster.
  • User1 receives subscribe presence from User2.
  • User1 checks if User2 is in User1's roster. User2 is in User1's roster. User1 sends back a subscribed presence to User2 (User2 > User1 subscription complete).

    finalPresencenewPresence= (Presence) packet;
            final Presence.TypepresenceType= newPresence.getType();
            finalStringfromId= newPresence.getFrom();
            finalRosterEntrynewEntry= getRoster().getEntry(fromId);
    
            if (presenceType == Presence.Type.subscribe)
            {
                //from new userif (newEntry == null)
                {
                    //save request locally for later accept/reject//later accept will send back a subscribe & subscribed presence to user with fromId//or accept immediately by sending back subscribe and unsubscribed right now
                }
                //from a user that previously accepted your requestelse
                {
                    //send back subscribed presence to user with fromId
                }
            }
    

Solution 2:

In order to receive subscription requests, you must:

1) Send presence:

<presence/>

2) Retrieve roster:

<iq type='get'id='roster1'>
  <query xmlns='jabber:iq:roster'/>
</iq>

First-time client writers are often surprised by the second one.

Solution 3:

you can not send subscription like that, do it this way:

Presencesubscription=newPresence(
               Presence.Type.subscribe);
       subscription.setTo(CurrentUser+"@reza-hp");
       subscription.setPriority(24);
       newp.setMode(Presence.Mode.available);
       connection.sendPacket(subscription);

Post a Comment for "Android Smack Library Subscription(not Showing Inbond Or Outbond Notifications)"