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

时间:2019-05-08 10:42:28

标签: ios swift iphone apple-push-notifications backend

WhatsApp 一样,我将为iPhone应用程序实现Web界面。如果用户同时在两种环境(iPhone和Web)上登录并收到其他用户的消息,则会向iPhone和Web发送通知。当用户从Web界面读取该消息时,即使iPhone应用被杀死,发送给iPhone的通知也应像 WhatsApp 一样被删除。

我们如何删除iPhone从后端发送的通知?据我了解,app is killed by User时,我们无法控制iPhone应用。

谢谢。

3 个答案:

答案 0 :(得分:2)

我不知道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()
}

答案 1 :(得分:1)

什么是VoIP应用程序,它总是(在某种程度上)在后台唤醒。因此,可以执行api调用以检查应用程序消息的状态。 如果您的应用程序具有VoIP功能,则可以从中受益。

答案 2 :(得分:1)

尝试使用VoIP推送,如果应用被用户故意终止,则无提示推送通知将不起作用。