2



正如标题所述,我目前无法从 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/ {path to project}。我从 POSTMAN 中调用这个 url。我还指定了访问令牌和 json 正文。

推送消息中的 apns 标头设置为“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”

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

4

1 回答 1

2

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

于 2020-01-26T18:53:54.770 回答