2017-02-24 69 views
2
let content = UNMutableNotificationContent() 
content.badge = 0 // your badge count 

此代码是在applicationWillEnterForeground和目的是通过数设为0文擦除徽​​章用户再次进入该应用然而,已经证明完全无用的,因为它不更新应用程序图标上的徽章...的Xcode夫特3.0通知框架应用徽章不更新

我现在已经恢复到iOS 9的代码,它的工作就像一个魅力。此外,它似乎是,使用新的框架,你必须真正发出通知要更新的徽章数量这实在是不切实际的..有人请纠正我,如果我错了

此外:

let content = UNMutableNotificationContent() 
     TableViewController.numberBadges += 1 
     content.title = "Title" 
     content.body = "this is the body ..." 
     content.badge = TableViewController.numberBadges as NSNumber? 
     content.sound = UNNotificationSound.default() 

     let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false) 
     let requestidentifier = "myNotification" 
     let request = UNNotificationRequest(identifier: requestidentifier, content: content, trigger: trigger) 

     UNUserNotificationCenter.current().add(request, withCompletionHandler: {error in 
      // handle error if there is one 
      if((error) != nil){ 
       print("Error completing notification scheduling: \(error)") 
      }else{ 
       print("Added Notification request successfully with \(content.badge!) badges") 
      } 

     }) 

不更新徽章,所以给了什么?

+0

你有没有试过'[UIApplication sharedApplication] .applicationIconBadgeNumber = 0;'? – deadbeef

+1

对不起,我的意思是'UIApplication.shared.applicationIconBadgeNumber = 0' – deadbeef

+0

这就是我目前使用的,然而问题是,为什么新框架根本不工作?它确实发送通知绝对好,但惨不忍睹的徽章管理。这是一个错误还是我做错了代码? –

回答

1

我有同样的问题,直到我将content.badge作为非可选项。

1

在iOS 10和11上,通过安排UNNotificationRequest通知来清除徽章存在问题。该文档说,将UNMutableNotificationContent对象的badge属性设置为0会在通知被触发时擦除徽章,但这似乎不起作用。通过实验,我发现了这两个iOS版本中的这个bug的解决方法。

在iOS 10/Xcode 8上,如您所见,将该值设置为0这不起作用 - 徽章将继续显示其当前值。我发现如果将它设置为-1:

let content = UNMutableNotificationContent() 
content.badge = -1 

然后它会在触发通知时擦除徽章。

在iOS 11/Xcode 9中,将badge属性设置为小于1的任何值都不会执行任何操作 - 徽章将继续显示其当前值。我发现,如果你的徽章设置为0,也可以设置声音属性,如:

let content = UNMutableNotificationContent() 
content.badge = 0 
content.sound = UNNotificationSound.default() 

然后徽章将被删除。在我的应用程序中,我请求了使用requestAuthorization方法的许可来显示徽章,但我没有请求播放声音的权限,因此在触发通知时实际上没有播放声音。 (如果您的应用程序确实请求许可播放声音,并且在清除徽章时不想播放声音,我不知道解决方法是什么。)

更新:我也通过模拟器,iOS 11的解决方法也适用于iOS 10.

只要badge属性设置为正数,我还没有任何其他问题(还!)安排更新徽章的通知。