IOS Push Notifications - обновить значок без предупреждения?

Есть ли способ обновить номер в значке без предупреждения или открытия приложения?

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

Я разрабатываю для iOS 5.0 +.

EDIT. Чтобы быть более ясным, я спрашиваю о способе сделать это , когда приложение не работает. Я хочу, чтобы сервер нажал новый номер значка, не показывая предупреждение. Возможно ли это?

Ответ 1

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

Полезная нагрузка уведомления

Каждое push-уведомление несет с собой полезную нагрузку. Полезная нагрузка указывает, как пользователи должны быть предупреждены о данных, ожидающих загружается в клиентское приложение. Максимальный размер, разрешенный для полезная нагрузка уведомлений составляет 256 байт; Служба уведомления Apple Push отказывается от любого уведомления, которое превышает этот предел. Помните, что доставка уведомлений - "лучшее усилие" и не гарантируется.

Для каждого уведомления поставщики должны составлять объект словаря JSON что строго придерживается RFC 4627. Этот словарь должен содержать другой словарь, идентифицированный ключевыми aps. Словарь aps содержит одно или несколько свойств, которые определяют следующие действия:

Предупреждающее сообщение для отображения пользователю

Номер, чтобы значок значка приложения с

Звук для воспроизведения

Обратите внимание, что он говорит one or more of the properties. Свойство alert необязательно. Вы даже можете отправить уведомление с пустым словарем aps (т.е. Отправлять только настраиваемые свойства).

Пример 5. В следующем примере показан пустой словарь aps; потому что свойство пропуска отсутствует, отображается текущий номер значка на значок приложения удаляется. Свойство acme2 custom является массив из двух целых чисел.

{

    "aps" : {

    },

    "acme2" : [ 5,  8 ]

}

Единственное предупреждение, которое пользователь увидит, это предупреждение, которое спрашивает его, разрешать ли push push-уведомления. Это предупреждение будет отображаться только при первом запуске приложения после установки.

В этом примере вы регистрируете уведомления без предупреждения (только значки и звуки):

Listing 2-3  Registering for remote notifications

- (void)applicationDidFinishLaunching:(UIApplication *)app {

   // other setup tasks here....

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

}



// Delegation methods

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {

    const void *devTokenBytes = [devToken bytes];

    self.registered = YES;

    [self sendProviderDeviceToken:devTokenBytes]; // custom method

}



- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {

    NSLog(@"Error in registration. Error: %@", err);

}

Все кавычки взяты из руководства по программированию Apple Local и Push-уведомлений.

Ответ 2

Вы можете использовать

[UIApplication sharedApplication].applicationIconBadgeNumber = aNumber;

Ответ 3

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

[UIApplication sharedApplication].applicationIconBadgeNumber = number_of_notifications;

Я не думаю, что можно обойтись без предупреждения, если добавить счетчик значков из удаленного уведомления. Вы должны прочитать о службе APN, в вашем случае вы можете зарегистрироваться на UIRemoteNotificationTypeBadge, вы должны прочитать о Руководство по программированию локального и Push Notification

Ответ 4

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

{

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}

используйте этот метод.... это поможет u.