8个版本
0.2.0 | 2024年7月11日 |
---|---|
0.1.6 | 2024年4月25日 |
#1246 in 游戏开发
每月24次下载
22KB
403 行
bevy_ios_notifications
Rust crate和Swift package,便于将iOS的本地Notification API集成到Bevy应用程序中。
使用此crate的我们游戏演示:zoolitaire.com
另请参阅 bevy_ios_iap、bevy_ios_alerts、bevy_ios_gamecenter、bevy_ios_review 及 bevy_ios_impact
功能
- 更改/读取徽章
- 获取远程推送deviceToken
- 安排本地通知
- 启用/禁用在应用前台时显示通知
- 以及(在Unity中)众所周知难以实现的事情,例如:点击了哪个通知
说明
- 添加到XCode:添加SPM(Swift Package Manager)依赖项
- 添加Rust依赖项
- 设置插件
使用Apple Push Notification Dashboard简单发送测试推送通知。
1. 添加到XCode
转到 文件
-> 添加包依赖项
,并将 https://github.com/rustunit/bevy_ios_notifications.git
粘贴到右上角的搜索栏:
2. 添加Rust依赖项
cargo add bevy_ios_notifications
或
bevy_ios_notifications = { version = "0.2" }
3. 设置插件
初始化Bevy插件
// requests permissions for alerts, sounds and badges
app.add_plugins(bevy_ios_notifications::IosNotificationsPlugin::request_permissions_on_start(true, true, true));
在应用程序代码中触发警报
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!(),
}
}
}
实现细节
- 由于需要发送和接收更复杂的数据类型,此crate使用protobuf进行处理(查看模式)
- 因为winit目前不允许您挂钩到AppDelegates的
didRegisterForRemoteNotificationsWithDeviceToken
回调,我们使用方法swizzling来拦截这些(查看代码,查看winit PR(不要抱太大希望))
Bevy版本支持
bevy | bevy_ios_notifications |
---|---|
0.14 | 0.2,main |
0.13 | 0.1 |
许可证
此存储库中所有代码均采用双许可,以下任选其一:
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- Apache 许可证,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
您可选择您喜欢的许可证。这意味着您可以选择您偏好的许可证。
您的贡献
除非您明确说明,否则根据 Apache-2.0 许可证定义,您有意提交以包含在作品中的任何贡献,均应如上所述双许可,不附加任何额外条款或条件。
依赖关系
~24MB
~437K SLoC