当应用程序被用户杀死时,如何从后端删除发送到 iPhone 的通知

How to remove notification from backend sent to iPhone when app is killed by User

WhatsApp 一样,我将为 iPhone 应用程序实现一个 Web 界面。如果用户在两个环境(iPhone 和网络)上登录并收到来自另一个用户的消息,则会向 iPhone 和网络发送通知。当用户从 Web 界面读取该消息时,发送至 iPhone 的通知应被删除,就像 WhatsApp 所做的那样,即使 iPhone 应用程序已被终止。

我们如何删除 iPhone 从后端发送的通知?据我所知,当 app is killed by User.

时,我们无法控制 iPhone 应用程序

提前致谢。

我不知道whatsapp是如何管理的,但是你可以使用静默通知来实现上述feature.You需要打开后台模式以进行静默通知。

当静默通知出现时,它不会像常规通知那样出现在屏幕上,即使您的应用程序处于终止模式,它也会打开您的应用程序。系统会为您的应用程序提供一些时间来执行某些任务,您只能在该时间范围内执行。

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
       print(" Entire message \(userInfo)")
       print("Article avaialble for download: \(userInfo["articleId"]!)")
       //let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(scheduleLocalNotification), userInfo: nil, repeats: false)
       let state: UIApplication.State = application.applicationState
       switch state {
       case UIApplicationState.active:
           print("If needed notify user about the message")
       default:
           registerBackgroundTask()
           removeBadges()
    }
    completionHandler(UIBackgroundFetchResult.newData)
}
func registerBackgroundTask() {
       backgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in
       self?.endBackgroundTask()
   }
   assert(backgroundTask != UIBackgroundTaskIdentifier.invalid)
}

func endBackgroundTask() {
  print("Background task ended.")
  UIApplication.shared.endBackgroundTask(backgroundTask)
  backgroundTask = UIBackgroundTaskIdentifier.invalid
}
func removeBadge() {           
  UIApplication.shared.applicationIconBadgeNumber = 0           
  UIApplication.shared.cancelAllLocalNotifications()
}

What's app 是一个 VoIP 应用程序,它总是(在某种程度上)在后台处于唤醒状态。因此可以执行 api 调用来检查应用程序消息的状态。 如果您的应用程序具有 VoIP 功能,您可以从中受益。

尝试使用 VoIP 推送,如果应用程序被用户故意终止,静默推送通知将不起作用。