Счетчик значков не увеличивается для push-уведомлений. Всегда остается 1?

Счетчик значков моего приложения не увеличивается, когда приложение находится в фоновом режиме для push-уведомлений. Счетчик увеличивается на 1 только для первого push-уведомления и всегда остается счетчиком значков равным 1, если я получаю более 1 уведомления, также количество значков остается только 1. Ниже мой код

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

    NSString *message = nil;
    id alert = [userInfo objectForKey:@"aps"];
    if ([alert isKindOfClass:[NSString class]]) {
        message = alert;
    }    
    else if ([alert isKindOfClass:[NSDictionary class]]) {
        message = [alert objectForKey:@"alert"];
    }
    if (alert) {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"xyz"
                                                        message:message
                                                       delegate:self
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:@"Cancel", nil];
        alertView.tag=2525;
        [alertView show];
     }
}


-(void)alertView:(UIAlertView *)alertView 
     clickedButtonAtIndex:(NSInteger)buttonIndex  {

   if(alertView.tag==2525)  {
      [UIApplication sharedApplication].applicationIconBadgeNumber =
      [UIApplication sharedApplication].applicationIconBadgeNumber-1;
   }
}

person user2230971    schedule 24.09.2013    source источник
comment
Я вижу много подобных вопросов, касающихся push-уведомлений и сертификатов, просто интересно, из какого класса это.   -  person zaph    schedule 24.09.2013
comment
Какую полезную нагрузку ваш сервер отправляет в APNS?   -  person Moxy    schedule 24.09.2013
comment
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; я использую вышеуказанные полезные нагрузки   -  person user2230971    schedule 24.09.2013
comment
Я имел в виду данные, которые отправляет ваш сервер, какое значение он устанавливает для значка?   -  person Moxy    schedule 24.09.2013
comment
aps = { предупреждение = третье тестирование; значок = 1; звук = звук.caf; }; каждый раз, когда я получаю эту форму ответа на сервер. Но я получаю это после нажатия на уведомление   -  person user2230971    schedule 24.09.2013


Ответы (2)


Вы должны сделать это со стороны сервера. В моем случае я сделал это через php и mysql. Вот моя база данных введите здесь описание изображения

Я добавил количество значков в поле и увеличиваю количество значков каждый раз, когда отправляю push на устройство с этим кодом.

        $query = "SELECT badgecount FROM pushnotifications WHERE device_token = '{$device_token}'";
        $query = $this->db->query($query);
        $row = $query->row_array();
        $updatequery = "update pushnotifications set badgecount=badgecount+1 WHERE device_token ='{$device_token}'";
        $updatequery = $this->db->query($updatequery);
        $device = $device_token;
        $payload['aps'] = array('alert' => $pushmessage, 'badge' =>$row["badgecount"]+1, 'sound' => 'default');
        $payload = json_encode($payload); 
        ...

И я также делаю еще один API для создания badgcount 0, который вызывается в

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

Поэтому, когда уведомление видно, оно снова равно нулю на сервере.

person souvickcse    schedule 30.05.2014

Вы сказали, что ваша полезная нагрузка:

aps = { alert = "third testing"; badge = 1; sound = "sound.caf"; };

Поскольку вы всегда отправляете 1 для количества значков, это количество значков отображается для вашего приложения. Количество значков не увеличивается. Если вы хотите, чтобы количество значков превышало 1, ваш сервер должен помещать значения выше 1 в вашу полезную нагрузку.

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

person Eran    schedule 24.09.2013
comment
[Общее приложение UIA].applicationIconBadgeNumber = [Общее приложение UIA].applicationIconBadgeNumber+1; я могу увеличить количество значков этой строкой, но. вот в чем проблема, я получаю количество значков после выбора уведомления, мне нужно получить это, не выбирая уведомление - person user2230971; 24.09.2013
comment
Это еще одна причина, по которой вы не должны программно увеличивать количество значков в своем приложении — ваш код выполняется только после того, как пользователь коснется уведомления. Установка значка в приложении должна использоваться только для его очистки (установки на ноль) после того, как пользователь просмотрит уведомление. - person Eran; 24.09.2013
comment
@user2230971 user2230971 Как я предложил в своем ответе, отправьте значок › 1 со своего сервера. Пусть ваш сервер поддерживает счетчик значков для каждого устройства и решает, какой счетчик значков отправлять в push-уведомлении. - person Eran; 24.09.2013
comment
@ user2230971 Ваше устройство может отправить запрос на ваш сервер, который сообщает (например) о количестве прочитанных уведомлений. - person Eran; 25.09.2013
comment
Вам нужно отправить что-то на ваш сервер, когда вы читаете уведомление - person EnriMR; 29.08.2014