向成员发送事件
将个人事件(例如订单更新、共享文档通知或余额变动)直接发送给成员。无需为每个用户创建单独的频道。
本指南介绍如何接收成员事件、从服务器发送成员事件,以及如何在成员事件与私有频道之间做出选择。
开始之前
连接必须使用成员身份登录。请参阅要求授权连接,了解 signin() 及其授权端点。
在应用中接收事件
signin() 成功后,在 bird.member 上绑定事件名称。使用与服务器作为 event 发送的相同名称。成员事件无需订阅频道。
import { BirdRealtime } from "@messagebird/realtime";
const bird = new BirdRealtime({
appKey: "your-app-key",
region: "us1",
memberAuthEndpoint: "/bird/auth/member",
});
await bird.signin();
bird.member.bind("order.shipped", (data) => {
showToast(`Order ${data.order_id} is on its way`);
});import BirdRealtime
let bird = BirdRealtime(options: .init(
appKey: "your-app-key",
region: "us1",
memberAuthEndpoint: URL(string: "https://your-backend.example.com/bird/auth/member")
))
let me = try await bird.signin()
print("signed in as", me.memberId)
bird.member.bind("order.shipped") { data in
let orderId = (data as? [String: Any])?["order_id"] as? String ?? ""
showToast("Order \(orderId) is on its way")
}import com.bird.realtime.BirdRealtime
import com.bird.realtime.BirdRealtimeOptions
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
val bird = BirdRealtime(
BirdRealtimeOptions(
appKey = "your-app-key",
region = "us1",
memberAuthEndpoint = "https://your-backend.example.com/bird/auth/member",
)
)
val me = bird.signin() // suspending
println("signed in as ${me.memberId}")
bird.member.bind("order.shipped") { data ->
val orderId = data?.jsonObject?.get("order_id")?.jsonPrimitive?.content
showToast("Order $orderId is on its way")
}客户端会保留绑定,在重新连接后登录,然后恢复成员事件的传递。
signin() 在三种客户端中都是异步的。在浏览器中返回 promise,在 Swift 中使用 async,在 Kotlin 中挂起。请在相应的异步上下文中调用。一次调用即可启用后续重新连接时的自动登录。
从服务器发送事件
使用应用 ID、成员 ID 和事件调用 members.send:
await bird.realtime.members.send("rap_01krdgeqcxet5s7t44vh8rt9mg", "u_42", {
event: "order.shipped",
data: { order_id: "ord_123" },
});client.realtime.members.send(
"rap_01krdgeqcxet5s7t44vh8rt9mg",
"u_42",
event="order.shipped",
data={"order_id": "ord_123"},
)err = client.Realtime.Members.Send(context.Background(), "rap_01krdgeqcxet5s7t44vh8rt9mg", "u_42", bird.RealtimeMemberSendParams{
Event: "order.shipped",
Data: map[string]any{"order_id": "ord_123"},
})$bird->realtime->members->send('rap_01krdgeqcxet5s7t44vh8rt9mg', 'u_42', (new RealtimeMemberPublish())
->setEvent('order.shipped')
->setData(['order_id' => 'ord_123']));curl -X POST \
https://us1.platform.bird.com/v1/realtime/apps/rap_01krdgeqcxet5s7t44vh8rt9mg/members/u_42/events \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "X-Realtime-Key: $BIRD_REALTIME_KEY" \
-H "X-Realtime-Secret: $BIRD_REALTIME_SECRET" \
-H "Content-Type: application/json" \
-d '{ "event": "order.shipped", "data": { "order_id": "ord_123" } }'谁会收到事件
- 该成员持有的每个连接,跨越其所有标签页和设备。一次调用,无论有多少个连接。
- 其他人不会收到,即使另一个成员的应用绑定了相同的事件名称。
- Nothing if the member has no live connections. 如果该成员没有活跃连接,则无人收到。调用仍然成功,因为传递不会排队,也无法确认在线状态。请存储持久通知,并在成员返回时加载。
成员事件还是私有频道
| 使用成员事件 | 使用私有频道 |
|---|---|
| 接收者即目标:个人通知、账户变更 | 目标是多人关注的共享对象:文档、订单、房间 |
| 无需命名或授权频道 | 需要命名频道并对每个订阅进行授权 |
| 无在线状态、连接计数或客户端事件 | 支持在线状态、连接计数和客户端事件 |
后续步骤
相关资源
继续查阅此主题的文档、指南和示例。资源为英文。