2 个版本

0.10.1 2024 年 7 月 10 日
0.10.0 2024 年 6 月 26 日

#519 in 加密学

Download history 159/week @ 2024-06-24 44/week @ 2024-07-01 130/week @ 2024-07-08 23/week @ 2024-07-15 29/week @ 2024-07-22 19/week @ 2024-07-29 14/week @ 2024-08-05

93 每月下载量
用于 revolt-database

MIT 许可证

105KB
1.5K SLoC

a2

CI Status MIT licensed crates.io docs.rs

使用 Tokio 和异步发送的 Rust HTTP/2 Apple 推送通知服务。

要求

需要版本 1.0 或更高版本的 Tokio 执行器以及版本 1.60.0 或更高版本的 Rust 编译器。

功能

  • 基于 h2hyper crate 的快速异步发送。
  • 使用 serde 进行负载序列化和反序列化。
  • 提供了一种类型安全的方式来构建不同类型的负载。通过 Serialize 使用自定义数据,允许使用结构体或动态哈希表。
  • 支持使用自定义证书连接的 .p12 证书数据库。
  • 支持使用 .p8 私钥连接的认证令牌。
  • 如果使用认证令牌,将处理 Apple 指引下的签名续订和用于最大性能的缓存。
  • 提供加密原语由 openssl 或 ring 提供。

示例

该库支持使用证书和密码或使用团队 ID 和密钥 ID 的私钥连接到 Apple 推送通知服务 (请参阅示例)。两者均可从您的 Apple 账户获取,并且使用两者可以发送推送通知到单个应用程序。

要查看它在实际项目中的使用,请查看由 WalletConnect 开发的 Echo 服务器,该项目用于处理传入的 webhooks 并将其转换为推送通知。

注意事项

我们每天通过这个库推送数百万条通知,并且对此非常满意。如果您正在评估库的生产使用,以下是一些需要注意的事项。

  • 不要为每个请求都打开新的连接。苹果会将此视为拒绝服务攻击并阻止发送IP地址。当使用相同的Client进行多个请求时,如果通过该连接推送稳定的流量,则Client将保持连接活跃。

  • 对于一款应用,一个连接对于某些类型的负载已经足够了。使用http2协议时,事件是异步的,管道可以同时保留几个发出的请求。打开多个连接的最大原因是为了冗余,在多台不同的机器上运行发送服务。

  • 似乎苹果不喜欢发送大量的带有错误设备令牌的通知,这可能会导致ConnectionError错误。不要发送更多带有返回UnregisteredBadDeviceTokenDeviceTokenNotForTopic令牌的通知。

测试

cargo测试

依赖项

~18–28MB
~512K SLoC