Обновить счетчик значков в Swift

Со следующим кодом я получаю (2) значок значка сразу после компиляции приложения:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    let installation = PFInstallation.currentInstallation()
    installation.setDeviceTokenFromData(deviceToken)
    installation.badge = 2
    installation.saveInBackground()
}

Я попробовал следующий вариант: Инициализировал новый var badgeCount = 0 и позже:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    badgeCount++
    let installation = PFInstallation.currentInstallation()
    installation.setDeviceTokenFromData(deviceToken)
    installation.badge = badgeCount
    installation.saveInBackground()
}

Но когда я получаю новые уведомления, он не обновляется до +1. Кто-нибудь знает, как это исправить?

Ответ 1

Он не будет обновлять номер значка с помощью этого метода, если приложение фактически не открыто. Если вы хотите обновить номер значка после получения уведомления, вам необходимо установить свойство Значок уведомления json push на нужный номер.

Если вы, если вы отправляете нормальное сообщение (не используя json), есть переключатель для увеличения номера значка, просто отметьте его. Если вы используете Json, используйте это:

{
    "aps": {
        "alert": "Test Push Notification",
        "sound": "yourSound.aiff",
        "Badge": "desiredNumber"
    }
}

Обратите внимание, что если вы не хотите отправлять это с сервера, вы также можете отправить его с одного устройства на другое, используя push-клиент Parse, зайдите в свои настройки в приложении на Parse.com и включите "push-клиент", вы можете отправить вышеуказанный Json на другое пользовательское устройство.

Ответ 2

Всякий раз, когда код скомпилирован, он показывает значок значка, который ранее хранится в вашем приложении. Если вы не установили значок значка = 0 в своем приложении, он будет показывать номер значка значка в вашем приложении каждый раз, когда вы его скомпилируете или войдете в фоновое состояние.

Теперь для вашей проблемы используйте значок значка как

var badgeCount = 0 

 UIApplication.sharedApplication().applicationIconBadgeNumber = ++badgeCount

Также, когда вы закончите свою задачу, сделайте значок значка равным 0, иначе он отобразит значок значка в вашем приложении.

UIApplication.sharedApplication().applicationIconBadgeNumber = 0

Ответ 3

Я работал над подобным сценарием и окончательным решением, которое я нашел, чтобы увеличить и reset номера значков.

Номер знака приращения

  • Я всегда сохраняю количество значков в памяти (NSUserDefaults)
  • Каждый раз, когда мне нужно установить уведомление, я получаю текущее значение номера значка и устанавливаю его на .applicationIconBadgeNumber и обновляю счет в памяти.

Reset Номер значка

  • В моем случае я должен reset присвоить счету значка сразу после открытия приложения. Поэтому я установил UIApplication.sharedApplication().applicationIconBadgeNumber = 0 в didFinishLaunchingWithOptions of AppDelegate. Также я reset счетчик в памяти.

Ответ 4

Ни один из этих ответов не действителен.

Вам нужно смотреть на свой код Push, а не на AppDelegate

Из документов Parse:

badge: (iOS/OS X only)
the value indicated in the top right corner of the app icon. 
This can be set to a value or to Increment in order to increment the current value by 1.