用户及好友相关
更新时间: 2025/04/09 14:38:45
IM怎么添加好友 [注意1] IM好友是双向的,一旦添加好友成功,彼此都是对方好友。
[注意2] 不能添加自己为好友,否则返回414,例如:{"desc": "accid can't same with the faccid", "code": 414},或者message: "friendRequest error: 参数错误", code: 414,等。
各端添加好友的方法如下。
-
Server
-
Windows (C)
-
Android
-
iOS
-
Web
-
添加好友接口
https://api.yunxinapi.com/nimserver/friend/add.action,其中传入参数accid表示发起者accid,faccid表示接收者accid,type表示验证方式(1直接加好友,2请求加好友,3同意加好友,4拒绝加好友)。 -
- 调用接口
nim_friend_request发起添加/接受/拒绝好友请求,参数包含对方accid,好友验证类型NIMVerifyType,其中kNIMVerifyTypeAdd = 1表示直接添加,kNIMVerifyTypeAsk = 2表示请求添加,kNIMVerifyTypeAgree = 3表示同意添加,kNIMVerifyTypeReject = 4表示拒绝添加。 - 通过接口
`nim_friend_reg_changed_cb`注册好友变更通知全局回调函数,回调函数nim_friend_change_cb_func中NIMFriendChangeType为kNIMFriendChangeTypeRequest表示好友请求,result_json包含对方accid、NIMVerifyType。
- 调用接口
-
- 调用接口
NIMClient.getService(FriendService.class).addFriend(new AddFriendData(accid, verifyType, msg)).setCallback(new RequestCallback<Void>() { ... })发起添加好友请求,构造的AddFriendData对象中,配置对方accid和验证方式VerifyType,其中DIRECT_ADD表示直接添加,VERIFY_REQUEST表示请求添加。 - 对方会收到一条系统通知
SystemMessage,可以通过NIMClient.getService(SystemMessageObserver.class).observeReceiveSystemMsg(Observer<SystemMessage> observer, true)来注册监听,通过getAttachObject方法获取添加好友通知AddFriendNotify。 - 接收方调用接口
NIMClient.getService(FriendService.class).ackAddFriendRequest(accid, boolean agree).setCallback(...)来接受或拒绝对方请求。
- 调用接口
-
- 调用接口
–requestFriend:completion:发起添加/接受/拒绝好友请求,构造的NIMUserRequest对象中,配置userId属性为对方accid,operation属性为验证方式,NIMUserOperationAdd = 1表示直接添加,NIMUserOperationRequest = 2表示请求添加,NIMUserOperationVerify = 3表示同意添加,NIMUserOperationReject = 4表示拒绝添加。 - 对方会收到一条系统通知消息
NIMSystemNotification,通过通过注册全局监听[[NIMSDK sharedSDK].systemNotificationManager addDelegate:self]来接收回调,NIMSystemNotification的type为NIMSystemNotificationTypeFriendAdd。
- 调用接口
-
- 调用接口
nim.addFriend(options)直接添加好友,调用接口nim.applyFriend(options)请求添加好友,其中配置account参数为对方accid。对方会收到一条类型为'addFriend'/'applyFriend'的系统通知sysMsgs。 - 初始化SDK时配置系统通知回调函数
NIM.getInstance({..., onsysmsg: onSysMsg, ...})来接收添加好友相关系统通知。 - 调用接口
nim.passFriendApply(options)来接受好友请求,调用接口nim.rejectFriendApply(options)来拒绝好友请求。其中配置idServer参数为对应系统通知的idServer,account参数为对方accid。对方会收到一条类型为'passFriendApply'/'rejectFriendApply'的系统通知sysMsgs。
- 调用接口
如何设置和获取用户关系/好友关系的扩展字段?
扩展字段,请使用JSON格式封装,并传入非格式化的JSON字符串。
Android
-
- 更新好友扩展字段
通过接口NIMClient.getService(FriendService.class).updateFriendFields(String friendAccount, Map<FriendFieldEnum, Object> fields)更新好友关系时,FriendFieldEnum中EXTENSION设置好友扩展字段。 - 获取好友扩展字段
通过Friend friend = NIMClient.getService(FriendService.class).getFriendByAccount("account")根据用户账号获取好友关系时,返回Friend对象,再通过其getExtension()方法获取好友扩展字段Map。
- 更新好友扩展字段
iOS
-
- 更新好友扩展字段
通过接口-(void)updateUser:(NIMUser *)user completion:(nullable NIMUserBlock)completion修改自己与目标用户的关系时,通过NIMUser对象的ext属性设置好友扩展字段。 - 获取好友扩展字段
通过接口-(nullable NSArray *)myFriends获取好友列表时,通过返回的NIMUser对象的ext属性获取好友扩展字段。
- 更新好友扩展字段
macOS/Windows
-
- 更新好友扩展字段
通过接口nim_friend_update更新好友资料时,参数friend_json表示好友资料json字符串,其中kNIMFriendKeyEx = "ex"参数设置好友扩展字段。 - 获取好友扩展字段
通过接口nim_friend_get_list获取好友列表时,回调函数nim_friend_get_list_cb_func的参数friend_list_json表示好友列表和好友资料Json字符串,其中kNIMFriendKeyEx = "ex"参数获取好友扩展字段。
- 更新好友扩展字段
Web
-
- 更新好友扩展字段
通过接口nim.updateFriend({account: 'accid', ..., custom: 'custom', ...})更新好友时,其中参数custom设置好友扩展字段。 - 获取好友扩展字段
通过接口nim.getFriends({done: getFriendsDone})获取好友列表时,回调函数中返回Friend列表,通过参数custom获取好友扩展字段。
- 更新好友扩展字段
服务端
- 更新好友扩展字段*
通过API
https://api.yunxinapi.com/nimserver/friend/update.action更新好友相关信息时,其中ex参数设置好友扩展字段。 - 获取好友扩展字段**
通过APIhttps://api.yunxinapi.com/nimserver/friend/get.action获取好友关系时,返回的好友列表中,ex参数表示好友扩展字段。
[注意] 获取好友关系API只能查询某时间点起到现在有更新的双向好友。
如何监听添加好友相关的系统通知?
添加好友、同意或拒绝添加好友时,会收到系统通知。
-
Windows
-
Android
-
iOS
-
Web
- C++: 通过
RegSysmsgCb注册系统通知回调。如果nim::SysMessage.type_为kNIMSysMsgTypeFriendAdd表示添加好友通知。通过nim::SysMessage.sender_accid_获取对方账号。
解析nim::SysMessage.attach_的vt字段并强转为nim::NIMVerifyType,表示添加好友的事件类型。nim::kNIMVerifyTypeAdd对方直接加你为好友nim::kNIMVerifyTypeAsk对方请求添加好友nim::kNIMVerifyTypeAgree对方同意加你为好友nim::kNIMVerifyTypeReject对方拒绝加你为好友
- C#: 通过
NIM.SysMessage.SysMsgAPI.ReceiveSysMsgHandler注册系统通知回调。
判断回调的NIMSysMsgEventArgs对象的.Message.Content.MsgType,如果为kNIMSysMsgTypeFriendAdd表示添加好友通知。通过回调的sender参数获取对方账号。
将回调的NIMSysMsgEventArgs对象的.Message.Content.Attachment强转为FriendRequestVerify对象,通过其VT属性判断事件类型。NIM.Friend.NIMVerifyType.kNIMVerifyTypeAdd对方直接加你为好友NIM.Friend.NIMVerifyType.kNIMVerifyTypeAsk对方请求添加好友NIM.Friend.NIMVerifyType.kNIMVerifyTypeAgree对方同意加你为好友NIM.Friend.NIMVerifyType.kNIMVerifyTypeReject对方拒绝加你为好友
- C++: 通过
-
通过
NIMClient.getService(SystemMessageObserver.class).observeReceiveSystemMsg(systemMessageObserver, true)注册系统通知观察者。- 通过
SystemMessage的getType()方法获取系统通知类型SystemMessageType,如果为AddFriend表示添加好友通知。 - 通过
SystemMessage的getFromAccount()方法获取对方账号。 - 通过
SystemMessage的getAttachObject()方法获取附件对象,并将其强转为AddFriendNotify对象。 - 通过
AddFriendNotify的getEvent()方法获取事件类型。AddFriendNotify.Event.RECV_ADD_FRIEND_DIRECT对方直接加你为好友AddFriendNotify.Event.RECV_ADD_FRIEND_VERIFY_REQUEST对方请求添加好友AddFriendNotify.Event.RECV_AGREE_ADD_FRIEND对方同意加你为好友AddFriendNotify.Event.RECV_REJECT_ADD_FRIEND对方拒绝加你为好友
- 通过
-
通过
[[NIMSDK sharedSDK].systemNotificationManager addDelegate:self]监听系统通知。- 通过
NIMSystemNotification的type字段获取系统通知类型NIMSystemNotificationType,如果为NIMSystemNotificationTypeFriendAdd = 5表示添加好友通知。 - 通过
NIMSystemNotification的sourceID字段获取对方账号。 - 通过
NIMSystemNotification的attachment字段获取附件对象,并将其强转为NIMUserAddAttachment对象。 - 通过
NIMUserAddAttachment的operationType方法获取事件类型。NIMUserOperationAdd = 1对方直接加你为好友NIMUserOperationRequest = 2对方请求添加好友NIMUserOperationVerify = 3对方同意加你为好友NIMUserOperationReject = 4对方拒绝加你为好友
- 通过
-
初始化IM的时候,配置
onsysmsg和onofflinesysmsgs监听系统通知和离线系统通知。
处理添加好友相关通知的示例代码,请参考开发指南。
此文档是否对你有帮助?





