Canali presence
Un canale il cui nome inizia con presence- usa l'autorizzazione dei canali privati e aggiunge l'identità del membro. Il tuo backend assegna a ogni iscritto un member_id. Gli iscritti ricevono la lista dei membri attuale e gli eventi quando i membri entrano o escono.
Usa i canali presence per elenchi di utenti online, visualizzatori di documenti, indicatori di digitazione o cursori collaborativi.
Iscrizione
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 e Kotlin, subscribe restituisce un tipo di canale base. Esegui il cast a PresenceChannel prima di accedere a myId o members. Swift fornisce una mappa dei membri per bird:subscription_succeeded e un Member per gli eventi di ingresso e uscita. Kotlin fornisce ogni evento come JsonElement. In entrambi i client, leggi l'elenco attuale da room.members.
bird:subscription_succeeded si attiva quando l'iscrizione è completata. A quel punto, room.members contiene l'elenco attuale e room.myId contiene il tuo member_id. Renderizza questo elenco iniziale prima di applicare i successivi eventi di ingresso e uscita.
L'autorizzazione segue lo stesso flusso di un canale privato con un'aggiunta: il tuo endpoint restituisce member_data, una stringa JSON che contiene member_id e member_info opzionali, e deve firmare esattamente quella stringa. Vedi Autorizzazione dei canali.
Usa member_info in modo sicuro
Ogni membro del canale riceve member_info. Usalo per piccoli dati di profilo pubblici come un nome visualizzato o un URL avatar. Non includere indirizzi email, ruoli di autorizzazione o altri dati sensibili.
Il tuo backend assegna member_id e member_info nella sua risposta di autorizzazione firmata. Il client può richiedere un'iscrizione ma non può scegliere l'identità firmata.
Membri e connessioni
Un membro può avere più connessioni. Ad esempio, tre schede aperte producono un membro e tre connessioni:
| Cosa succede | Evento membro | Connessioni al canale |
|---|---|---|
| Prima scheda si iscrive | bird:member_added | 1 |
| Seconda scheda si iscrive | nessuno | 2 |
| Seconda scheda si chiude | nessuno | 1 |
| Ultima scheda si chiude | bird:member_removed | 0 |
room.members rappresenta identità, non sessioni. Per ricevere il numero di connessioni aperte, abilita Connection counting e Connection count events, poi associa bird:connection_count.
Lettura della presence dal server
Esistono due letture lato server, e nessuna delle due richiede un'iscrizione:
- Elenco dei membri del canale restituisce i valori member_id attualmente iscritti a un canale presence.
- Ottenere un canale con include=member_count restituisce quanti membri sono presenti, senza elencarli.
member_count è disponibile solo per i canali presence. Richiederlo su un canale pubblico o privato produce un errore di validazione, perché quei canali non hanno membri.
Puoi anche richiederlo durante la pubblicazione: viene restituito lo stato di ogni canale di destinazione in quel momento. Vedi Pubblicazione degli eventi.
Passi successivi
- Autorizzazione dei canali tratta member_data e la stringa che il tuo backend firma.
- Canali privati offrono la stessa autorizzazione senza identità.
- Esclusione dei destinatari degli eventi impedisce a un client di ricevere la propria modifica.
Risorse correlate
Prosegui con la documentazione, le guide e gli esempi per questo argomento. Le risorse sono in inglese.
Esplora la funzionalitàRealtimeSegui il percorso di apprendimentoBuild your first integrationGuida all'implementazioneSend your first realtime event
Prova l'esercitazione e ottieni un brief di implementazione