Presence-kanalen
Een kanaal waarvan de naam begint met presence- gebruikt private-kanaalauthorisatie en voegt ledenidentiteit toe. Je backend wijst elke abonnee een member_id toe. Abonnees ontvangen de actuele ledenlijst en events wanneer leden toetreden of vertrekken.
Gebruik presence-kanalen voor online roosters, documentkijkers, typindicatoren of samenwerkingscursors.
Abonneren
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));guard let room = bird.subscribe("presence-room-1") as? PresenceChannel else { return }
room.bind(BirdProtocol.Event.subscriptionSucceeded) { _ in
print("me:", room.myId ?? "")
print("here now:", room.members.keys)
}
room.bind(BirdProtocol.Event.memberAdded) { member in
print("joined", (member as? Member)?.memberId ?? "")
}
room.bind(BirdProtocol.Event.memberRemoved) { member in
print("left", (member as? Member)?.memberId ?? "")
}val room = bird.subscribe("presence-room-1")
if (room is PresenceChannel) {
room.bind(BirdProtocol.Event.SUBSCRIPTION_SUCCEEDED) {
println("me: ${room.myId}")
println("here now: ${room.members.keys}")
}
room.bind(BirdProtocol.Event.MEMBER_ADDED) { data ->
println("joined ${data?.jsonObject?.get("member_id")?.jsonPrimitive?.content}")
}
room.bind(BirdProtocol.Event.MEMBER_REMOVED) { data ->
println("left ${data?.jsonObject?.get("member_id")?.jsonPrimitive?.content}")
}
}In Swift en Kotlin geeft subscribe een basiskanaaltype terug. Cast het naar PresenceChannel voordat je myId of members benadert. Swift biedt een ledenmap voor bird:subscription_succeeded en een Member voor join- en leave-events. Kotlin levert elk event als JsonElement. In beide clients lees je het actuele roster uit room.members.
bird:subscription_succeeded wordt geactiveerd wanneer het abonnement voltooid is. Op dat moment bevat room.members het actuele roster en bevat room.myId je member_id. Render dit initiële roster voordat je latere join- en leave-events toepast.
Autorisatie volgt dezelfde flow als een privékanaal met één toevoeging: je endpoint retourneert member_data, een JSON-string met member_id en optionele member_info, en het moet exact die string ondertekenen. Zie Kanalen autoriseren.
Gebruik member_info veilig
Elk kanaallid ontvangt member_info. Gebruik het voor kleine openbare profielgegevens zoals een weergavenaam of avatar-URL. Voeg geen e-mailadressen, autorisatierollen of andere gevoelige gegevens toe.
Je backend wijst member_id en member_info toe in het ondertekende autorisatieantwoord. De client kan een abonnement aanvragen, maar kan de ondertekende identiteit niet kiezen.
Leden en verbindingen
Eén lid kan meerdere verbindingen hebben. Drie open tabbladen leveren bijvoorbeeld één lid en drie verbindingen op:
| Wat er gebeurt | Lid-event | Kanaalverbindingsteller |
|---|---|---|
| Eerste tabblad abonneert | bird:member_added | 1 |
| Tweede tabblad abonneert | geen | 2 |
| Tweede tabblad sluit | geen | 1 |
| Laatste tabblad sluit | bird:member_removed | 0 |
room.members vertegenwoordigt identiteiten in plaats van sessies. Om het aantal open verbindingen te ontvangen, schakel je Connection counting en Connection count events in en bind je bird:connection_count.
Presence uitlezen vanaf je server
Er bestaan twee server-side reads, en geen van beide vereist een abonnement:
- Kanaalleden opvragen retourneert de member_id-waarden die momenteel geabonneerd zijn op een presence-kanaal.
- Een kanaal opvragen met include=member_count retourneert hoeveel leden aanwezig zijn, zonder ze op te sommen.
member_count is alleen voor presence-kanalen. Het opvragen op een openbaar of privékanaal is een validatiefout, omdat die kanalen geen leden hebben.
Je kunt het ook opvragen tijdens het publiceren; dat retourneert de status van elk doelkanaal op dat moment. Zie Events publiceren.
Volgende stappen
- Kanalen autoriseren behandelt member_data en de string die je backend ondertekent.
- Privékanalen gebruiken dezelfde autorisatie zonder identiteit.
- Eventontvangers uitsluiten voorkomt dat een client zijn eigen wijziging ontvangt.
Gerelateerde bronnen
Ga verder met de documentatie, gidsen en voorbeelden voor dit onderwerp. De bronnen zijn in het Engels.
Ontdek de mogelijkheidRealtimeVolg het leerpadBuild your first integrationImplementatiegidsSend your first realtime event
Probeer de oefening en ontvang een implementatieoverzicht