在 iOS 12 中使用临时授权设置应用徽章

Setting application badge using provisional authorization in iOS 12

因此 iOS 12 引入了可以在通知中心看到但在锁定屏幕上看不到的安静通知的临时授权。它有一个很酷的优势——你不需要用户的同意就可以发送一个。

多篇文章(smashingmagazine.com, gadgethacks.com 等)声称 iOS 应用程序将能够在收到临时授权后设置其徽章。

临时授权的时候真的可以设置应用徽章吗?

我使用以下代码请求授权:

[[UNUserNotificationCenter currentNotificationCenter]
     requestAuthorizationWithOptions:UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionProvisional
     completionHandler:^(BOOL granted, NSError *_Nullable error) {
       if (granted) {
         [[UIApplication sharedApplication] registerForRemoteNotifications];
       }
     }];

我在 didRegisterForRemoteNotificationsWithDeviceToken: 收到可用于发送推送通知的令牌。当我发送带有有效载荷的推送通知时 {"aps":{"alert":"Testing..","badge":1}} 我在通知中心看到它,但应用程序没有标记。

我尝试使用 UIApplication.sharedApplication.applicationIconBadgeNumber = 1; 设置徽章,但效果不佳。如果我在不提供 UNAuthorizationOptionProvisional 选项的情况下请求常规授权,它会起作用。

同样的问题。

看来,临时授权的应用徽章默认是关闭的。我在文档中找不到任何相关信息。

但是您可以在应用的通知设置中看到它。 "Badges" 开关默认关闭:

在 iOS 15.

中,临时通知的应用徽章也将关闭

所以这不会执行任何操作,除非您转到“系统设置”并切换徽章开关。

UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .provisional]) { granted, error in
  if granted {
    DispatchQueue.main.async {
      UIApplication.shared.applicationIconBadgeNumber = Int.random(in: 1...1000)
    }
  }
}

有人知道解决方法吗?