好友关系

更新时间: 2024/11/18 17:19:23

网易云信即时通讯 SDK(NetEase IM SDK,简称 NIM SDK)提供好友关系的管理和维护。

支持平台

本文内容适用的开发平台或框架如下表所示:

Android iOS macOS/Windows Web/uni-app/小程序 Node.js/Electron HarmonyOS Flutter
✔️️ ✔️️ ✔️️ ✔️️ ✔️️ ✔️ ✔️

技术原理

NIM SDK 支持添加/删除好友,设置好友信息,查询好友状态和信息等操作。

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

  • 直接添加好友,不需要对方同意。该模式下,调用接口成功后,本端和对端(被添加的好友)都会收到添加好友成功的回调。
  • 请求添加对方为好友,需要对方验证通过才能添加。该模式下,调用接口成功后,对端(被添加的好友)会收到好友申请的回调。
    • 对端可以接受好友申请,接受成功后,本端和对端都会收到添加好友成功的回调。
    • 对端也可以拒绝好友申请,拒绝成功后,发起好友申请的用户会收到拒绝好友申请的回调。

前提条件

已实现 登录 IM

监听好友相关事件

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

好友相关回调:

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

Android/iOS/macOS/Windows

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

示例代码

Android
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
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
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);

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

Android
JavaNIMClient.getService(V2NIMFriendService.class).removeFriendListener(listener);
iOS
Objective-C[[[NIMSDK sharedSDK] v2FriendService] removeFriendListener:self];
macOS/Windows
C++V2NIMFriendListener listener;
// ...
friendService.addFriendListener(listener);
// ...
friendService.removeFriendListener(listener);

Web/uni-app/小程序/HarmonyOS/Node.js/Electron

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

示例代码

Web/uni-app/小程序
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) {})

如需移除好友相关监听器,可调用 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
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) {})

如需移除好友相关监听器,可调用 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) {})
HarmonyOS
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) {})

如需移除好友相关监听器,可调用 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

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

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
  }));

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

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

添加好友

调用 addFriend 方法添加好友。

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

  • 直接添加为好友

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

  • 请求添加对方为好友,需要对方验证通过才能添加

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

示例代码

Android
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
})
HarmonyOS
TypeScriptnim.friendService.addFriend('accid', {
    addMode: 2,
    postscript: '您好,我是 xxx'
})
Flutter
dartawait NimCore.instance.friendService.addFriend(accountId, params);

接受好友申请

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

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

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

示例代码

Android
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)
HarmonyOS
TypeScriptnim.friendService.acceptAddApplication(application)
Flutter
dartawait NimCore.instance.friendService.acceptAddApplication(application);

拒绝好友申请

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

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

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

示例代码

Android
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')
HarmonyOS
TypeScriptnim.friendService.rejectAddApplication(application, 'ps')
Flutter
dartawait NimCore.instance.friendService.rejectAddApplication(application, postscript);

删除好友

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

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

示例代码

Android
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
})
HarmonyOS
TypeScriptnim.friendService.deleteFriend('accid', {
    deleteAlias: true
})
Flutter
dartawait NimCore.instance.friendService.deleteFriend(accountId, params);

设置好友信息

调用 setFriendInfo 方法设置好友的信息,包括好友备注和好友扩展信息。

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

示例代码

Android
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'
})
HarmonyOS
TypeScriptnim.friendService.setFriendInfo('accid', {
    alias: 'alias',
    serverExtension: 'serverExtension'
})
Flutter
dartawait NimCore.instance.friendService.setFriendInfo(accountId, params);

查询好友列表

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

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

示例代码

Android
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()
HarmonyOS
TypeScriptconst friends = nim.friendService.getFriendList()
Flutter
dartawait NimCore.instance.friendService.getFriendList();

查询指定好友信息

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

示例代码

Android
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'])
HarmonyOS
TypeScriptconst friends = await nim.friendService.getFriendByIds(['accid1', 'accid2'])
Flutter
dartawait NimCore.instance.friendService.getFriendByIds(accountIds);

根据关键字搜索好友信息

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

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

示例代码

Android
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);
}
HarmonyOS
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。

示例代码

Android
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'])
HarmonyOS
TypeScriptconst res = await nim.friendService.checkFriend(['accid1', 'accid2'])
Flutter
dartawait NimCore.instance.friendService.checkFriend(accountIds);

查询好友申请信息

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

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

示例代码

Android
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
});
HarmonyOS
TypeScriptconst applicationList = await nim.friendService.getAddApplicationList({
    offset: 0,
    limit: 50
})
Flutter
dartawait NimCore.instance.friendService.getAddApplicationList(option);

查询未读的好友申请数量

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

示例代码

Android
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)
}
HarmonyOS
TypeScripttry {
    const count = await nim.friendService.getAddApplicationUnreadCount()
} catch(err) {
    console.error('getAddApplicationUnreadCount Error:', err)
}
Flutter
dartawait NimCore.instance.friendService.getAddApplicationUnreadCount();

设置好友申请已读

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

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

示例代码

Android
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)
}
HarmonyOS
TypeScripttry {
    await nim.friendService.setAddApplicationRead()
} catch(err) {
    console.error('setAddApplicationRead Error:', err)
}
Flutter
dartawait NimCore.instance.friendService.setAddApplicationRead();

涉及接口

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