如何将 iOS 设备从暂停的应用程序状态唤醒?

How to wake iOS device from suspended app state?

我目前正在尝试创建一个 Flutter 应用程序,它可以在另一个用户引起的特定(未知)时间振动用户。我对 Android 版本的解决方案是使用 Firebase Cloud Messaging 启用推送通知,同时取消优化电池(针对应用程序)。我听到推送通知时,它是一个高优先级的有效负载将处理 App Doze(空闲待机)并且它在 android 上工作得很好。我最近在 iOS 版本上收到了推送通知,但通知似乎没有唤醒设备(并允许它监听 Firebase Firestore 上的变化,以便它可以振动)。如果收到推送通知,一种解决方案是 运行 代码(振动 API),但我不确定如何执行此操作。有没有办法让应用程序从挂起的应用程序状态唤醒,以便它可以检查 Firestore 上的更改?目前,它在应用程序后台运行时有效,但这还不够。

如果有帮助,这是我的通知负载:

const payload: admin.messaging.Message = {
          topic: newValue.lobbyCode,
          notification: {
            title: "Bzzzt!",
            body: "You've been buzzed!",
          },
          apns: {
            payload: {
              aps: {
                contentAvailable: true,
              },
            },
          },
          android: {
            priority: "high",
          },
        };

我目前正在使用 contentAvailable: true,因为我听说它可以用来解决这个问题。我也在使用 vibration.dart 插件,它似乎无法让我像在 Android 上那样完全控制振动。在 xcode 的功能上,我启用了 backgroundfetch、后台进程、远程消息传递和推送通知。但是,关于这些,我没有添加任何特定于 info.plist 的内容,因为我不确定后台获取和进程是否是解决方案。

编辑:我了解到当另一个应用程序在它之后打开时它也 suspended/not 工作(直到你 return 我的应用程序)。

我所做的是将声音权限添加到 iOS 端并上传一个空声音的自定义 CAF 文件。