Push is being upgraded

适用于 iOS、Android 和 Web 的推送通知

令牌管理抽象、逐设备订阅状态、原生富载荷、分群定向。与所有其他 Bird 渠道相同的认证、相同的幂等性、相同的 Webhook —— 因为它们都由同一个工程团队构建。

push.ts
200 · 0.2s
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 发送。

1
2
3
4
5
6
7
8
9
10
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 —— 中间没有第三方推送聚合器。我们只是将平台差异隐藏在统一的接口之后。

  1. 01

    一次调用覆盖 iOS、Android 和 Web

    一个 bird.push.send 调用。我们根据已注册设备自动分发到 APNs、FCM 和 W3C Push Protocol。

  2. 02

    令牌管理抽象

    使用 bird.push.tokens.register 注册令牌。我们自动跟踪平台、语言区域和最后活跃时间,无需您手动处理。

  3. 03

    按令牌或 user_id 发送

    Address a single device, or pass { user_id } and we fan out to every opted-in device they own.

  4. 04

    逐设备订阅状态

    每个注册的令牌都有独立的订阅状态。撤销一个不会影响其他设备。

  5. 05

    原生富载荷

    标题、正文、图片、操作按钮、深层链接 URL、自定义数据 —— 准确映射到 APNs alert 和 FCM notification。

  6. 06

    静默/后台通知

    传入 content_available: true,我们会根据平台正确路由到 APNs 后台推送和 FCM 纯数据推送。

  7. 07

    分群定向

    在注册时为用户打标签;通过 bird.push.send 按标签定向发送。无需集成第三方 CDP。

  8. 08

    送达与打开回执

    push.delivered、push.opened、push.dismissed 事件。与所有其他渠道相同的 HMAC 信封。

  9. 09

    令牌生命周期自动管理

    当 APNs / FCM 返回未注册令牌时,我们自动标记为失效并停止发送。无需手动清理。

  10. 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。

push.ts
200 · 0.2s
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 渠道使用相同的信封 —— 学会一个,全部掌握。

POST /webhooks/bird
signed
{
  "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。

push
await bird.push.send({
  to:    { user_id: "usr_4hQ2m" },
  title: "Your code",
  body:  `Code: ${code}`,
});

一次调用。我们自动分发到用户拥有的所有已订阅设备,涵盖 APNs、FCM 和 Web。

SMS。

sms
await bird.sms.send({
  from: "Bird",
  to:   "+15005550006",
  text: `Your code is ${code}.`,
});

相同的信封,相同的幂等性契约。推送失败时降级到 SMS —— 或直接使用 SMS。

每条通知 $0.0005,所有平台统一价格。

按已送达通知计费。iOS、Android 和 Web 统一费率。APNs 和 FCM 上游免费,因此我们仅收取路由和控制台费用,而非传输费用。月发送量超过 1000 万条自动享受批量折扣。

从一个渠道开始。
准备好后,再添加其他渠道。

测试 API 密钥即刻可用。添加支付方式并验证发送者身份后,即可解锁生产环境。

Using Claude Code, Cursor, or Codex? Copy a setup prompt and your agent installs the Bird CLI and skills for you. Pick yours: