好友关系托管

更新时间: 2024/03/14 18:45:30

  • SDK 提供好友关系托管

初始化参数

示例代码

javascriptvar nim = NIM.getInstance({
    onfriends: onFriends,
    onsyncfriendaction: onSyncFriendAction
});
function onFriends(friends) {
    console.log('收到好友列表', friends);
    data.friends = nim.mergeFriends(data.friends, friends);
    data.friends = nim.cutFriends(data.friends, friends.invalid);
    refreshFriendsUI();
}
function onSyncFriendAction(obj) {
    console.log(obj);
    switch (obj.type) {
    case 'addFriend':
        console.log('你在其它端直接加了一个好友' + obj.account + ', 附言' + obj.ps);
        onAddFriend(obj.friend);
        break;
    case 'applyFriend':
        console.log('你在其它端申请加了一个好友' + obj.account + ', 附言' + obj.ps);
        break;
    case 'passFriendApply':
        console.log('你在其它端通过了一个好友申请' + obj.account + ', 附言' + obj.ps);
        onAddFriend(obj.friend);
        break;
    case 'rejectFriendApply':
        console.log('你在其它端拒绝了一个好友申请' + obj.account + ', 附言' + obj.ps);
        break;
    case 'deleteFriend':
        console.log('你在其它端删了一个好友' + obj.account);
        onDeleteFriend(obj.account);
        break;
    case 'updateFriend':
        console.log('你在其它端更新了一个好友', obj.friend);
        onUpdateFriend(obj.friend);
        break;
    }
}
function onAddFriend(friend) {
    data.friends = nim.mergeFriends(data.friends, friend);
    refreshFriendsUI();
}
function onDeleteFriend(account) {
    data.friends = nim.cutFriendsByAccounts(data.friends, account);
    refreshFriendsUI();
}
function onUpdateFriend(friend) {
    data.friends = nim.mergeFriends(data.friends, friend);
    refreshFriendsUI();
}
function refreshFriendsUI() {
    // 刷新界面
}

参数解释

  • onfriends, 同步好友列表的回调, 会传入好友列表friends
  • onsyncfriendaction, 当前登录用户在其它端进行好友相关的操作后的回调
    • 操作包括
    • 此回调会收到一个参数obj, 它有一个字段type的值为操作的类型, 具体类型如下:
      • 'addFriend' (直接加为好友), 此时obj的字段如下:
        • account的值为被直接加为好友的账号
        • friend为被直接加为好友的好友对象
        • ps为附言
      • 'applyFriend' (申请加为好友), 此时obj的字段如下:
        • account的值为被申请加为好友的账号
        • ps为附言
      • 'passFriendApply' (通过好友申请), 此时obj的字段如下:
        • account的值为被通过好友申请的账号
        • friend为被通过好友申请的好友对象
        • ps为附言
      • 'rejectFriendApply' (拒绝好友申请), 此时obj的字段如下:
        • account的值为被拒绝好友申请的账号
        • ps为附言
      • 'deleteFriend' (删除好友), 此时obj的字段如下:
        • account的值为被删除好友的账号
      • 'updateFriend' (更新好友), 此时obj的字段如下:
    • 可以调用nim.mergeFriendsnim.cutFriendsByAccounts来合并数据

好友对象

好友对象有以下字段:

  • account: 账号
  • alias: 备注
  • custom: 扩展字段, 开发者可以自行扩展, 建议封装成JSON格式字符串
  • createTime: 成为好友的时间
  • updateTime: 更新时间

直接加为好友

  • 直接加某个用户为好友后, 对方不需要确认, 直接成为当前登录用户的好友
  • ps: 附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容
  • 对方会收到一条类型为'addFriend'系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为接收方的账号。
javascriptnim.addFriend({
    account: 'account',
    ps: 'ps',
    done: addFriendDone
});
function addFriendDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('直接加为好友' + (!error?'成功':'失败'));
    if (!error) {
        onAddFriend(obj.friend);
    }
}

申请加为好友

  • 申请加某个用户为好友后, 对方会收到一条类型为'applyFriend'系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为接收方的账号, 用户在收到好友申请后, 可以选择通过或者拒绝好友申请。
    • 如果通过好友申请, 那么申请方会收到一条类型为'passFriendApply'系统通知, 此类系统通知的from字段的值为通过方的帐号, to字段的值为申请方的账号。
    • 如果拒绝好友申请, 那么申请方会收到一条类型为'rejectFriendApply'系统通知, 此类系统通知的from字段的值为拒绝方的帐号, to字段的值为申请方的账号。
  • ps: 附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容
