存在于 JavaScript 中
当用户从特定频道加入,离开或超时时,Presence 通过发送消息来工作。你可以收听这些消息以跟踪频道中的频道,以及他们执行任何操作的时间。
首先,确保每个用户都是 UUID。初始化 PubNub 时设置此项:
var pubnub = PUBNUB({
publish_key: 'my_pub_key',
subscribe_key: 'my_sub_key',
uuid: '1234_some_uuid'
});
现在,当你连接到频道时,为 join
事件添加额外的侦听器。
pubnub.subscribe({
channel: "channel-1",
message: function(m){console.log(m)}
presence: onPresenceEvent,
});
onPresenceEvent = function(message, envelope, channel){
if (!message.action) {
// presence interval mode happens
// when occupancy > presence announce max
// there is no action key
console.log("Presence Interval Mode: occupancy = " + m.occupancy);
return;
}
console.log(
"Action: " + message.action + "\n" +
"UUID: " + message.uuid + "\n" +
"Channel: " + JSON.stringify(channel) + "\n" +
"Occupancy: " + message.occupancy + "\n" +
"Timestamp: " + message.timestamp);
else if (m.action == 'join') {
// new subscriber to channel
// add the user to your buddy list
}
else if (m.action == 'leave') {
// subscriber explicitly unsubscribed channel
// remove user from your buddy list
}
else if (m.action == 'timeout') {
// subscriber implicitly unsubscribed channel (did not unsubscribe)
// remove user from your buddy list
}
else if (m.action == 'state-change') {
// subscriber changed state
// update the attributes about the user in the buddy list
// i.e. - is typing, online status, etc.
console.log("State Data: " + JSON.stringify(message.data));
}
};
发送到 presence
回调的消息对象将包括所执行的操作(加入,离开,超时或状态更改)以及执行操作的用户的 UUID,以及时间戳和一些其他元数据。
设置状态后,将发送 state-change
事件,该事件将包括 message
键的 data
键中的新状态。
注意 :如果启用了 Access Manager,则必须确保你的授权涵盖常规频道和在线频道。否则,当你尝试使用状态回调订阅频道时,SDK 还会为你订阅状态通道,如果你未应用授权,则会失败。在线通道名称是带有“-pnpres”后缀的常规通道名称; 意味着名为“pubnub-sensor-array”的通道将具有名为“pubnub-sensor-array-pnpres”的在线通道。有关更多信息,请参阅 Access Manager 示例。