好友关系

更新时间: 2025/05/26 13:35:39

网易云信即时通讯 SDK(NetEase IM SDK,简称 NIM SDK)提供完整的好友关系管理功能,包括添加/删除好友、设置好友信息、查询好友状态和信息等操作。本文将详细介绍如何使用这些功能,以及相关的技术原理和最佳实践。

支持平台

本文内容适用的开发平台或框架如下表所示,涉及的接口请参考下文 相关接口 章节:

安卓 iOS macOS/Windows Web/uni-app/小程序 Node.js/Electron 鸿蒙 Flutter
✔️️️ ✔️️️ ✔️️️ ✔️️️ ✔️️️ ✔️️ ✔️️

技术原理

NIM SDK 支持添加/删除好友,设置好友信息,查询好友状态和信息等操作。好友关系的实现主要主要涉及以下几个方面:

功能 描述
双向好友关系 添加或删除好友时,双方的好友关系都会同步更新。
验证机制 支持直接添加和需要验证的两种添加好友方式。
实时同步 好友关系变更会通过回调机制实时通知应用。
本地缓存 好友列表会在本地缓存,提高查询效率。

添加好友的基本流程如下:

graph LR
    A[用户 A] -->|发起添加好友请求| B{需要验证?}
    B -->|是| C[用户 B 收到申请]
    B -->|否| D[直接添加成功]
    C -->|接受| E[添加成功]
    C -->|拒绝| F[添加失败]
    D --> G[双方收到 onFriendAdded 回调]
    E --> G
    F --> H[用户 A 收到 onFriendAddRejected 回调]

前提条件

在使用好友功能之前,请确保您已完成以下步骤:

  • 已实现 登录 IM
  • 了解 NIM SDK 中好友功能的原理。

注意事项

单个用户的好友数量上限与 IM 套餐相关。若需要调整好友数量上限,请自行前往 网易云信控制台 进行套餐升级。

IM 标准版 IM 高级版 IM 旗舰版 IM 专属版
3000 5000 8000 10000

监听好友相关事件

在进行好友相关操作前,您可以提前注册相关事件。注册成功后,当好友相关事件发生时,SDK 会触发对应回调通知。

注册监听

好友相关回调:

  • onFriendAdded:添加好友成功回调,返回添加成功的好友信息列表。当客户端本端直接添加好友,或者其他端同步添加好友时触发该回调。
  • onFriendDeleted:删除好友回调,返回删除的好友信息。当客户端本端直接删除好友,或者其他端同步删除的好友,或者对方好友删除自己时触发该回调。
  • onFriendAddApplication:申请添加好友回调,返回申请添加为好友的信息。
  • onFriendAddRejected:被对方拒绝好友添加申请的回调,被拒绝的好友申请信息。
  • onFriendInfoChanged:好友信息更新回调,返回变更的好友信息。当客户端本端直接更新的好友信息,或者其他端同步更新好友信息时触发该回调。

示例代码

安卓

调用 addFriendListener 方法注册好友相关监听器,监听添加好友、删除好友、好友信息更新、接受或拒绝好友申请等事件。

JavaNIMClient.getService(V2NIMFriendService.class).addFriendListener(new V2NIMFriendListener() {
    @Override
    public void onFriendAdded(V2NIMFriend friendInfo) {
    }
    @Override
    public void onFriendDeleted(String accountId, V2NIMFriendDeletionType deletionType) {
    }
    @Override
    public void onFriendAddApplication(V2NIMFriendAddApplication applicationInfo) {
    }
    @Override
    public void onFriendAddRejected(V2NIMFriendAddRejection rejectionInfo) {
    }
    @Override
    public void onFriendInfoChanged(V2NIMFriend friendInfo) {
    }
});
iOS

调用 addFriendListener 方法注册好友相关监听器,监听添加好友、删除好友、好友信息更新、接受或拒绝好友申请等事件。

Objective-C[[[NIMSDK sharedSDK] v2FriendService] addFriendListener:self];
- (void)onFriendAdded:(V2NIMFriend *)friendInfo{};
- (void)onFriendDeleted:(NSString *)accountId deletionType:(V2NIMFriendDeletionType)deletionType{}};
- (void)onFriendAddApplication:(V2NIMFriendAddApplication *)application{}};
- (void)onFriendAddRejected:(V2NIMFriendAddRejection *)rejectionInfo{}};
- (void)onFriendInfoChanged:(V2NIMFriend *)friendInfo{}};
macOS/Windows

调用 addFriendListener 方法注册好友相关监听器,监听添加好友、删除好友、好友信息更新、接受或拒绝好友申请等事件。

