一、功能描述
如果你需屏蔽某人的消息,可以把该用户拉入黑名单。
二、拉黑某人
你可以调用 addToBlackList (Java / Swift / Objective-C / C++) 接口把某用户加入黑名单,即拉黑该用户。
如果你事先调用 addFriendListener 添加了监听器,拉黑后会触发 onBlackListAdded 回调。
注意:说明:
注意:1. 如果用户 A 与用户 B 之间存在好友关系,拉黑后默认会解除双向好友关系,二者之间无法发起会话、无法发起加好友请求。
注意:2. 如果你希望在拉黑后,仍然保留用户之间的好友关系,可以登录 即时通信 IM 控制台 编辑“拉黑配置”,配置路径:消息服务 Chat > 功能配置 > 好友与关系链 > 拉黑配置。
被拉黑的用户默认不会感知到 “被拉黑” 的状态,消息发送后不会返回已被对方拉黑的错误码。
如果你希望被拉黑的用户在发消息时返回 “已被对方拉黑” 的错误提示,可以登录 即时通信 IM 控制台 关闭 “黑名单检查”。关闭后,被拉黑的用户在发送消息时,SDK 会报 20007 错误码。配置路径为:消息服务 Chat > 功能配置 > 登录与消息 > 黑名单检查。
示例代码如下:
JavaSwiftObjective-CC++List<String> userIDList = new ArrayList<>();userIDList.add("user1");userIDList.add("user2");V2TIMManager.getFriendshipManager().addToBlackList(userIDList, new V2TIMValueCallback<List<V2TIMFriendOperationResult>>() { @Override public void onSuccess(List<V2TIMFriendOperationResult> v2TIMFriendOperationResults) { // 拉黑成功 } @Override public void onError(int code, String desc) { // 拉黑失败 }});// 监听黑名单列表新增通知V2TIMManager.getFriendshipManager().addFriendListener(new V2TIMFriendshipListener() { @Override public void onBlackListAdd(List<V2TIMFriendInfo> infoList) { // 黑名单列表新增通知 }});V2TIMManager.shared.addToBlackList(userIDList: ["user1", "user2"]) { resultList in print( "addToBlackList succ")} fail: { code, desc in print( "addToBlackList fail, \\(code), \\(desc)")}V2TIMManager.shared.addFriendListener(listener: self)func onBlackListAdded(infoList: Array<V2TIMFriendInfo>) { print( infoList)}// 拉黑某人[[V2TIMManager sharedInstance] addToBlackList:@[@"user1", @"user2"] succ:^(NSArray<V2TIMFriendOperationResult *> *resultList) { // 拉黑成功} fail:^(int code, NSString *desc) { // 拉黑失败}];// 监听黑名单列表新增通知[[V2TIMManager sharedInstance] addFriendListener:self];- (void)onBlackListAdded:(NSArray<V2TIMFriendInfo *>*)infoList { // 黑名单列表新增通知}template <class T>class ValueCallback final : public V2TIMValueCallback<T> {public: using SuccessCallback = std::function<void(const T&)>; using ErrorCallback = std::function<void(int, const V2TIMString&)>; ValueCallback() = default; ~ValueCallback() override = default; void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) { success_callback_ = std::move(success_callback); error_callback_ = std::move(error_callback); } void OnSuccess(const T& value) override { if (success_callback_) { success_callback_(value); } } void OnError(int error_code, const V2TIMString& error_message) override { if (error_callback_) { error_callback_(error_code, error_message); } }private: SuccessCallback success_callback_; ErrorCallback error_callback_;};V2TIMStringVector userIDList;userIDList.PushBack(u8"user1");userIDList.PushBack(u8"user2");auto callback = new ValueCallback<V2TIMFriendOperationResultVector>{};callback->SetCallback( [=](const V2TIMFriendOperationResultVector& friendOperationResultList) { // 拉黑成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 拉黑失败 delete callback; });V2TIMManager::GetInstance()->GetFriendshipManager()->AddToBlackList(userIDList, callback);// 监听黑名单列表新增通知class FriendshipListener final : public V2TIMFriendshipListener {public: void OnBlackListAdded(const V2TIMFriendInfoVector& infoList) override { // 黑名单列表新增通知 } // 其他成员 …};// 添加关系链事件监听器,注意在移除监听器之前需要保持 friendshipListener 的生命期,以免接收不到事件回调FriendshipListener friendshipListener;V2TIMManager::GetInstance()->GetFriendshipManager()->AddFriendListener(&friendshipListener);
三、解除拉黑
你可以调用 deleteFromBlackList (Java / Swift / Objective-C / C++) 将某用户从黑名单中移除,移除后可正常发起加好友请求、发起会话。
如果你事先调用 addFriendListener 添加了监听器,解除拉黑后会触发 onBlackListDeleted 回调。
示例代码如下:
JavaSwiftObjective-CC++List<String> userIDList = new ArrayList<>();userIDList.add("user1");userIDList.add("user2");V2TIMManager.getFriendshipManager().deleteFromBlackList(userIDList, new V2TIMValueCallback<List<V2TIMFriendOperationResult>>() { @Override public void onSuccess(List<V2TIMFriendOperationResult> v2TIMFriendOperationResults) { // 解除拉黑成功 } @Override public void onError(int code, String desc) { // 解除拉黑失败 }});// 监听黑名单列表删除通知V2TIMManager.getFriendshipManager().addFriendListener(new V2TIMFriendshipListener() { @Override public void onBlackListDeleted(List<String> userList) { // 黑名单列表删除通知 }});// 解除拉黑V2TIMManager.shared.deleteFromBlackList(userIDList: ["user1"]) { resultList in print( "deleteFromBlackList succ")} fail: { code, desc in print( "deleteFromBlackList fail, \\(code), \\(desc)")}V2TIMManager.shared.addFriendListener(listener: self)func onBlackListDeleted(userIDList: Array<String>) { print( userIDList)}// 解除拉黑[[V2TIMManager sharedInstance] deleteFromBlackList:@[@"user1", @"user2"] succ:^(NSArray<V2TIMFriendOperationResult *> *resultList) { // 解除拉黑成功} fail:^(int code, NSString *desc) { // 解除拉黑失败}];// 监听黑名单列表删除通知[[V2TIMManager sharedInstance] addFriendListener:self];- (void)onBlackListDeleted:(NSArray*)userIDList { // 黑名单列表删除通知}template <class T>class ValueCallback final : public V2TIMValueCallback<T> {public: using SuccessCallback = std::function<void(const T&)>; using ErrorCallback = std::function<void(int, const V2TIMString&)>; ValueCallback() = default; ~ValueCallback() override = default; void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) { success_callback_ = std::move(success_callback); error_callback_ = std::move(error_callback); } void OnSuccess(const T& value) override { if (success_callback_) { success_callback_(value); } } void OnError(int error_code, const V2TIMString& error_message) override { if (error_callback_) { error_callback_(error_code, error_message); } }private: SuccessCallback success_callback_; ErrorCallback error_callback_;};V2TIMStringVector userIDList;userIDList.PushBack(u8"user1");userIDList.PushBack(u8"user2");auto callback = new ValueCallback<V2TIMFriendOperationResultVector>{};callback->SetCallback( [=](const V2TIMFriendOperationResultVector& friendOperationResultList) { // 解除拉黑成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 解除拉黑失败 delete callback; });V2TIMManager::GetInstance()->GetFriendshipManager()->DeleteFromBlackList(userIDList, callback);// 监听黑名单列表删除通知class FriendshipListener final : public V2TIMFriendshipListener {public: void OnBlackListAdded(const V2TIMFriendInfoVector& infoList) override { // 黑名单列表删除通知 } // 其他成员 …};// 添加关系链事件监听器,注意在移除监听器之前需要保持 friendshipListener 的生命期,以免接收不到事件回调FriendshipListener friendshipListener;V2TIMManager::GetInstance()->GetFriendshipManager()->AddFriendListener(&friendshipListener);
四、获取黑名单列表
你可以通过 getBlackList (Java / Swift / Objective-C / C++) 查看已拉黑多少用户,并对黑名单人员进行管理。
示例代码如下:
JavaSwiftObjective-CC++V2TIMManager.getFriendshipManager().getBlackList(new V2TIMValueCallback<List<V2TIMFriendInfo>>() { @Override public void onSuccess(List<V2TIMFriendInfo> v2TIMFriendInfos) { // 获取黑名单列表成功 } @Override public void onError(int code, String desc) { // 获取黑名单列表失败 }});V2TIMManager.shared.getBlackList { infoList in infoList.forEach { item in // V2TIMFriendInfo print( item.description) }} fail: { code, desc in print( "getBlackList fail, \\(code), \\(desc)")}// 获取黑名单列表[[V2TIMManager sharedInstance] getBlackList:^(NSArray<V2TIMFriendInfo *> *infoList) { // 获取黑名单列表成功} fail:^(int code, NSString *desc) { // 获取黑名单列表失败}];template <class T>class ValueCallback final : public V2TIMValueCallback<T> {public: using SuccessCallback = std::function<void(const T&)>; using ErrorCallback = std::function<void(int, const V2TIMString&)>; ValueCallback() = default; ~ValueCallback() override = default; void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) { success_callback_ = std::move(success_callback); error_callback_ = std::move(error_callback); } void OnSuccess(const T& value) override { if (success_callback_) { success_callback_(value); } } void OnError(int error_code, const V2TIMString& error_message) override { if (error_callback_) { error_callback_(error_code, error_message); } }private: SuccessCallback success_callback_; ErrorCallback error_callback_;};auto callback = new ValueCallback<V2TIMFriendInfoVector>{};callback->SetCallback( [=](const V2TIMFriendInfoVector& friendInfoList) { // 获取黑名单列表成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 获取黑名单列表失败 delete callback; });V2TIMManager::GetInstance()->GetFriendshipManager()->GetBlackList(callback);