Above seems to return “unavailable” for all the users that found in a roster, but I know in fact one of the user is available. Is there setting am I missing?
Question 2) Is there way to query roster(list of user in a group) without performing a login? I simply want to display a custom Chat client where we retrict only group of user to chat with. The only solution I can see i I have to create a hidden user in that group in order to get the roster of all other member in the list. Is there a better way?
For your question, you might want to put in a timer for waiting while the roster receives all of its presence events from Aim/Yahoo. Put a five second wait between loggin in and calling getPresence()
I added 5 sec delay(I even tried 10), but still get “unavaliable” status What’s more strange is that I am able to see the connecting user: “myuser” shows up in my other loggined user group list as ONLINE(using Spark client), but just my code on other hand, can’t see anyone online.
If it helps, here are my system info: Smack3.0.4 with Openfire 3.4.2 on a MacOSX10.5 system.
Ahh!!! I finally figured out to my own Question1!! Roster.getPresence(user) requires not only just the username, but the complete JID(with the ‘@domain’ part!). Ofcouse adding a delay as Badiib said also helps. This topic seems to come up a lot here, perhaps someone can update the doc on http://www.igniterealtime.org/builds/smack/docs/latest/documentation/roster.html???
Now, I am still waiting on my Question2 answer. Anyone has any suggestions for me please
Question 2) Is there way to query roster(list of user in a group) without performing a login? I simply want to display a custom Chat client where we retrict only group of user to chat with. The only solution I can see i I have to create a hidden user in that group in order to get the roster of all other member in the list. Is there a better way?
Would you really want anyone to be able to read anyones roster? You have to identify yourself and be authenticated to be allowed access.
For your requirement, maybe a server-side plugin is more appropriate.
I am passing the complete JID to getPresence and also adding a delay between getting the roster and getting the presence of all contacts in the roster. But i still get presence as unavailable for all contacts. Any suggestions?!
Another thing to check: Make sure you have a subscription established between the current account and the user you are trying to get the presence for. You will not be able to get presence information until the subscriptions are approved by both accounts.
Thank you for ur reply. The subscriptions are taken care of. I am facing this problem only when the clients are connected to a server on a remote PC. A server on the local machine returns all the presences without a problem. I am using the same clients in both the cases.