22

从 iPhone 屏幕顶部向下滑动时,有没有办法从通知横幅中清除远程通知。我尝试将徽章编号设置为零:

application.applicationIconBadgeNumber = 0 

在 delegatedidFinishLaunchingWithOptionsdidReceiveRemoteNotification中,但它没有清除通知。谢谢。

4

8 回答 8

30

在 iOS 10 中,最重要的是所有解决方案都已折旧

'cancelAllLocalNotifications()' 在 iOS 10.0 中已弃用:使用 UserNotifications 框架的 -[UNUserNotificationCenter removeAllPendingNotificationRequests]

使用以下代码取消通知并重置徽章计数

对于 iOS 10,Swift 3.0

cancelAllLocalNotifications从 iOS 10 弃用。

@available(iOS, introduced: 4.0, deprecated: 10.0, message: "Use UserNotifications Framework's -[UNUserNotificationCenter removeAllPendingNotificationRequests]")
open func cancelAllLocalNotifications()

您必须添加此导入语句,

import UserNotifications

获取通知中心。并执行如下操作

application.applicationIconBadgeNumber = 0 // For Clear Badge Counts
let center = UNUserNotificationCenter.current()
center.removeAllDeliveredNotifications() // To remove all delivered notifications
center.removeAllPendingNotificationRequests() // To remove all pending notifications which are not delivered yet but scheduled.

如果要删除单个或多个特定通知,可以通过以下方法实现。

center.removeDeliveredNotifications(withIdentifiers: ["your notification identifier"])

希望能帮助到你..!!

于 2017-10-29T08:01:16.867 回答
19

You need to set the IconBadgeNumber to 0 and cancel the current notifications. I never did in swift but I think the code for it would be as bellow:

application.applicationIconBadgeNumber = 0 
application.cancelAllLocalNotifications()

Swift 5

UNUserNotificationCenter.current().removeAllDeliveredNotifications()
于 2015-05-21T06:09:49.863 回答
2

我必须先增加然后减少徽章计数才能使其工作:

application.applicationIconBadgeNumber = 1
application.applicationIconBadgeNumber = 0
application.cancelAllLocalNotifications()
于 2016-02-05T20:00:44.583 回答
1

斯威夫特 3

在您的AppDelegate.swift文件中didFinishLaunchingWithOptions添加:

application.applicationIconBadgeNumber = 0

在您的应用启动时,这将移除 iOS 徽章(应用图标右上角的红色圆圈)。

于 2016-10-25T16:03:45.353 回答
1

这适用于用户强制终止应用程序的情况:

当您想通过推送通知向用户发送生日提醒通知时,首先发送非零徽章,例如:

 {
  "aps": {
    "alert": {
      "title": "Hey! Urgent Reminder",
      "body": "Do not forget my wife SURPRISE BIRTHDAY PARTY"
    },
    "badge": 1
  }
} 

之后,当不需要在设备中显示通知时,您可以发送带有零标记的静默通知,即使应用程序被用户强行终止,也会清除标记和通知,但didReceiveRemoteNotification不会因为应用程序终止而调用。静默推送通知的有效负载:

 {
   "aps" : {
      "content-available" : 1,
        "badge" : 0,
        "Priority" : 10
   }
}

发送该有效负载后,将自动清除徽章并从通知中心删除推送通知。

不是。如果在发送静默通知之前徽章为零,则不会清除通知。

https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html

于 2020-02-24T14:11:02.600 回答
1

任何寻找 swift 4 及以上代码的人

application.applicationIconBadgeNumber = 0
UNUserNotificationCenter.current().removeAllDeliveredNotifications()
于 2019-09-10T07:12:53.977 回答
0

在 2019 年 11 月,下面是我使用 Swift 4 的有效解决方案。首先,您必须检查设备版本以清除所有通知,但无需检查以重置徽章计数。

override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?  ) -> Bool {

  //--------

  application.applicationIconBadgeNumber = 0
  if #available(iOS 10.0, *) {        
     let center = UNUserNotificationCenter.current() 
     center.removeAllDeliveredNotifications() 
     center.removeAllPendingNotificationRequests()    
  } else {        
     application.cancelAllLocalNotifications()    
  }        

  //------
}
于 2019-11-26T07:05:35.740 回答
0

斯威夫特 4 & 5

import UserNotifications

...
...
...

UNUserNotificationCenter.current().removeAllDeliveredNotifications()
于 2020-08-08T15:19:15.650 回答