适用于 iOS、Android 和 Web 的推送通知。
令牌管理抽象、逐设备订阅状态、原生富载荷、分群定向。与所有其他 Bird 渠道相同的认证、相同的幂等性、相同的 Webhook —— 因为它们都由同一个工程团队构建。
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
// Send by device token...
const { data, error } = await bird.push.send({
to: "token_aPa91Hb...XzQ",
title: "Your driver is two minutes away",
body: "Tap to see the live map.",
data: { ride_id: "ride_2891" },
}).safe();
// ...or by user_id — we fan out to every opted-in device.
await bird.push.send({
to: { user_id: "usr_4hQ2m" },
title: "Your code is 482917",
body: "Enter it on the login screen.",
data: { kind: "otp" },
});
if (error) throw error;
console.log(data.id);
// → "push_2nQ81oP3..."从 npm install 到首次发送仅需 5 分钟
使用您已熟悉的编程语言发送通知。
覆盖所有主流运行时的 SDK。从移动端或 Web 客户端注册令牌;从后端通过令牌或 user_id 发送。
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.push.send({
to: "token_aPa91Hb",
title: "Hello",
body: "From Bird Push",
data: { kind: "demo" },
}).safe();十个基本操作,将 APNs 和 FCM 统一为一个端点。
底层使用真正的 APNs 和 FCM —— 中间没有第三方推送聚合器。我们只是将平台差异隐藏在统一的接口之后。
- 01
一次调用覆盖 iOS、Android 和 Web
一个 bird.push.send 调用。我们根据已注册设备自动分发到 APNs、FCM 和 W3C Push Protocol。
- 02
令牌管理抽象
使用 bird.push.tokens.register 注册令牌。我们自动跟踪平台、语言区域和最后活跃时间,无需您手动处理。
- 03
按令牌或 user_id 发送
Address a single device, or pass
{ user_id }and we fan out to every opted-in device they own. - 04
逐设备订阅状态
每个注册的令牌都有独立的订阅状态。撤销一个不会影响其他设备。
- 05
原生富载荷
标题、正文、图片、操作按钮、深层链接 URL、自定义数据 —— 准确映射到 APNs alert 和 FCM notification。
- 06
静默/后台通知
传入 content_available: true,我们会根据平台正确路由到 APNs 后台推送和 FCM 纯数据推送。
- 07
分群定向
在注册时为用户打标签;通过 bird.push.send 按标签定向发送。无需集成第三方 CDP。
- 08
送达与打开回执
push.delivered、push.opened、push.dismissed 事件。与所有其他渠道相同的 HMAC 信封。
- 09
令牌生命周期自动管理
当 APNs / FCM 返回未注册令牌时,我们自动标记为失效并停止发送。无需手动清理。
- 10
相同的认证,相同的错误信封
一个 API 密钥即可用于 Push、SMS、Email、WhatsApp、Voice。所有渠道共用一套错误类型注册表。
我们为何打造 Push
因为推送不应该和您的 SMS、邮件和验证服务分属不同的供应商。
每个产品团队最终都会搭建相同的技术栈:iOS 用 APNs,Android 用 FCM,Web 用 Service Worker,再加一张数据库表记录哪个用户有哪些令牌及其订阅状态。我们构建了这张表,然后再次构建,最终将其开放为 bird.push.tokens.register 和 bird.push.send。与 Email 和 SMS 相同的认证、相同的幂等性、相同的错误信封 —— 因此推送失败的 OTP 可以在同一请求中降级到 SMS。
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
// Send by device token...
const { data, error } = await bird.push.send({
to: "token_aPa91Hb...XzQ",
title: "Your driver is two minutes away",
body: "Tap to see the live map.",
data: { ride_id: "ride_2891" },
}).safe();
// ...or by user_id — we fan out to every opted-in device.
await bird.push.send({
to: { user_id: "usr_4hQ2m" },
title: "Your code is 482917",
body: "Enter it on the login screen.",
data: { kind: "otp" },
});
if (error) throw error;
console.log(data.id);
// → "push_2nQ81oP3..."每次状态变更都是一个 Webhook。
HMAC 签名载荷,防重放,幂等。所有 Bird 渠道使用相同的信封 —— 学会一个,全部掌握。
{
"type": "push.delivered",
"id": "evt_9pT81y...",
"created_at": "2026-05-19T15:42:01.221Z",
"data": {
"push_id": "push_2nQ81oP3",
"user_id": "usr_4hQ2m",
"platform": "ios",
"device": "iPhone15,2",
"latency_ms": 218
}
}重试策略:5 秒、30 秒、5 分钟、30 分钟、2 小时、6 小时、12 小时。最终尝试后进入死信队列;所有死信事件均可从控制台或 API 重放。
push.queued已被 API 接受并排队等待发送。push.sent已移交给 APNs / FCM / W3C Push 服务器。push.delivered服务商确认已送达设备(如可用 —— APNs 为尽力而为)。push.opened用户点击了通知(如果您的应用进行了埋点)。push.dismissed用户未打开直接关闭了通知(如果您的应用进行了埋点)。push.failed永久失败(令牌已注销、应用已移除)。令牌将被自动禁用。
如果您已集成 SMS,那就等于已集成 Push。
相同的认证、相同的幂等性契约、相同的错误信封、相同的 Webhook 结构。区别仅在于传输方式 —— 而非调用方式。
Push。
await bird.push.send({
to: { user_id: "usr_4hQ2m" },
title: "Your code",
body: `Code: ${code}`,
});一次调用。我们自动分发到用户拥有的所有已订阅设备,涵盖 APNs、FCM 和 Web。
SMS。
await bird.sms.send({
from: "Bird",
to: "+15005550006",
text: `Your code is ${code}.`,
});相同的信封,相同的幂等性契约。推送失败时降级到 SMS —— 或直接使用 SMS。