#push-notifications #push #notifications #expo #react #native #send-notifications

expo_push_notification_client

Rust 版本的 Expo 推送通知客户端

14 个版本

0.4.1 2024 年 8 月 11 日
0.3.5 2024 年 6 月 17 日
0.3.1 2024 年 3 月 31 日
0.1.0 2023 年 12 月 25 日

#456 in Web 编程

Download history 4/week @ 2024-05-20 1/week @ 2024-06-03 119/week @ 2024-06-10 175/week @ 2024-06-17 5/week @ 2024-06-24 96/week @ 2024-07-01 7/week @ 2024-07-08 1/week @ 2024-07-22 171/week @ 2024-08-05 60/week @ 2024-08-12

232 每月下载次数

MIT/Apache 许可

53KB
1K SLoC

Rust 版本的 Expo 推送通知客户端

这是官方的 Rust 版本 Expo 推送通知客户端。

ci crates.io docs.rs license

客户端(ReactNative with Expo)

您需要从 Expo SDK 获取 Expo 推送令牌并将其发送到 Expo 服务器。有关更多详细信息,请参阅 文档

服务器(Rust)

安装

cargo add expo_push_notification_client

使用方法

use expo_push_notification_client::{Expo, ExpoClientOptions, ExpoPushMessage};

// Initialize Expo client
let expo = Expo::new(ExpoClientOptions {
    access_token: Some(access_token),
});

// Define Expo Push Tokens to send notifications to
let expo_push_tokens = ["ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]"];

// Build Expo Push Message with specified tokens
let expo_push_message = ExpoPushMessage::builder(expo_push_tokens).build()?;

// Send push notifications using Expo client
let tickets = expo.send_push_notifications(expo_push_message).await;

// Extract push notification IDs from tickets
let mut expo_push_ids = vec![];
for ticket in tickets {
    match ticket {
        ExpoPushTicket::Ok(ticket) => {
            expo_push_ids.push(ticket.id);
        }
        ExpoPushTicket::Error(e) => {
            // Handle error
        }
    }
}

// Retrieve push notification receipts using Expo client
expo.get_push_notification_receipts(expo_push_ids).await;

此外,您还可以通过添加更多选项来自定义 ExpoPushMessage。有关更多详细信息,请参阅 文档

// Build Expo Push Message with detailed configurations
let expo_push_message = ExpoPushMessage::builder(["ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]"])
    .body("body")
    .data(&[("data".to_string())])?
    .ttl(100)
    .expiration(100)
    .priority("high")
    .subtitle("subtitle")
    .sound("default")
    .badge(1)
    .channel_id("channel_id")
    .category_id("category_id")
    .mutable_content(true)
    .title("title")
    .build()?;

依赖关系

~9–21MB
~311K SLoC