C++V2NIMFriendListener listener;
listener.onSyncStarted = []() {
    // sync friend started
};
listener.onSyncFinished = []() {
    // sync friend finished
};
listener.onSyncFailed = [](V2NIMError error) {
    // sync friend failed, handle error
};
listener.onFriendAdded = [](V2NIMFriend friendInfo) {
    // friend added, handle friendInfo
};
listener.onFriendDeleted = [](nstd::string accountId, V2NIMFriendDeletionType deletionType) {
    // friend deleted
};
listener.onFriendAddApplication = [](V2NIMFriendAddApplication applicationInfo) {
    // friend add application, handle applicationInfo
};
listener.onFriendAddRejected = [](V2NIMFriendAddRejection rejectionInfo) {
    // friend add rejected, handle rejectionInfo
};
listener.onFriendInfoChanged = [](V2NIMFriend friendInfo) {
    // friend info changed, handle friendInfo
};
friendService.addFriendListener(listener);
Web/uni-app/小程序

调用 on("EventName") 方法注册好友相关监听器,监听添加好友、删除好友、好友信息更新、接受或拒绝好友申请等事件。

TypeScriptnim.V2NIMFriendService.on("onFriendAdded", function (friend: V2NIMFriend) {})
nim.V2NIMFriendService.on("onFriendDeleted", function (accountId: string, deletionType: V2NIMFriendDeletionType) {})
nim.V2NIMFriendService.on("onFriendAddApplication", function (application: V2NIMFriendAddApplication) {})
nim.V2NIMFriendService.on("onFriendAddRejected", function (rejection: V2NIMFriendAddRejection) {})
nim.V2NIMFriendService.on("onFriendInfoChanged", function (friend: V2NIMFriend) {})
Node.js/Electron

调用 on("EventName") 方法注册好友相关监听器,监听添加好友、删除好友、好友信息更新、接受或拒绝好友申请等事件。

TypeScriptv2.friendService.on("friendAdded", function (friend: V2NIMFriend) {})
v2.friendService.on("friendDeleted", function (accountId: string, deletionType: V2NIMFriendDeletionType) {})
v2.friendService.on("friendAddApplication", function (application: V2NIMFriendAddApplication) {})
v2.friendService.on("friendAddRejected", function (rejection: V2NIMFriendAddRejection) {})
v2.friendService.on("friendInfoChanged", function (friend: V2NIMFriend) {})
鸿蒙

调用 on("EventName") 方法注册好友相关监听器,监听添加好友、删除好友、好友信息更新、接受或拒绝好友申请等事件。

TypeScriptnim.friendService.on("onFriendAdded", function (friend: V2NIMFriend) {})
nim.friendService.on("onFriendDeleted", function (accountId: string, deletionType: V2NIMFriendDeletionType) {})
nim.friendService.on("onFriendAddApplication", function (application: V2NIMFriendAddApplication) {})
nim.friendService.on("onFriendAddRejected", function (rejection: V2NIMFriendAddRejection) {})
nim.friendService.on("onFriendInfoChanged", function (friend: V2NIMFriend) {})
Flutter

调用 listen 方法注册好友相关监听器,监听添加好友、删除好友、好友信息更新、接受或拒绝好友申请等事件。

Dartsubsriptions.add(NimCore.instance.friendService.onFriendAddApplication.listen((e){
    //do something
  }));
subsriptions.add(NimCore.instance.friendService.onFriendAdded.listen((e){
//do something
}));
subsriptions.add(NimCore.instance.friendService.onFriendAddRejected.listen((e){
//do something
}));
subsriptions.add(NimCore.instance.friendService.onFriendDeleted.listen((e){
//do something
}));
subsriptions.add(NimCore.instance.friendService.onFriendInfoChanged.listen((e){
//do something
}));

移除监听

安卓

如需移除好友相关监听器,可调用 removeFriendListener 方法。

JavaNIMClient.getService(V2NIMFriendService.class).removeFriendListener(listener);
iOS

如需移除好友相关监听器,可调用 removeFriendListener 方法。

Objective-C[[[NIMSDK sharedSDK] v2FriendService] removeFriendListener:self];
macOS/Windows

如需移除好友相关监听器,可调用 removeFriendListener 方法。

C++V2NIMFriendListener listener;
// ...
friendService.addFriendListener(listener);
// ...
friendService.removeFriendListener(listener);
Web/uni-app/小程序

如需移除好友相关监听器,可调用 off("EventName") 方法。

TypeScriptnim.V2NIMFriendService.off("onFriendAdded", function (friend: V2NIMFriend) {})
nim.V2NIMFriendService.off("onFriendDeleted", function (accountId: string, deletionType: V2NIMFriendDeletionType) {})
nim.V2NIMFriendService.off("onFriendAddApplication", function (application: V2NIMFriendAddApplication) {})
nim.V2NIMFriendService.off("onFriendAddRejected", function (rejection: V2NIMFriendAddRejection) {})
nim.V2NIMFriendService.off("onFriendInfoChanged", function (friend: V2NIMFriend) {})
Node.js/Electron

