expo_push_notification_client

Crates.ioexpo_push_notification_client
lib.rsexpo_push_notification_client
version0.5.1
sourcesrc
created_at2023-12-25 10:36:57.684307
updated_at2024-11-04 06:27:01.522621
descriptionExpo Push Notification Client for Rust
homepagehttps://github.com/katayama8000/expo-push-notification-client/blob/main/README.md
repositoryhttps://github.com/katayama8000/expo-push-notification-client
max_upload_size
id1080171
size71,667
katayama8000 (katayama8000)

documentation

README

Expo Push Notification Client for Rust

This is an official Expo Push Notification Client for Rust.

ci crates.io docs.rs license

Client (ReactNative with Expo)

You need to get Expo Push Token from Expo SDK and send it to Expo server first. See docs for more details.

Server (Rust)

Install

cargo add expo_push_notification_client

Usage

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;

Additionally, you can further customize the ExpoPushMessage by adding more options. Refer to the docs for more details.

// Build Expo Push Message with detailed configurations
#[derive(Serialize)]
struct Data {
    data: String,
}

let expo_push_message = ExpoPushMessage::builder(["ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]"])
    .body("body")
    .data(&Data { 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()?;

Changing TLS Backend

This crate uses Reqwest with its default features. However, you can change tls backend by disabling the default features and enabling the rustls-tls feature, which uses a Rust implementation of TLS. This approach may offer better compatibility across different environments.

expo_push_notification_client = { version = "0.5.0", default-features = false, features = ["rustls-tls"] }
Commit count: 97

cargo fmt