2 个版本
0.10.1 | 2024 年 7 月 10 日 |
---|---|
0.10.0 | 2024 年 6 月 26 日 |
#519 in 加密学
93 每月下载量
用于 revolt-database
105KB
1.5K SLoC
a2
使用 Tokio 和异步发送的 Rust HTTP/2 Apple 推送通知服务。
要求
需要版本 1.0 或更高版本的 Tokio 执行器以及版本 1.60.0 或更高版本的 Rust 编译器。
功能
- 基于 h2 和 hyper crate 的快速异步发送。
- 使用 serde 进行负载序列化和反序列化。
- 提供了一种类型安全的方式来构建不同类型的负载。通过
Serialize
使用自定义数据,允许使用结构体或动态哈希表。 - 支持使用自定义证书连接的
.p12
证书数据库。 - 支持使用
.p8
私钥连接的认证令牌。 - 如果使用认证令牌,将处理 Apple 指引下的签名续订和用于最大性能的缓存。
- 提供加密原语由 openssl 或 ring 提供。
示例
该库支持使用证书和密码或使用团队 ID 和密钥 ID 的私钥连接到 Apple 推送通知服务 (请参阅示例)。两者均可从您的 Apple 账户获取,并且使用两者可以发送推送通知到单个应用程序。
要查看它在实际项目中的使用,请查看由 WalletConnect 开发的 Echo 服务器,该项目用于处理传入的 webhooks 并将其转换为推送通知。
注意事项
我们每天通过这个库推送数百万条通知,并且对此非常满意。如果您正在评估库的生产使用,以下是一些需要注意的事项。
-
不要为每个请求都打开新的连接。苹果会将此视为拒绝服务攻击并阻止发送IP地址。当使用相同的
Client
进行多个请求时,如果通过该连接推送稳定的流量,则Client
将保持连接活跃。 -
对于一款应用,一个连接对于某些类型的负载已经足够了。使用http2协议时,事件是异步的,管道可以同时保留几个发出的请求。打开多个连接的最大原因是为了冗余,在多台不同的机器上运行发送服务。
-
似乎苹果不喜欢发送大量的带有错误设备令牌的通知,这可能会导致
ConnectionError
错误。不要发送更多带有返回Unregistered
、BadDeviceToken
或DeviceTokenNotForTopic
令牌的通知。
测试
cargo测试
依赖项
~18–28MB
~512K SLoC