如需移除好友相关监听器,可调用 off("EventName") 方法。

TypeScriptv2.friendService.off("friendAdded", function (friend: V2NIMFriend) {})
v2.friendService.off("friendDeleted", function (accountId: string, deletionType: V2NIMFriendDeletionType) {})
v2.friendService.off("friendAddApplication", function (application: V2NIMFriendAddApplication) {})
v2.friendService.off("friendAddRejected", function (rejection: V2NIMFriendAddRejection) {})
v2.friendService.off("friendInfoChanged", function (friend: V2NIMFriend) {})
鸿蒙

如需移除好友相关监听器,可调用 off("EventName") 方法。

TypeScriptnim.friendService.off("onFriendAdded", function (friend: V2NIMFriend) {})
nim.friendService.off("onFriendDeleted", function (accountId: string, deletionType: V2NIMFriendDeletionType) {})
nim.friendService.off("onFriendAddApplication", function (application: V2NIMFriendAddApplication) {})
nim.friendService.off("onFriendAddRejected", function (rejection: V2NIMFriendAddRejection) {})
nim.friendService.off("onFriendInfoChanged", function (friend: V2NIMFriend) {})
Flutter

如需移除好友相关监听器,可调用 cancel 方法。

Dartsubsriptions.forEach((subsription) {
      subsription.cancel();
    });

添加好友

调用 addFriend 方法添加好友。

NIM SDK 添加好友分为以下两种模式:

  • (默认)直接添加为好友,不需要对方同意。(在添加时将 V2NIMFriendAddParams.addMode 设置为 V2NIM_FRIEND_MODE_TYPE_ADD。)

    该模式下,调用接口成功后,本端和对端(被添加的好友)都会收到 onFriendAdded 回调。

  • 请求添加对方为好友,需要对方验证通过才能添加。(在添加时将 V2NIMFriendAddParams.addMode 设置为 V2NIM_FRIEND_MODE_TYPE_APPLY。)

    该模式下,调用接口成功后,即向对方发送添加好友的申请,对端(被添加的好友)会收到 onFriendAddApplication 回调。对端可以选择接受或拒绝好友申请。

示例代码

安卓
JavaV2NIMFriendAddParams addParams = V2NIMFriendAddParams.V2NIMFriendAddParamsBuilder.builder(addMode)
        .withPostscript("xxx")
        .build();
