Sign inGet started

Presence 频道

名称以 presence- 开头的频道使用私有频道授权,并添加成员身份。你的后端为每个订阅者分配一个 member_id。订阅者会收到当前成员列表,以及成员加入或离开时的事件。
可以将 presence 频道用于在线花名册、文档查看者、输入指示器或协作光标。

订阅

const room = bird.subscribe("presence-room-1");

room.bind("bird:subscription_succeeded", () => {
  console.log("me:", room.myId);
  console.log("here now:", [...room.members.values()]);
});

room.bind("bird:member_added", (member) => console.log("joined", member.member_id));
room.bind("bird:member_removed", (member) => console.log("left", member.member_id));
在 Swift 和 Kotlin 中,subscribe 返回一个基础频道类型。在访问 myIdmembers 之前,需要将其转换为 PresenceChannel。Swift 提供一个成员映射用于 bird:subscription_succeeded,以及一个 Member 用于加入和离开事件。Kotlin 将每个事件表示为 JsonElement。在两个客户端中,都可以从 room.members 读取当前花名册。
bird:subscription_succeeded 在订阅完成时触发。此时,room.members 包含当前花名册,room.myId 包含你的 member_id。在应用后续的加入和离开事件之前,先渲染这个初始花名册。
授权流程与私有频道相同,但多了一项:你的端点返回 member_data,这是一个 JSON 字符串,携带 member_id 和可选的 member_info,并且必须对该字符串进行签名。参见频道授权

安全使用 member_info

每个频道成员都会收到 member_info。将它用于少量公开的个人资料数据,例如显示名称或头像 URL。不要包含电子邮件地址、授权角色或其他敏感数据。
你的后端在签名的授权响应中分配 member_idmember_info。客户端可以请求订阅,但无法选择签名的身份。

成员与连接

一个成员可以持有多个连接。例如,三个打开的标签页产生一个成员和三个连接:
发生的操作成员事件频道连接数
第一个标签页订阅bird:member_added1
第二个标签页订阅2
第二个标签页关闭1
最后一个标签页关闭bird:member_removed0
room.members 代表的是身份而非会话。要接收打开的连接数,请启用连接计数连接计数事件,然后绑定 bird:connection_count

从服务器读取 presence 信息

有两种服务器端读取方式,都不需要订阅:
  • 列出频道成员 返回当前订阅了 presence 频道的 member_id 值。
  • 获取频道 配合 include=member_count 返回当前在线成员数量,但不列出具体成员。
member_count 仅适用于 presence 频道。在公共或私有频道上请求它会产生验证错误,因为这些频道没有成员。
你也可以在发布消息时请求它,这会返回每个目标频道在该时刻的状态。参见发布事件

后续步骤