bevy_ios_notifications
Rust crate to easily integrate iOS's native Notification API into a Bevy application.
Talks to UserNotifications directly via objc2 - no Swift package or XCode setup required.
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 Rust dependency
- Setup Plugin
Use Apple Push Notification Dashboard to simply send push notifications for testing.
1. Add Rust dependency
cargo add bevy_ios_notifications
or
bevy_ios_notifications = { version = "0.8" }
2. Setup Plugin
Initialize Bevy Plugin:
// requests permissions for alerts, sounds and badges
app.add_plugins;
Trigger Alert in your application code:
// this will clear the badge, the notification center and all pending ones
// process async events coming in from ios notification system
Implementation Details
UNUserNotificationCenteris called directly through objc2, the delegate that receives triggered notifications and their responses is a Rust class (see code)- device tokens are only handed to the
UIApplicationDelegate, and winit still does not let you hook into itsdidRegisterForRemoteNotificationsWithDeviceTokencallback (see winit PR (dont hold your breath)). So we graft the two remote registration callbacks onto whatever app delegate exists and install our own if there is none (see code) - this composes with bevy_ios_app_delegate: if it already installed a delegate we hook that one instead of setting up a second, and an implementation we displace is still called
Our Other Crates
- bevy_debug_log
- bevy_device_lang
- bevy_web_popups
- bevy_libgdx_atlas
- bevy_ios_review
- bevy_ios_gamecenter
- bevy_ios_alerts
- bevy_ios_iap
- bevy_ios_impact
- bevy_ios_safearea
Bevy version support
| bevy | bevy_ios_notifications |
|---|---|
| 0.19 | 0.7,0.8,main |
| 0.18 | 0.6 |
| 0.17 | 0.5 |
| 0.16 | 0.4 |
| 0.15 | 0.3 |
| 0.14 | 0.2 |
| 0.13 | 0.1 |
License
All code in this repository is dual-licensed under either:
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
at your option. This means you can select the license you prefer.
Your contributions
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.