繁体   English   中英

Swift-如何在后台获取某些静默通知,在前台获取其他静默通知?

[英]Swift -How to get certain silent notifications in the background and others in the foreground?

在我的应用程序中,用户可以互相发送聊天消息并下订单(类似于OfferUp)。 我使用无提示推送通知,但我没有收到任何问题。

我想做的就是拥有它,这样当userA向userB发送订单时,无论userB在background还是在foreground都会通过静默通知。

但是,当userA向userB发送消息时,仅当userB仅在background时才应通过静默通知。 如果userB在前台,则不需要通知。

我将orderId用于订单,将messageId用于消息。

我在App Delegate's收到静默通知:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

    let userInfo = notification.request.content.userInfo

    // I can parse userInfo and get the messageId or the orderId

    guard let userInfo = userInfo as? [String: Any] else { return }

    if let orderId = userInfo["orderId"] as? String {
    }

    if let messageId = userInfo["messageId"] as? String {
    }
}

OrderVC:

func orderWasPlacedNowSendNotification() {

    let urlString = "https://fcm.googleapis.com/fcm/send"

    var apsDict = [String: Any]()
    apsDict.updateValue(title, forKey: "title")
    apsDict.updateValue(body, forKey: "body")
    apsDict.updateValue(1, forKey: "content-available")

    var dataDict = [String: Any]()
    dataDict.updateValue(orderId, forKey: "orderId") // orderId

    var paramDict = [String: Any]()
    paramDict.updateValue(apsDict, forKey: "notification")
    paramDict.updateValue(toToken, forKey: "to")

    paramDict.updateValue(dataDict, forKey: "data")

    let request = NSMutableURLRequest(url: url as URL)
    URLSession.shared.dataTask(with: request as URLRequest) ...
}

MessageVC:

func messageWasSentNowSendNotification() {

    let urlString = "https://fcm.googleapis.com/fcm/send"

    var apsDict = [String: Any]()
    apsDict.updateValue(title, forKey: "title")
    apsDict.updateValue(body, forKey: "body")
    apsDict.updateValue(1, forKey: "content-available")

    var dataDict = [String: Any]()
    dataDict.updateValue(messageId, forKey: "messageId") // messageId

    var paramDict = [String: Any]()
    paramDict.updateValue(apsDict, forKey: "notification")
    paramDict.updateValue(toToken, forKey: "to")

    paramDict.updateValue(dataDict, forKey: "data")

    let request = NSMutableURLRequest(url: url as URL)
    URLSession.shared.dataTask(with: request as URLRequest) ...
}

如何分隔静默通知?

根据您的逻辑,您需要在willPresent内部返回

if application.applicationState == .active {   
    completionHandler([])  // no alert/sound
}
else if application.applicationState == .background  { 
     completionHandler([.sound,.alert]) // alert with sound
} 

您可以根据需要添加更多检查,但最后一次分别返回任何完成以进行倾斜/警报

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM