Значок значка значка приложения не увеличивается: 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", и он не увеличивается, когда появляется больше уведомлений/одно уведомление появилось после другого.
Любой совет заметен...
Ответы
Ответ 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, чтобы нажимать уведомление, если оно не находится на переднем плане.