Presence channel
Channel yang namanya diawali dengan presence- menggunakan otorisasi private channel dan menambahkan identitas anggota. Backend Anda menetapkan member_id untuk setiap subscriber. Subscriber menerima daftar anggota terkini dan event saat anggota bergabung atau keluar.
Gunakan presence channel untuk daftar online, penampil dokumen, indikator pengetikan, atau kursor kolaboratif.
Berlangganan
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}")
}
}Di Swift dan Kotlin, subscribe mengembalikan tipe channel dasar. Lakukan cast ke PresenceChannel sebelum mengakses myId atau members. Swift menyediakan member map untuk bird:subscription_succeeded dan Member untuk event join dan leave. Kotlin menyediakan setiap event sebagai JsonElement. Di kedua klien, baca daftar anggota terkini dari room.members.
bird:subscription_succeeded aktif saat langganan selesai. Pada titik itu, room.members berisi daftar anggota terkini dan room.myId berisi member_id Anda. Render daftar awal ini sebelum menerapkan event join dan leave berikutnya.
Otorisasi mengikuti alur yang sama seperti private channel dengan satu tambahan: endpoint Anda mengembalikan member_data, string JSON yang membawa member_id dan member_info opsional, dan harus menandatangani string tersebut persis seperti itu. Lihat Mengotorisasi channel.
Gunakan member_info dengan aman
Setiap anggota channel menerima member_info. Gunakan untuk data profil publik kecil seperti nama tampilan atau URL avatar. Jangan sertakan alamat email, peran otorisasi, atau data sensitif lainnya.
Backend Anda menetapkan member_id dan member_info dalam respons otorisasi yang ditandatangani. Klien dapat meminta langganan tetapi tidak dapat memilih identitas yang ditandatangani.
Anggota dan koneksi
Satu anggota dapat memiliki beberapa koneksi. Misalnya, tiga tab terbuka menghasilkan satu anggota dan tiga koneksi:
| Yang terjadi | Event anggota | Jumlah koneksi channel |
|---|---|---|
| Tab pertama berlangganan | bird:member_added | 1 |
| Tab kedua berlangganan | tidak ada | 2 |
| Tab kedua ditutup | tidak ada | 1 |
| Tab terakhir ditutup | bird:member_removed | 0 |
room.members merepresentasikan identitas, bukan sesi. Untuk menerima jumlah koneksi terbuka, aktifkan Connection counting dan Connection count events, lalu bind bird:connection_count.
Membaca presence dari server Anda
Ada dua pembacaan sisi server, dan keduanya tidak memerlukan langganan:
- Daftar anggota channel mengembalikan nilai member_id yang saat ini berlangganan di presence channel.
- Dapatkan channel dengan include=member_count mengembalikan jumlah anggota yang hadir, tanpa mencantumkannya.
member_count hanya untuk presence. Memintanya pada public atau private channel menghasilkan error validasi, karena channel tersebut tidak memiliki anggota.
Anda juga dapat memintanya saat melakukan publish, yang mengembalikan status setiap channel target pada saat itu. Lihat Mempublikasikan event.
Langkah selanjutnya
- Mengotorisasi channel membahas member_data dan string yang ditandatangani backend Anda.
- Private channel adalah otorisasi yang sama tanpa identitas.
- Mengecualikan penerima event mencegah klien menerima perubahannya sendiri.
Sumber daya terkait
Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini. Sumber daya tersedia dalam bahasa Inggris.
Jelajahi kemampuannyaRealtimeIkuti jalur pembelajaranBuild your first integrationPanduan implementasiSend your first realtime event
Coba praktiknya dan dapatkan ringkasan implementasi