ios - 当应用程序被用户杀死时,如何从发送到 iPhone 的后端删除通知
问题描述
像WhatsApp一样,我将为iPhone
应用程序实现一个 Web 界面。如果用户在两种环境(iPhone 和 Web)上都登录并收到来自另一个用户的消息,则会向iPhone
Web 发送通知。当用户从 Web 界面读取该消息时,即使应用程序被终止,发送到 iPhone 的通知也应该像WhatsAppiPhone
一样被删除。
我们如何从后端删除 iPhone 发送的通知?据我所知,当app is killed by User
.
提前致谢。
解决方案
我不知道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()
}
推荐阅读
- angular - Angular Injected 服务未分配给对象实例
- google-identity-toolkit - Google Identity Toolkit 无法注册新用户:错误代码:遇到内部错误
- java - spring-cloud-dataflow-server 中部署的服务如何连接到另一个数据库而不是 dataflow-sever 使用的数据库?
- azure-data-factory-2 - 使用布尔变量时 ADF V2 失败
- python - Python pymysql 将变量值动态绑定到数据库字段
- java - Spring JPA:如何在同一个请求中更新 2 个不同的“DataSource”中的 2 个不同的表?
- node.js - 了解 NodejS 中的 Express 会话
- generics - 在 F# 中,两种泛型类型约束表示有什么区别
- excel - 根据收费汇总占用面积,但不包括重复项
- android - 实施 'com.android.support:appcompat-v7:28.0.0' - 无法解决:firebase-core/auth-15.0.0