ios - 无法从 UNNotificationServiceExtension 中安排任务 - 错误 : BGTaskSchedulerErrorDomain error 1

标签 ios swift background-process unnotificationserviceextension

正如标题所述,我目前无法从 UNNotificationServiceExtension 中安排任务。我想在调用以下函数并因此收到推送时安排任务:
func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void)
目前,只要我打电话:
try BGTaskScheduler.shared.submit(request)
输入catch子句,返回如下错误:'操作无法完成。 (BGTaskSchedulerErrorDomain 错误 1。)'

推送消息通过以下 url 与 Firebase 云消息一起发送,并在我的应用程序中完美接收:https://fcm.googleapis.com/v1/ {项目路径}。我从 POSTMAN 中调用这个 url。我还指定了访问 token 和 json 正文。

推送消息中的 apns header 设置为“apns-push-type”:“background”。并且payload.aps具有以下值:“apns-priority”:“5”,“content-available”:1,“mutable-content”:1。我认为这一切正常,因为我验证了这一点。

奇怪的是,我确实让后台任务在实际应用程序中工作,所以没有从 UNNotificationServiceExtension 中触发它。我试过这个来检查代码是否真的有效。

我已经完成了我的研究,到目前为止我已经尝试了以下方法:
1. 我确保 info.plist 中的“允许的后台任务调度程序标识符”填充了正确的任务标识符。我已经三次检查了这个字符串在代码中的使用是否正确。

2. 在应用程序中启用了以下功能:“后台获取”、“远程通知”、“后台处理”。

3. 在 info.plist 中支持以下 UIBackgroundModes:'audio'、'fetch'、'processing'、'remote-notification' 和 'voip'。这些相同的 UIBackgroundModes 也被输入到 UNNotificationServiceExtension info.plist 中(我这样做只是为了确定)。

4. 我确保任务在“didFinishLaunchingWithOptions”的 AppDelegate 中注册

5. 每次实际触发任务时,我都会调用“expirationHandler”和“setTaskCompleted”

非常感谢任何帮助或指导!
提前致谢 ;-)

最佳答案

后台任务好像不能在模拟器上调度,我用模拟器的时候遇到了和你一样的错误。在真实设备上运行时,一切都很好。
希望这可以帮助你。

关于ios - 无法从 UNNotificationServiceExtension 中安排任务 - 错误 : BGTaskSchedulerErrorDomain error 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58395578/

相关文章:

ios - 通过 kind 切换 Collectionviews 页眉/页脚

ios - ionic 应用程序恢复和暂停

ubuntu - 在 docker build 的一个步骤中在容器中运行后台进程

ios - 使用带有自动布局的 UIScrollView

ios - iOS:inAppPurchase:如何一次购买多个(消耗性)产品?

iphone - 如何访问我在相机应用程序中保存的照片的相册?

swift - 如何提取 swift 3 字典的子集

ios - Swift:通过 presentViewController 传递导航栏

ios - 如何强制应用程序在从后台返回时始终从头开始?

iphone - NSString 中的撇号和反撇号