Подтвердить что ты не робот

Значок значка значка приложения не увеличивается: Xcode

У меня возникла проблема с обновлением значения номера значка приложения push уведомления.

Я делаю как:

-(void)application:(UIApplication *)application 
       didReceiveRemoteNotification:(NSDictionary *)userInfo {

       UIApplicationState state = [application applicationState];
       if (state == UIApplicationStateActive) {
          // do stuff when app is active

       }else{
          // do stuff when app is in background
          [UIApplication sharedApplication].applicationIconBadgeNumber = 
          [UIApplication sharedApplication].applicationIconBadgeNumber+1;  
               /* to increment icon badge number */
       }
 }

Но значок всегда показывает номер значка как "1", и он не увеличивается, когда появляется больше уведомлений/одно уведомление появилось после другого.

Любой совет заметен...

4b9b3361

Ответ 1

Номер значка устанавливается операционной системой, когда вы получаете полезную нагрузку уведомления JSON, которая напоминает следующее:

{
    "aps" : {
        "alert" : "New notification!",
        "badge" : 2
    }
}

Как вы видите, это сервер, который отвечает за установку правильного номера в badge. Серверу необходимо отслеживать или вычислять количество ожидающих уведомлений для каждого пользователя и генерировать номер badge перед отправкой уведомления Apple.

Ответственность клиента заключается в том, чтобы очистить значок уведомления или уменьшить его, когда пользователь видит уведомление. Код для этого -

application.applicationIconBadgeNumber = application.applicationIconBadgeNumber - 1; // Decrement counter

или

application.applicationIconBadgeNumber = 0; // Reset counter assuming the user is able to see all notifications at once.

Ответ 2

вместо этого вы можете создать статическую переменную и назначить ее в applicationIconBadgeNumber:

static int i=1;
[UIApplication sharedApplication].applicationIconBadgeNumber = i++;

Ответ 3

У меня была такая же проблема и она была решена путем создания int. переменная в классе .h

вот так:

пользовательский класс .H

@property int badge;

пользовательский класс .M

-(id)init{

_badge=0;

self = [super init];
if (self) {

}
return self;}

-(void)reminderCreator:(NSDate*)onTime withText:(NSString*)text{

_badge += 1;

UILocalNotification* localNotification = [[UILocalNotification alloc] init];
localNotification.fireDate = onTime;
localNotification.alertBody = text;
localNotification.soundName=UILocalNotificationDefaultSoundName;

localNotification.applicationIconBadgeNumber=_badge;

[[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; }

поэтому, если вы инициализируете этот настраиваемый класс где-нибудь (возможно, у вашего viewController), а затем несколько раз вызываете метод напоминанияCreator, чтобы настроить несколько локальныхNotifications, он назначит увеличивающийся номер каждому уведомлению.

+1, если это помогло:)

Ответ 4

-(void)application:didReceiveRemoteNotification: будет вызываться только тогда, когда ваше приложение работает на переднем плане.

Если вы хотите, чтобы значок увеличивался, когда ваше приложение не запускалось, вы должны установить номер значка в push-сообщении полезной нагрузки. Вы должны там следить за номером сервера номер значка, поскольку свойство badge полезной нагрузки push-сообщения будет использоваться в качестве номера значка. Он будет не увеличивать номер значка для вас.

Поскольку система обрабатывает входящие push-уведомления, ваше приложение не информируется о полученных push-уведомлениях для вашего приложения. Только когда приложение работает на переднем плане, вызывается -(void)application:didReceiveRemoteNotification:. Невозможно получить приложение для repsond, чтобы нажимать уведомление, если оно не находится на переднем плане.