Android

用户及好友相关

更新时间: 2024/03/14 16:36:35

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.netease.im/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_funcNIMFriendChangeTypekNIMFriendChangeTypeRequest表示好友请求,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]来接收回调,NIMSystemNotificationtypeNIMSystemNotificationTypeFriendAdd
    • 调用接口nim.addFriend(options)直接添加好友,调用接口nim.applyFriend(options)请求添加好友,其中配置account参数为对方accid。对方会收到一条类型为'addFriend'/'applyFriend'的系统通知sysMsgs
    • 初始化SDK时配置系统通知回调函数NIM.getInstance({..., onsysmsg: onSysMsg, ...})来接收添加好友相关系统通知。
    • 调用接口nim.passFriendApply(options)来接受好友请求,调用接口nim.rejectFriendApply(options)来拒绝好友请求。其中配置idServer参数为对应系统通知的idServeraccount参数为对方accid。对方会收到一条类型为'passFriendApply'/'rejectFriendApply'的系统通知sysMsgs

如何设置和获取用户关系/好友关系的扩展字段?

扩展字段,请使用JSON格式封装,并传入非格式化的JSON字符串。

Android
    • 更新好友扩展字段
      通过接口NIMClient.getService(FriendService.class).updateFriendFields(String friendAccount, Map<FriendFieldEnum, Object> fields)更新好友关系时,FriendFieldEnumEXTENSION设置好友扩展字段。
    • 获取好友扩展字段
      通过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获取好友扩展字段。
服务端
  • 更新好友扩展字段* 通过APIhttps://api.netease.im/nimserver/friend/update.action更新好友相关信息时,其中ex参数设置好友扩展字段。
  • 获取好友扩展字段**
    通过APIhttps://api.netease.im/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对方拒绝加你为好友
  • 通过NIMClient.getService(SystemMessageObserver.class).observeReceiveSystemMsg(systemMessageObserver, true)注册系统通知观察者。

    • 通过SystemMessagegetType()方法获取系统通知类型SystemMessageType,如果为AddFriend表示添加好友通知。
    • 通过SystemMessagegetFromAccount()方法获取对方账号。
    • 通过SystemMessagegetAttachObject()方法获取附件对象,并将其强转为AddFriendNotify对象。
    • 通过AddFriendNotifygetEvent()方法获取事件类型。
      • 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]监听系统通知。

    • 通过NIMSystemNotificationtype字段获取系统通知类型NIMSystemNotificationType,如果为NIMSystemNotificationTypeFriendAdd = 5表示添加好友通知。
    • 通过NIMSystemNotificationsourceID字段获取对方账号。
    • 通过NIMSystemNotificationattachment字段获取附件对象,并将其强转为NIMUserAddAttachment对象。
    • 通过NIMUserAddAttachmentoperationType方法获取事件类型。
      • NIMUserOperationAdd = 1对方直接加你为好友
      • NIMUserOperationRequest = 2对方请求添加好友
      • NIMUserOperationVerify = 3对方同意加你为好友
      • NIMUserOperationReject = 4对方拒绝加你为好友
  • 初始化IM的时候,配置onsysmsgonofflinesysmsgs监听系统通知和离线系统通知。
    处理添加好友相关通知的示例代码,请参考开发指南

此文档是否对你有帮助?
有帮助
去反馈
  • 如何设置和获取用户关系/好友关系的扩展字段?
  • 如何监听添加好友相关的系统通知?