你可以在通知服务中运行后台任务吗?

时间:2017-07-28 01:28:33

标签: ios swift swift3 ios10

我有推送通知服务(UNNotificationServiceExtension),它拦截我的推送通知以显示丰富的推送通知。我试图联系我的服务器,但我认为服务在运行所有代码之前终止。我用最后的[修改]位来解决这个问题,而不是我的代码,没有我的代码。

我已经查看了无声通知,但我发现当用户杀死应用程序时这不会运行,这样就不行了。

现在我正在考虑采取以下措施:

let queue = DispatchQueue.global(qos: .background) 
queue.async {
    self.contactServer()
}

它运行但从未联系过服务器。所以现在我不确定代码是否有效?我该怎么办?如何将任务传递给系统以在后台运行它因为我认为此服务太快而无法实际等待联系服务器。对不起,我是swift和iOS的新手。

有没有办法可以按照以下方式做点什么:

await contactServer() 

注意:我知道Swift没有等待,但你得到了我想说的话。

这是我的完整代码:

import UserNotifications
import ServerEngine
import UIKit

class NotificationService: UNNotificationServiceExtension {


var backgroundTask: UIBackgroundTaskIdentifier!
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?

override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
    self.contentHandler = contentHandler
    bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

    if let bestAttemptContent = bestAttemptContent {
        // Modify the notification content here...
        bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"

        doBgTask()


        contentHandler(bestAttemptContent)
    }
}


func doBgTask() {
    let queue = DispatchQueue.global(qos: .background)
    queue.async {
        serverEngine.touchBase()
    }
}

0 个答案:

没有答案