7 releases
new 0.1.6 | Apr 25, 2024 |
---|---|
0.1.5 | Apr 25, 2024 |
#240 in Game dev
204 downloads per month
20KB
403 lines
bevy_ios_notifications
Rust crate and Swift package to easily integrate iOS's native Notification API into a Bevy application.
Demo from our game using this crate: zoolitaire.com
Features
- change/read badge
- get remote push deviceToken
- scheduling local notifications
- enable/disable presenting notifications while app is foregrounded
- and the notoriously hard (in unity) to do things like: what notification was clicked
Instructions
- Add to XCode: Add SPM (Swift Package Manager) dependency
- Add Rust dependency
- Setup Plugin
1. Add to XCode
Go to File
-> Add Package Dependencies
and paste https://github.com/rustunit/bevy_ios_notifications.git
into the search bar on the top right:
2. Add Rust dependency
cargo add bevy_ios_notifications
or
bevy_ios_notifications = { version = "0.1" }
3. Setup Plugin
Initialize Bevy Plugin:
// requests permissions for alerts, sounds and badges
app.add_plugins(bevy_ios_notifications::IosNotificationsPlugin::request_permissions_on_start(true, true, true));
Trigger Alert in your application code:
fn system_triggering_notifications(ios_notifications: NonSend<IosNotificationsResource>) {
// should be called after the permission response arrives
ios_notifications.registered_for_push();
// set app icon badge
ios_notifications.set_badge(1);
// schedule a local notification
let id = IosNotificationsResource::schedule(
IosNotificationRequest::new()
.title("title")
.body("body")
.trigger(IosNotificationTrigger::one_shot(4))
// if not defined it will be creating a UUID for you
.identifier("custom id")
.build(),
);
}
// this will clear the badge, the notification center and all pending ones
fn process_occluded_events(
mut e: EventReader<WindowOccluded>,
ios_notifications: NonSend<IosNotificationsResource>,
) {
for ev in e.read() {
if !ev.occluded {
ios_notifications.remove_all_pending();
ios_notifications.remove_all_delivered();
ios_notifications.set_badge(0);
}
}
}
// process async events coming in from ios notification system
fn process_notifications(
mut events: EventReader<IosNotificationEvents>,
) {
for e in events.read() {
match e {
IosNotificationEvents::PermissionResponse(_) => todo!(),
IosNotificationEvents::NotificationSchedulingSucceeded(_) => todo!(),
IosNotificationEvents::NotificationSchedulingFailed(_) => todo!(),
IosNotificationEvents::NotificationTriggered(_) => todo!(),
IosNotificationEvents::PendingNotifications(_) => todo!(),
IosNotificationEvents::NotificationResponse(_) => todo!(),
IosNotificationEvents::RemoteNotificationRegistration(_) => todo!(),
}
}
}
Dependencies
~18–47MB
~757K SLoC