即时通讯 IM SDK 提供用户关系管理功能,包括好友列表管理和黑名单管理:
即时通讯 IM SDK 提供 ContactManager
类可以实现以下功能:
开始前,请确保满足以下条件:
本节介绍如何利用即时通讯 IM SDK 提供的方法管理好友。
本节介绍如何发送好友请求、处理好友请求、监听好友事件等。
调用 addContact
方法添加指定用户为好友:
//需设置好友的用户 ID 和添加好友的原因。
ChatClient.getInstance().contactManager().addContact(toAddUsername, reason);
请监听与好友请求相关事件的回调,这样当用户收到好友请求,可以调用接受请求的 RESTful API 添加好友。服务器不会重复下发与好友请求相关的事件,建议退出应用时保存相关的请求数据。设置监听示例代码如下:
ChatClient.getInstance().contactManager().setContactListener(new ContactListener() {
// 对方同意了好友请求。
@Override
public void onFriendRequestAccepted(String username) { }
// 对方拒绝了好友请求。
@Override
public void onFriendRequestDeclined(String username) { }
// 接收到好友请求。
@Override
public void onContactInvited(String username, String reason) { }
// 好友被删除。
@Override
public void onContactDeleted(String username) { }
// 好友已添加。
@Override
public void onContactAdded(String username) { }
});
收到 onContactInvited
回调后,调用 acceptInvitation
或 declineInvitation
接受或拒绝好友请求。
// 同意好友请求。
ChatClient.getInstance().contactManager().acceptInvitation(username);
// 拒绝好友请求。
ChatClient.getInstance().contactManager().declineInvitation(username);
当你同意或者拒绝后,对方会收到 onContactAgreed
或 onContactRefused
回调。
删除好友时会同时删除对方好友列表中的该用户,建议执行双重确认,以免发生误删操作。删除操作不需要对方同意或者拒绝。
ChatClient.getInstance().contactManager().deleteContact(username);
调用 deleteContact
删除好友后,对方会收到 onContactDeleted
回调。
要获取好友列表,你可以调用 getAllContactsFromServer
方法从服务器获取好友列表。之后,你还可以调用 getContactsFromLocal
方法从本地数据库中获取好友列表。
// 从服务器获取好友列表。
List<String> usernames = ChatClient.getInstance().contactManager().getAllContactsFromServer();
// 从本地数据库获取好友列表。
List<String> usernames = ChatClient.getInstance().contactManager().getContactsFromLocal
你可以调用 addUserToBlackList
将指定用户添加到黑名单。你仍然可以向黑名单用户发送聊天消息,但无法接收来自他们的消息。
用户可以将任何其他聊天用户添加到他们的黑名单列表中,无论该用户是否是好友。添加到黑名单列表的好友保留在好友列表中。
ChatClient.getInstance().contactManager().addUserToBlackList(username,true);
你可以调用 removeUserFromBlackList
将用户从黑名单移除,示例代码如下:
ChatClient.getInstance().contactManager().removeUserFromBlackList(username);
你可以调用 getBlackListFromServer
从服务器获取黑名单用户的列表。
ChatClient.getInstance().contactManager().getBlackListFromServer();
从服务器获取到黑名单列表后,还可以调用 getBlackListUserNames
从本地数据库中获取黑名单列表。
ChatClient.getInstance().contactManager().getBlackListUsernames();