首页 > 解决方案 > 当应用程序被用户杀死时,如何从发送到 iPhone 的后端删除通知

问题描述

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

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

提前致谢。

标签: iosswiftiphoneapple-push-notificationsbackend

解决方案


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

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

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()
}

推荐阅读