#bevy-plugin #ios #bevy #mobile #push-notifications #swift #gamedev

bevy_ios_notifications

用于与iOS通知API交互的Bevy插件

8个版本

0.2.0 2024年7月11日
0.1.6 2024年4月25日

#1246 in 游戏开发

每月24次下载

MIT许可证

22KB
403

bevy_ios_notifications

crates.io

Rust crate和Swift package,便于将iOS的本地Notification API集成到Bevy应用程序中。

https://github.com/rustunit/bevy_ios_notifications/assets/776816/78e9d708-1cdd-4e54-af2a-c6a5b787f98b

使用此crate的我们游戏演示:zoolitaire.com

另请参阅 bevy_ios_iapbevy_ios_alertsbevy_ios_gamecenterbevy_ios_reviewbevy_ios_impact

功能

  • 更改/读取徽章
  • 获取远程推送deviceToken
  • 安排本地通知
  • 启用/禁用在应用前台时显示通知
  • 以及(在Unity中)众所周知难以实现的事情,例如:点击了哪个通知

说明

  1. 添加到XCode:添加SPM(Swift Package Manager)依赖项
  2. 添加Rust依赖项
  3. 设置插件

使用Apple Push Notification Dashboard简单发送测试推送通知。

1. 添加到XCode

转到 文件 -> 添加包依赖项,并将 https://github.com/rustunit/bevy_ios_notifications.git 粘贴到右上角的搜索栏: xcode

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!(),
        }
    }
}

实现细节

Bevy版本支持

bevy bevy_ios_notifications
0.14 0.2,main
0.13 0.1

许可证

此存储库中所有代码均采用双许可,以下任选其一:

您可选择您喜欢的许可证。这意味着您可以选择您偏好的许可证。

您的贡献

除非您明确说明,否则根据 Apache-2.0 许可证定义,您有意提交以包含在作品中的任何贡献,均应如上所述双许可,不附加任何额外条款或条件。

依赖关系

~24MB
~437K SLoC