javascriptnim.applyFriend({
    account: 'account',
    ps: 'ps',
    done: applyFriendDone
});
function applyFriendDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('申请加为好友' + (!error?'成功':'失败'));
}

通过好友申请

  • 申请加某个用户为好友后, 对方会收到一条类型为'applyFriend'系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为接收方的账号, 用户在收到好友申请后, 可以选择通过或者拒绝好友申请。
    • 如果通过好友申请, 那么申请方会收到一条类型为'passFriendApply'系统通知, 此类系统通知的from字段的值为通过方的帐号, to字段的值为申请方的账号。
    • 如果拒绝好友申请, 那么申请方会收到一条类型为'rejectFriendApply'系统通知, 此类系统通知的from字段的值为拒绝方的帐号, to字段的值为申请方的账号。
  • ps: 附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容
javascript// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.passFriendApply({
    idServer: sysMsg.idServer,
    account: 'account',
    ps: 'ps',
    done: passFriendApplyDone
});
function passFriendApplyDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('通过好友申请' + (!error?'成功':'失败'));
    if (!error) {
        onAddFriend(obj.friend);
    }
}

拒绝好友申请

  • 申请加某个用户为好友后, 对方会收到一条类型为'applyFriend'系统通知, 此类系统通知的from字段的值为申请方的帐号, to字段的值为接收方的账号, 用户在收到好友申请后, 可以选择通过或者拒绝好友申请。
    • 如果通过好友申请, 那么申请方会收到一条类型为'passFriendApply'系统通知, 此类系统通知的from字段的值为通过方的帐号, to字段的值为申请方的账号。
    • 如果拒绝好友申请, 那么申请方会收到一条类型为'rejectFriendApply'系统通知, 此类系统通知的from字段的值为拒绝方的帐号, to字段的值为申请方的账号。
  • ps: 附言, 选填, 开发者也可以使用JSON格式的字符串来扩展此内容
javascript// 假设 sysMsg 是通过回调 `onsysmsg` 收到的系统通知
nim.rejectFriendApply({
    idServer: sysMsg.idServer,
    account: 'account',
    ps: 'ps',
    done: rejectFriendApplyDone
});
function rejectFriendApplyDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('拒绝好友申请' + (!error?'成功':'失败'));
}

删除好友

  • 删除好友后, 被删除的人会收到一条类型为'deleteFriend'系统通知, 此类系统通知的from字段的值为删除方的帐号, to字段的值为被删除方的账号。
  • 参数解释
    • account为要删除好友的账号。
    • delAlias参数,表示用户删除好友时,是否要删除好友的备注信息,默认false不删除。
javascriptnim.deleteFriend({
    account: 'account',
    delAlias: true,
    done: deleteFriendDone
});
function deleteFriendDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('删除好友' + (!error?'成功':'失败'));
    if (!error) {
        onDeleteFriend(obj.account);
    }
}

更新好友

  • 开发者可以用此接口来更新好友的备注
  • 开发者也可以使用JSON格式的扩展字段来进行扩展
javascriptnim.updateFriend({
    account: 'account',
    alias: 'alias',
    custom: 'custom',
    done: updateFriendDone
});
function updateFriendDone(error, obj) {
    console.log(error);
    console.log(obj);
    console.log('更新好友' + (!error?'成功':'失败'));
    if (!error) {
        onUpdateFriend(obj);
    }
}

获取好友列表

  • 如果开发者在初始化SDK的时候设置了syncFriendsfalse, 那么就收不到onfriends回调, 可以调用此接口来获取好友列表。
javascriptnim.getFriends({
    done: getFriendsDone
});
function getFriendsDone(error, friends) {
    console.log('获取好友列表' + (!error?'成功':'失败'), error, friends);
    if (!error) {
        onFriends(friends);
    }
}
此文档是否对你有帮助?
有帮助
去反馈
  • 初始化参数
  • 好友对象
  • 直接加为好友
  • 申请加为好友
  • 通过好友申请
  • 拒绝好友申请
  • 删除好友
  • 更新好友
  • 获取好友列表