NIMClient.getService(V2NIMFriendService.class).addFriend("accoundId", addParams,
        new V2NIMSuccessCallback<Void>() {
            @Override
            public void onSuccess(Void unused) {
                // addMode == V2NIM_FRIEND_MODE_TYPE_ADD **添加好友成功**
                // addMode == V2NIM_FRIEND_MODE_TYPE_APPLY **添加好友请求发送成功**
            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {

            }
        });
iOS
Objective-CV2NIMFriendAddParams *addParams = [V2NIMFriendAddParams new];
addParams.addMode = V2NIM_FRIEND_MODE_TYPE_ADD;
addParams.postscript = @"您好,我是 XXX";
[[[NIMSDK sharedSDK] v2FriendService] addFriend:@"accountId" params:addParams success:^{
} failure:^(V2NIMError * _Nonnull error) {
}];
macOS/Windows
C++V2NIMFriendAddParams params;
params.addMode = V2NIM_FRIEND_MODE_TYPE_ADD;
params.postscript = "hello";
friendService.addFriend(
    "account",
    params,
    []() {
        // add friend success
    },
    [](V2NIMError error) {
        // add friend failed, handle error
    }
);
Web/uni-app/小程序
TypeScriptnim.V2NIMFriendService.addFriend('accid', {
    addMode: 2,
    postscript: '您好,我是 xxx'
});
Node.js/Electron
TypeScriptawait v2.friendService.addFriend('accountId', {
    addMode: 1
})
鸿蒙
TypeScriptnim.friendService.addFriend('accid', {
    addMode: 2,
    postscript: '您好,我是 xxx'
})
Flutter
Dartawait NimCore.instance.friendService.addFriend(accountId, params);

接受好友申请

如果添加好友时,选择了 需要对方(被添加的好友)验证通过才能成功添加为好友 的方式。

收到添加好友申请的用户可以调用 acceptAddApplication 方法接受好友申请。调用接口成功后,本端和对端(发起好友申请的用户)都会收到 onFriendAdded 回调。

操作完成后,SDK 内部会更新申请添加好友信息(applicationInfo)相关操作的状态并处理相关错误码。

示例代码

安卓
Java// V2NIMFriendAddApplication application 无法构造,从查询接口获得
NIMClient.getService(V2NIMFriendService.class).acceptAddApplication(application,
        new V2NIMSuccessCallback<Void>() {
            @Override
            public void onSuccess(Void unused) {

            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {

            }
        });
iOS
Objective-C[[[NIMSDK sharedSDK] v2FriendService] acceptAddApplication:application success:^{
} failure:^(V2NIMError * _Nonnull error) {
}];
macOS/Windows
C++V2NIMFriendAddApplication application;
// get application from listener or query
// ...
friendService.acceptAddApplication(
    application,
    []() {
        // accept friend request success
    },
    [](V2NIMError error) {
        // accept friend request failed, handle error
    }
);
Web/uni-app/小程序
TypeScriptnim.V2NIMFriendService.acceptAddApplication(application);
Node.js/Electron
TypeScriptawait v2.friendService.acceptAddApplication(application)
鸿蒙
TypeScriptnim.friendService.acceptAddApplication(application)
Flutter
Dartawait NimCore.instance.friendService.acceptAddApplication(application);

拒绝好友申请

如果添加好友时,选择了 需要对方(被添加的好友)验证通过才能成功添加为好友 的方式。

收到添加好友申请的用户可以调用 rejectAddApplication 方法拒绝好友申请。调用接口成功后,对端(发起好友申请的用户)会收到 onFriendAddRejected 回调。

操作完成后,SDK 内部会更新申请添加好友信息(applicationInfo)相关操作的状态并处理相关错误码。

示例代码

安卓
Java// V2NIMFriendAddApplication application 无法构造,从查询接口获得
NIMClient.getService(V2NIMFriendService.class).rejectAddApplication(application,
        new V2NIMSuccessCallback<Void>() {
            @Override
            public void onSuccess(Void unused) {
            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {
            }
        });
iOS
Objective-C[[[NIMSDK sharedSDK] v2FriendService] rejectAddApplication:application postscript:@"XXX" success:^{
    } failure:^(V2NIMError * _Nonnull error) {
}];
macOS/Windows
C++V2NIMFriendAddApplication application;
// get application from listener or query
// ...
friendService.rejectAddApplication(
    application,
    "postscript",
    []() {
        // reject friend request success
    },
    [](V2NIMError error) {
        // reject friend request failed, handle error
    }
);
Web/uni-app/小程序
TypeScriptnim.V2FriendService.rejectAddApplication(application, 'ps');
Node.js/Electron
TypeScriptawait v2.friendService.rejectAddApplication(application, 'reason')
鸿蒙
TypeScriptnim.friendService.rejectAddApplication(application, 'ps')
Flutter
Dartawait NimCore.instance.friendService.rejectAddApplication(application, postscript);

删除好友

调用 deleteFriend 方法删除好友。调用接口成功后,本端和对端(被删除的好友)都会收到 onFriendDeleted 回调。

NIM SDK 当前的删除是指双向删除,即用户 A 将用户 B 从好友列表中删除时,双方的好友关系都会被解除,即用户 B 的好友列表中也删除了用户 A。

示例代码

安卓
JavaV2NIMFriendDeleteParams deleteParams = V2NIMFriendDeleteParams.V2NIMFriendDeleteParamsBuilder.builder()
        .withDeleteAlias(deleteAlias)
        .build();
NIMClient.getService(V2NIMFriendService.class).deleteFriend("accoundId", deleteParams,
        new V2NIMSuccessCallback<Void>() {
            @Override
            public void onSuccess(Void unused) {
            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {
            }
        });
iOS
Objective-CV2NIMFriendDeleteParams *deleteParams = [V2NIMFriendDeleteParams new];
deleteParams.deleteAlias = YES;
[[[NIMSDK sharedSDK] v2FriendService] deleteFriend:@"accountId" params:deleteParams success:^{
} failure:^(V2NIMError * _Nonnull error) {
}];
macOS/Windows
C++V2NIMFriendDeleteParams params;
params.deleteAlias = true;
friendService.deleteFriend(
    "account",
    params,
    []() {
        // delete friend success
    },
    [](V2NIMError error) {
        // delete friend failed, handle error
    }
);
Web/uni-app/小程序
TypeScriptnim.V2NIMFriendService.deleteFriend('accid', {
    deleteAlias: true
});
Node.js/Electron
TypeScriptawait v2.friendService.deleteFriend('accountId', {
    deleteAlias: true
})
鸿蒙
TypeScriptnim.friendService.deleteFriend('accid', {
    deleteAlias: true
})
Flutter
Dartawait NimCore.instance.friendService.deleteFriend(accountId, params);

设置好友信息

调用 setFriendInfo 方法设置好友的信息,只能更新好友的备注信息(alias)和扩展信息(serverExtension)。

调用该接口成功后,本端会收到 onFriendsInfoChanged 回调。

示例代码

安卓
JavaV2NIMFriendSetParams setParams = V2NIMFriendSetParams.V2NIMFriendSetParamsBuilder.builder()
        .withAlias(alias)
        .withServerExtension(serverExtension)
        .build();
NIMClient.getService(V2NIMFriendService.class).setFriendInfo("accountId", setParams,
        new V2NIMSuccessCallback<Void>() {
            @Override
            public void onSuccess(Void unused) {
            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {
            }
        });
iOS
Objective-CV2NIMFriendSetParams *setParams = [V2NIMFriendSetParams new];
setParams.alias = @"XXX";
setParams.serverExtension = @"XXX";
[[[NIMSDK sharedSDK] v2FriendService] setFriendInfo:@"accountId" params:setParams success:^{
} failure:^(V2NIMError * _Nonnull error) {
}];
macOS/Windows
C++V2NIMFriendSetParams params;
params.alias = "alias";
friendService.setFriendInfo(
    "account",
    params,
    []() {
        // set friend info success
    },
    [](V2NIMError error) {
        // set friend info failed, handle error
    });
Web/uni-app/小程序
TypeScriptnim.V2NIMFriendService.setFriendInfo('accid', {
    alias: 'alias',
    serverExtension: 'serverExtension'
});
Node.js/Electron
TypeScriptawait v2.friendService.setFriendInfo('accountId', {
    alias: 'alias'
})
鸿蒙
TypeScriptnim.friendService.setFriendInfo('accid', {
    alias: 'alias',
    serverExtension: 'serverExtension'
})
Flutter
Dartawait NimCore.instance.friendService.setFriendInfo(accountId, params);

查询好友列表

调用 getFriendList 方法本地查询好友列表。

用户登录后,SDK 开始同步好友信息,建议同步完成后,调用该接口拉取完整的好友信息列表。

示例代码

安卓
JavaNIMClient.getService(V2NIMFriendService.class).getFriendList(
        new V2NIMSuccessCallback<List<V2NIMFriend>>() {
            @Override
            public void onSuccess(List<V2NIMFriend> v2NIMFriends) {
            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {
            }
        });
iOS
Objective-C[[[NIMSDK sharedSDK] v2FriendService] getFriendList:^(NSArray<V2NIMFriend *> * _Nonnull result) {
} failure:^(V2NIMError * _Nonnull error) {
}];
macOS/Windows
C++friendService.getFriendList(
    [](std::vector<V2NIMFriend> friends) {
        // get friend list success, handle friends
    },
    [](V2NIMError error) {
        // get friend list failed, handle error
    }
);
Web/uni-app/小程序
TypeScriptconst friends = nim.V2NIMFriendService.getFriendList();
Node.js/Electron
TypeScriptconst friends = await v2.friendService.getFriendList()
鸿蒙
TypeScriptconst friends = nim.friendService.getFriendList()
Flutter
Dartawait NimCore.instance.friendService.getFriendList();

查询指定好友信息

调用 getFriendByIds 方法根据账号 ID 查询指定好友的信息列表,只返回账号 ID 存在的好友信息。

示例代码

安卓
JavaNIMClient.getService(V2NIMFriendService.class).getFriendByIds(accountIds,
        new V2NIMSuccessCallback<List<V2NIMFriend>>() {
            @Override
            public void onSuccess(List<V2NIMFriend> v2NIMFriends) {
            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {
            }
        });
iOS
Objective-C[[[NIMSDK sharedSDK] v2FriendService] getFriendByIds:@[@"accountId1",@"accountId2"] success:^(NSArray<V2NIMFriend *> * _Nonnull result) {
    } failure:^(V2NIMError * _Nonnull error) {
    }];
macOS/Windows
C++friendService.getFriendByIds(
    {"account1", "account2"},
    [](std::vector<V2NIMFriend> friends) {
        // get friend list success, handle friends
    },
    [](V2NIMError error) {
        // get friend list failed, handle error
    });
Web/uni-app/小程序
TypeScriptconst friends = await nim.V2NIMFriendService.getFriendByIds(['accid1', 'accid2']);
Node.js/Electron
TypeScriptconst friends = await v2.friendService.getFriendByIds(['accountId1', 'accountId2'])
鸿蒙
TypeScriptconst friends = await nim.friendService.getFriendByIds(['accid1', 'accid2'])
Flutter
Dartawait NimCore.instance.friendService.getFriendByIds(accountIds);

根据关键字搜索好友信息

调用 searchFriendByOption 方法根据关键字信息搜索好友的信息。

该方法默认搜索好友的备注,若有需要,也可以指定同时搜索用户账号。

示例代码

安卓
Java// 按需配置
// .withSearchAccountId()
// .withSearchAlias()
.build();
NIMClient.getService(V2NIMFriendService.class).searchFriendByOption(option,
new V2NIMSuccessCallback<List<V2NIMFriend>>() {
    @Override
    public void onSuccess(List<V2NIMFriend> v2NIMFriends) {
    }
},
new V2NIMFailureCallback() {
    @Override
    public void onFailure(V2NIMError error) {
    }
});
iOS
Objective-C// 按需配置
option.searchAlias = YES;
option.searchAccountId = YES;
[NIMSDK.sharedSDK.v2FriendService searchFriendByOption:option
                                            success:^(NSArray <V2NIMFriend *> *result)
                                            {
                                            }
                                            failure:^(V2NIMError *error)
                                            {
                                            }];
macOS/Windows
C++V2NIMFriendSearchOption option;
option.keyword = "keyword";
friendService.searchFriendByOption(
option,
[](nstd::vector<V2NIMFriend> friends) {
// search friend success, handle friends
},
[](V2NIMError error) {
// search friend failed, handle error
});
Web/uni-app/小程序
TypeScripttry {
    const friends = await nim.V2NIMFriendService.searchFriendByOption({
        keyword: 'nick',
        searchAlias: true,
        searchAccountId: false
    });
} catch(err) {
    console.error('searchFriendByOption Error:', err);
}
Node.js/Electron
TypeScripttry {
    const friends = await v2.friendService.searchFriendByOption({
        keyword: 'nick',
        searchAlias: true,
        searchAccountId: false
    });
} catch(err) {
    console.error('searchFriendByOption Error:', err);
}
鸿蒙
TypeScripttry {
    const friends = await nim.friendService.searchFriendByOption({
        keyword: 'nick',
        searchAlias: true,
        searchAccountId: false
    })
} catch(err) {
    console.error('searchFriendByOption Error:', err)
}
Flutter
Dartawait NimCore.instance.friendService.searchFriendByOption(friendSearchOption);

查询好友状态

调用 checkFriend 方法根据账号 ID 查询好友的状态。

调用接口成功后,会返回一个 key 为 accountId,value 为好友状态的 Map。

示例代码

安卓
JavaNIMClient.getService(V2NIMFriendService.class).checkFriend(accountIds, new V2NIMSuccessCallback<Map<String, Boolean>>() {
    @Override
    public void onSuccess(Map<String, Boolean> stringBooleanMap) {
    }
}, new V2NIMFailureCallback() {
    @Override
    public void onFailure(V2NIMError error) {
    }
});
iOS
Objective-C[[[NIMSDK sharedSDK] v2FriendService] checkFriend:@[@"accountId1",@"accountId2"] success:^(NSDictionary<NSString *,NSNumber *> * _Nonnull result) {
    } failure:^(V2NIMError * _Nonnull error) {
}];
macOS/Windows
C++friendService.checkFriend(
    {"account1", "account2"},
    [](nstd::map<nstd::string, bool> checkList) {
        // check friend success, handle checkList
    },
    [](V2NIMError error) {
        // check friend failed, handle error
    });
Web/uni-app/小程序
TypeScriptconst res = await nim.V2NIMFriendService.checkFriend(['accid1', 'accid2']);
Node.js/Electron
TypeScriptconst res = await v2.friendService.checkFriend(['accountId1', 'accountId2'])
鸿蒙
TypeScriptconst res = await nim.friendService.checkFriend(['accid1', 'accid2'])
Flutter
Dartawait NimCore.instance.friendService.checkFriend(accountIds);

查询好友申请信息

调用 getAddApplicationList 方法查询好友申请信息列表。

NIM SDK 将按照从新到旧的顺序进行查询。

Web/uni-app/小程序由于没有本地数据库持久化存储,申请通知只下发一次,重新登录后不再下发。

示例代码

安卓
JavaV2NIMFriendAddApplicationQueryOption option = V2NIMFriendAddApplicationQueryOption.V2NIMFriendAddApplicationQueryOptionBuilder.builder()
        .withLimit(limit)
        .withOffset(offset)
        .withStatus(statuses)
        .build();
NIMClient.getService(V2NIMFriendService.class).getAddApplicationList(option,
        new V2NIMSuccessCallback<V2NIMFriendAddApplicationResult>() {
            @Override
            public void onSuccess(V2NIMFriendAddApplicationResult v2NIMFriendAddApplicationResult) {
            }
        },
        new V2NIMFailureCallback() {
            @Override
            public void onFailure(V2NIMError error) {
            }
        }
);
iOS
Objective-CV2NIMFriendAddApplicationQueryOption *queryOption = [V2NIMFriendAddApplicationQueryOption new];
queryOption.offset = 0;
queryOption.limit = 50;
[[[NIMSDK sharedSDK] v2FriendService] getAddApplicationList:queryOption success:^(V2NIMFriendAddApplicationResult * _Nonnull result) {
} failure:^(V2NIMError * _Nonnull error) {
}];
macOS/Windows
C++V2NIMFriendAddApplicationQueryOption option;
option.offset = 0;
option.limit = 10;
friendService.getAddApplicationList(
    option,
    [](V2NIMFriendAddApplicationResult result) {
        // 查询添加申请列表成功,处理结果
    },
    [](V2NIMError error) {
        // 查询添加申请列表失败,处理错误
    });
Web/uni-app/小程序
TypeScriptconst applicationList = await nim.V2NIMFriendService.getAddApplicationList({
    offset: 0,
    limit: 50
});
Node.js/Electron
TypeScriptconst applicationList = await v2.friendService.getAddApplicationList({
    offset: 0,
    limit: 50
});
鸿蒙
TypeScriptconst applicationList = await nim.friendService.getAddApplicationList({
    offset: 0,
    limit: 50
})
Flutter
Dartawait NimCore.instance.friendService.getAddApplicationList(option);

查询未读的好友申请数量

调用 getAddApplicationUnreadCount 方法获取未读的好友申请(状态为未处理)数量。

示例代码

安卓
JavaNIMClient.getService(V2NIMFriendService.class).getAddApplicationUnreadCount(
new V2NIMSuccessCallback<Integer>() {
    @Override
    public void onSuccess(Integer count) {
        // 查询结果为 count
    }
}, new V2NIMFailureCallback() {
    @Override
    public void onFailure(V2NIMError error) {
        // 查询失败
    }
});
iOS
Objective-C[[[NIMSDK sharedSDK] v2FriendService] getAddApplicationUnreadCount:^(NSInteger count) {
    // 获取未读数,成功回调
} failure:^(V2NIMError * _Nonnull error) {
    // 取未读数,失败回调
}];
macOS/Windows
C++friendService.getAddApplicationUnreadCount(
[](uint32_t count) {
    // get add application unread count success, handle count
},
[](V2NIMError error) {
    // get add application unread count failed, handle error
});
Web/uni-app/小程序
TypeScripttry {
    const count = await nim.V2NIMFriendService.getAddApplicationUnreadCount()
} catch(err) {
    console.error('getAddApplicationUnreadCount Error:', err)
}
Node.js/Electron
TypeScripttry {
    const count = await nim.V2NIMFriendService.getAddApplicationUnreadCount()
} catch(err) {
    console.error('getAddApplicationUnreadCount Error:', err)
}
鸿蒙
TypeScripttry {
    const count = await nim.friendService.getAddApplicationUnreadCount()
} catch(err) {
    console.error('getAddApplicationUnreadCount Error:', err)
}
Flutter
Dartawait NimCore.instance.friendService.getAddApplicationUnreadCount();

设置好友申请已读

调用 setAddApplicationRead 方法将未读的好友申请设置为已读。

调用该方法,历史所有未读的好友申请数据将均标记为已读。

示例代码

安卓
JavaNIMClient.getService(V2NIMFriendService.class).setAddApplicationRead(
new V2NIMSuccessCallback<Void>() {
    @Override
    public void onSuccess(Void unused) {
        // 设置已读成功
    }
}, new V2NIMFailureCallback() {
    @Override
    public void onFailure(V2NIMError error) {
        // 设置已读失败
    }
});
iOS
Objective-C[[[NIMSDK sharedSDK] v2FriendService] setAddApplicationRead:^(BOOL success) {
    // 设置已读,成功回调
} failure:^(V2NIMError * _Nonnull error) {
    // 失败回调
}];
macOS/Windows
C++friendService.setAddApplicationRead(
    []() {
        // set add application read success
    },
    [](V2NIMError error) {
        // set add application read failed, handle error
    });
Web/uni-app/小程序
TypeScripttry {
    await nim.V2NIMFriendService.setAddApplicationRead()
} catch(err) {
    console.error('setAddApplicationRead Error:', err)
}
Node.js/Electron
TypeScripttry {
    await v2.friendService.setAddApplicationRead()
} catch(err) {
    console.error('setAddApplicationRead Error:', err)
}
鸿蒙
TypeScripttry {
    await nim.friendService.setAddApplicationRead()
} catch(err) {
    console.error('setAddApplicationRead Error:', err)
}
Flutter
Dartawait NimCore.instance.friendService.setAddApplicationRead();

清空好友申请

调用 clearAllAddApplication 方法清空所有好友申请。

调用该方法,历史所有的好友申请数据均被清空。

示例代码

安卓
JavaNIMClient.getService(V2NIMFriendService.class).clearAllAddApplication(new V2NIMSuccessCallback<Void>() {
  @Override
  public void onSuccess(Void unused) {
   //success
  }
}, new V2NIMFailureCallback() {
  @Override
  public void onFailure(V2NIMError error) {
   //failed
  }
});
iOS
Objective-C[[NIMSDK sharedSDK].v2FriendService clearAllAddApplication:^() {
    //success
} failure:^(V2NIMError *error) {
    //failed
}];
macOS/Windows
C++friendService.clearAllAddApplication(
[]() {
    // clear all add application success
},
[](V2NIMError error) {
    // clear all add application failed, handle error
});
Web/uni-app/小程序
TypeScriptawait nim.V2NIMFriendService.clearAllAddApplication()
Node.js/Electron
TypeScriptawait v2.friendService.clearAllAddApplication()
鸿蒙
TypeScriptawait nim.friendService.clearAllAddApplication()
Flutter
Dartawait NimCore.instance.friendService.clearAllAddApplication();

删除指定的好友申请

调用 deleteAddApplication 方法删除指定的好友申请。

示例代码

安卓
JavaNIMClient.getService(V2NIMFriendService.class).deleteAddApplication(application,new V2NIMSuccessCallback<Void>() {
  @Override
  public void onSuccess(Void unused) {
   //success
  }
}, new V2NIMFailureCallback() {
  @Override
  public void onFailure(V2NIMError error) {
   //failed
  }
});
iOS
Objective-C[NIMSDK sharedSDK].v2FriendService deleteAddApplication:application success:^() {
    //success
} failure:^(V2NIMError *error) {
    //failed
}];
macOS/Windows
C++V2NIMFriendAddApplication application;
// get application from listener or query
// ...
friendService.deleteAddApplication(
    application,
    []() {
        // delete add application success
    },
    [](V2NIMError error) {
        // delete add application failed, handle error
    });
Web/uni-app/小程序
TypeScriptawait nim.V2NIMFriendService.deleteAddApplication(applicationInfo)
Node.js/Electron
TypeScriptawait v2.friendService.deleteAddApplication(application)
鸿蒙
TypeScriptconst params = {
  applicantAccountId: 'a',
  recipientAccountId: 'b',
  operatorAccountId: 'c',
  postscript: 'd',
  status: V2NIMFriendAddApplicationStatus.V2NIM_FRIEND_ADD_APPLICATION_STATUS_INIT,
  timestamp: 1234567,
  read: true
} as V2NIMFriendAddApplication

await nimfriendService.deleteAddApplication(params)

相关接口

安卓/iOS/macOS/Windows
API 说明
addFriendListener 注册好友关系相关监听器
removeFriendListener 取消注册好友关系相关监听器
addFriend 添加好友
acceptAddApplication 接受好友申请
rejectAddApplication 拒绝好友申请
deleteFriend 删除好友
setFriendInfo 设置好友信息
getFriendList 获取好友列表
getFriendByIds 根据账号 ID 获取好友列表
searchFriendByOption 根据条件搜索好友
checkFriend 根据账号 ID 查询好友关系
getAddApplicationList 获取申请添加好友信息列表
getAddApplicationUnreadCount 获取未读的好友申请(状态为未处理)数量
setAddApplicationRead 设置好友申请已读
clearAllAddApplication 清空所有好友申请
deleteAddApplication 删除指定的好友申请
Web/uni-app/小程序/Node.js/Electron/鸿蒙
API 说明
on("EventName") 注册好友关系相关监听器
off("EventName") 取消注册好友关系相关监听器
addFriend 添加好友
acceptAddApplication 接受好友申请
rejectAddApplication 拒绝好友申请
deleteFriend 删除好友
setFriendInfo 设置好友信息
getFriendList 获取好友列表
getFriendByIds 根据账号 ID 获取好友列表
searchFriendByOption 根据条件搜索好友
checkFriend 根据账号 ID 查询好友关系
getAddApplicationList 获取申请添加好友信息列表
getAddApplicationUnreadCount 获取未读的好友申请(状态为未处理)数量
setAddApplicationRead 设置好友申请已读
clearAllAddApplication 清空所有好友申请
deleteAddApplication 删除指定的好友申请
Flutter
API 说明
listen 注册好友关系相关监听器
cancel 取消注册好友关系相关监听器
addFriend 添加好友
acceptAddApplication 接受好友申请
rejectAddApplication 拒绝好友申请
deleteFriend 删除好友
setFriendInfo 设置好友信息
getFriendList 获取好友列表
getFriendByIds 根据账号 ID 获取好友列表
searchFriendByOption 根据条件搜索好友
checkFriend 根据账号 ID 查询好友关系
getAddApplicationList 获取申请添加好友信息列表
getAddApplicationUnreadCount 获取未读的好友申请(状态为未处理)数量
setAddApplicationRead 设置好友申请已读
clearAllAddApplication 清空所有好友申请
此文档是否对你有帮助?
有帮助
去反馈
  • 支持平台
  • 技术原理
  • 前提条件
  • 注意事项
  • 监听好友相关事件
  • 注册监听
  • 移除监听
  • 添加好友
  • 接受好友申请
  • 拒绝好友申请
  • 删除好友
  • 设置好友信息
  • 查询好友列表
  • 查询指定好友信息
  • 根据关键字搜索好友信息
  • 查询好友状态
  • 查询好友申请信息
  • 查询未读的好友申请数量
  • 设置好友申请已读
  • 清空好友申请
  • 删除指定的好友申请
  • 相关接口