iOS 在收到静默远程通知后发送本地通知

Posted

技术标签:

【中文标题】iOS 在收到静默远程通知后发送本地通知【英文标题】:iOS send a local notification after receiving a silent remote notification 【发布时间】:2019-11-04 20:19:39 【问题描述】:

当服务器发送静默通知时,我想检查用户是否处于正确的状态,然后如果用户处于正确的状态,则发出本地通知,或者如果用户不在,则不执行任何操作正确的状态。

这可行吗?

谢谢!

【问题讨论】:

【参考方案1】:

如果您使用"content-available": 1 发送推送通知,它将是静默推送(参见Apple 的local and remote notification guide)。

然后,您希望使用UNUserNotificationCenter.current().add() 有条件地安排本地通知,并为UNUserNotificationCenterDelegate 实现委托方法。

【讨论】:

【参考方案2】:

这不是个好主意。 系统将后台通知视为低优先级。 证明:https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app

所以后台通知不适合您。 如果您不想在某些情况下显示通知,您只需在 UNUserNotificationCenterDelegate 的实现方法不调用完成处理程序:

func userNotificationCenter(_ center: UNUserNotificationCenter,
                            willPresent notification: UNNotification,
                            withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 
guard self.shouldShowNotification(notification) else  return  // don't call completion handler if we're don't want to show push
completionHandler(.alert)


func shouldShowNotification(_ notification: UNNotification) -> Bool 
  if ... 
    return true
   else 
    return false
  

【讨论】:

以上是关于iOS 在收到静默远程通知后发送本地通知的主要内容,如果未能解决你的问题,请参考以下文章

为啥我收到远程通知时没有发送本地通知?

iOS - 当应用程序被用户强制退出时处理静默推送通知

如何清除 iOS 的远程推送通知?

iOS 静默通知互联网连接

当 iOS 在后台并收到远程通知时发送数据到 Watch

选择退出用户的静默推送通知