本文介绍如何通过声网即时通讯 IM(环信) SDK 管理好友关系,包括添加、同意、拒绝、删除、查询好友,以及管理黑名单,包括添加、移出、查询黑名单。文中简称为即时通讯。
声网即时通讯 SDK 提供 ContactManager
类,用于管理好友关系,包含核心方法如下:
addContact
:申请添加好友。acceptInvitation
:同意好友申请。declineInvitation
:拒绝好友申请。deleteContact
:删除好友。getAllContactsFromServer
:从服务器获取好友列表。addUserToBlackList
:添加黑名单。removeUserFromBlackList
:删除黑名单。getBlackListFromServer
:从服务器获取黑名单列表。开始前,请确保满足以下条件:
本节展示如何在项目中管理好友关系。
// 设置待添加的好友的用户名和添加原因。
ChatClient.getInstance().contactManager().addContact(toAddUsername, reason);
// 同意添加 username 为好友。
ChatClient.getInstance().contactManager().acceptInvitation(username);
// 拒绝添加 username 为好友。
ChatClient.getInstance().contactManager().declineInvitation(username);
当接收方同意或者拒绝添加好友后,发送方收到 onFriendRequestAccepted
或者 onFriendRequestDeclined
回调。 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) { }
});
参考如下示例代码,调用 deleteContact
删除指定用户名的好友。删除成功后,被删除方收到 onContactDeleted
回调。
ChatClient.getInstance().contactManager().deleteContact(username);
从服务器获取好友列表并存储到本地数据库后,你可以从本地数据库获取好友列表。
//从服务器获取好友列表
List<String> usernames = ChatClient.getInstance().contactManager().getAllContactsFromServer();
//从本地数据库获取好友列表
List<String> usernames = ChatClient.getInstance().contactManager().getContactsFromLocal
将指定用户加入黑名单后,对方将无法向你发送消息,但你仍然可以向对方发送消息。本节展示如何在项目中管理黑名单。
黑名单部分主要功能是获取黑名单列表,加入进黑名单,从黑名单移出等。获取黑名单可从服务器获取黑名单列表,也可从本地数据库获取已保存的黑名单列表。
- 黑名单是与好友关系是两个独立体系,你可以将任何用户加入黑名单,不论该用户是否与你是好友关系。
- 如果你将好友加入黑名单,该用户仍然在你的好友列表中。
参考如下代码,将指定用户加入黑名单:
// 将 username 加入黑名单。
ChatClient.getInstance().contactManager().addUserToBlackList(username,true);
参考如下代码,将指定用户移出黑名单:
ChatClient.getInstance().contactManager().removeUserFromBlackList(username);
参考如下代码,从服务器获取黑名单列表:
ChatClient.getInstance().contactManager().getBlackListFromServer();
从服务器获取到黑名单列表后,参考如下代码,从本地数据库获取黑名单列表:
ChatClient.getInstance().contactManager().getBlackListUsernames();