存在於 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 示例。