好友管理能让您更好的体验 IM 功能,环信 Web IM SDK 支持好友体系管理,好友相关的操作如下:
多种好友体系的管理操作,覆盖丰富的集成场景。
名称 | 字段名 | 数据类型 | 描述 |
---|---|---|---|
环信 ID | username | String | 环信 ID 是环信用户的唯一标识,在 AppKey 的范围内唯一 |
调用getRoster
查询好友列表,示例代码如下:
conn.getRoster({
success: function ( roster ) {
//获取好友列表,并进行好友列表渲染,roster格式为:
/** [
{
jid:'asemoemo#chatdemoui_test1@easemob.com',
name:'test1',
subscription: 'both'
}
]
*/
for ( var i = 0, l = roster.length; i < l; i++ ) {
var ros = roster[i];
if ( ros.subscription === 'both' || ros.subscription === 'to' ) {
}
}
},
});
注意:
subscription (both, to, from)
为不同值的处理both
和 to
的为好友,开发者自定义处理,保持跟 APP 端处理一致即可ros.subscription
值为 both/to
为要显示的联系人,此处与 APP 需保持一致,才能保证两个客户端登录后的好友列表一致subscribe
和 removeRoster
进行添加或者删除好友操作;onPresence
,监听对方的添加或者删除好友请求,并做相应的处理。//easemobwebim-sdk中收到联系人订阅请求的处理方法,具体的type值所对应的值请参考xmpp协议规范
var handlePresence = function ( e ) {
//(发送者希望订阅接收者的出席信息),即别人申请加你为好友
if ( e.type === 'subscribe' ) {
}
//(发送者允许接收者接收他们的出席信息),即别人同意你加他为好友
if ( e.type === 'subscribed' ) {
}
//(发送者取消订阅另一个实体的出席信息),即删除现有好友
if ( e.type === 'unsubscribe' ) {
}
//(订阅者的请求被拒绝或以前的订阅被取消),即对方单向的删除了好友
if ( e.type === 'unsubscribed' ) {
}
};
注意:
e.status
中含有[resp:true]
,则表示为对方同意好友后反向添加自己为好友的消息,demo 中发现此类消息,默认同意操作,完成双方互为好友;[resp:true]
,则表示为正常的对方请求添加自己为好友的申请消息。
调用subscribe
添加好友,示例代码如下:
// 添加好友
var addFriends = function () {
conn.subscribe({
to: 'username',
message: '加个好友呗!'
});
};
注意:
message
,在status
字段里面。当收到“添加好友”的请求时,会有两种处理方式:
具体代码实现示例如下:
conn.listen({
onPresence: function ( message ) {
handlePresence(message);
}
});
//收到联系人订阅请求的处理方法,具体的type值所对应的值请参考xmpp协议规范
var handlePresence = function ( e ) {
//对方收到请求加为好友
if (e.type === 'subscribe') {
/*同意添加好友操作的实现方法*/
conn.subscribed({
to: 'username',
message : '[resp:true]'
});
conn.subscribe({//需要反向添加对方好友
to: e.from,
message : '[resp:true]'
});
}
}
conn.listen({
onPresence: function ( message ) {
handlePresence(message);
}
});
//收到联系人订阅请求的处理方法,具体的type值所对应的值请参考xmpp协议规范
var handlePresence = function ( e ) {
//对方收到请求加为好友
if (e.type === 'subscribe') {
/*拒绝添加好友的方法处理*/
conn.unsubscribed({
to: 'username',
message : 'rejectAddFriend'
});
}
}
删除好友代码示例如下:
// 删除好友
var removeFriends = function () {
conn.removeRoster({
to: 'username',
success: function () { // 删除成功
conn.unsubscribed({
to: 'username'
});
},
error: function () { // 删除失败
}
});
};
集成黑名单操作中,有以下几种黑名单功能操作:
将好友加入黑名单后,对方好友列表依然可以看到己方,但无法向己方发送消息。
var list = {
username_1:{
jid: 'appKey_'+username_1+'@easemob.com',
name: username_1,
subscription: 'both',
order: 2
},
username_2:{
jid: 'appKey_'+username_2+'@easemob.com',
name: username_2,
subscription: 'both',
order: 3,
type: 'jid'
},
username_3:{
jid: 'appKey_'+username_3+'@easemob.com',
name: username_3,
subscription: 'both',
order: 4,
type: 'jid'
}
}
var addToBlackList = function () {
var list = {
// user_1
asdfghj: {
jid: 'easemob-demo#chatdemoui_asdfghj@easemob.com',
name: 'asdfghj',
subscription: 'both',
order: 2,
type: 'jid'
},
// user_2
wjy6: {
jid: 'easemob-demo#chatdemoui_wjy6@easemob.com',
name: 'wjy6',
subscription: 'both',
order: 3,
type: 'jid'
}
};
conn.addToBlackList({
list: list,
type: 'jid',
success: function () {
console.log('Add friend to black list success');
},
error: function () {
console.log('Add friend to black list error');
}
});
}
注意:
list
的结构为{username_1: {}, username_2: {}…}
;jid
, username
, subscription
均在获取好友列表时已获取到,用户可根据好友列表动态获取这些参数,order
不重复即可。getBlacklist
函数获取好友黑名单列表;var getBlackList = function () {
conn.getBlacklist();
};
// 将好友从黑名单拉出来
var removeBlackList = function () {
var list = [
{
wjy6: {
jid: 'easemob-demo#chatdemoui_mengyuanyuan01@easemob.com',
name: 'mengyuanyuan01',
order: '2',
type: 'jid'
}
},
{
mengyuanyuan: {
jid: 'easemob-demo#chatdemoui_wjy6@easemob.com',
name: 'wjy6',
order: '4',
type: 'jid',
}
}
];
conn.removeFromBlackList({
list: list,
type: 'jid',
success: function () {
console.log('Remove from black list success.');
},
error: function () {
console.log('Remove from black list error.')
}
});
};