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