This guide helps you remove delivered notifications using Notification Service Extension.For removing notifications you will need to add Notification Service in your project.
This service grabs the data from the push notification payload, the user can modify its content and display the customized data on to the push notification.
If you already have Notification Service Extension then you can skip Step1.
Once you have configured the Notification Service, add the below code in didReceive(_:withContentHandler:) method under bestAttemptContent condition. The below code shows how you can remove the notifications for call type messages since we need to show the latest call notification.
Swift
import CometChatSDKoverride func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { self.contentHandler = contentHandler bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) if let bestAttemptContent = bestAttemptContent { __ Modify the notification content here... var customID : String = "" if let userInfo = request.content.userInfo as? [String : Any], let messageObject = userInfo["message"], let str = messageObject as? String, let dict = str.stringTodictionary() { if let baseMessage = CometChat.processMessage(dict).0 { switch baseMessage.messageCategory { case .message: break case .action: break case .call: if let call = baseMessage as? Call { customID = call.sessionID! } case .custom: break @unknown default: break } } } UNUserNotificationCenter.current().getDeliveredNotifications { notifications in var id : String = "" let matching = notifications.first(where: { notify in if let existingUserInfo = request.content.userInfo as? [String : Any], let messageObject = existingUserInfo["message"], let str = messageObject as? String, let dict = str.stringTodictionary() { if let baseMessage = CometChat.processMessage(dict).0 { switch baseMessage.messageCategory { case .message: break case .action: break case .call: if let call = baseMessage as? Call { id = call.sessionID! } case .custom: break @unknown default: break } } } return id == customID }) if let matchExists = matching { UNUserNotificationCenter.current().removeDeliveredNotifications( withIdentifiers: [matchExists.request.identifier]) } } }}
In the above code, we are removing the previous notification of the call message when the end call or unanswered call notification appears. We are removing the previous call notifications based on the call sessionID.You can change the implementation as per your service. Once you added the code, add the completion handler in the main thread: