UILocalNotification срабатывает после переустановки приложения
В моем приложении есть функция будильника, использующая UILocalNotification, и она прекрасно работает. Однако если пользователь удаляет приложение, а затем УСТАНАВЛИВАЕТ его, он получит сразу все промежуточные уведомления.
Я пытался позвонить:
[[UIApplication sharedApplication] cancelAllLocalNotifications];
если приложение запускается впервые, но это не помогает, потому что уведомление получено еще до вызова приложения:didFinishLaunchingWithOptions:.
Это было хуже в 4.0, когда сигнал тревоги повторялся, даже если пользователь удалил приложение, но по крайней мере эта ошибка была исправлена Apple в более позднем выпуске. Однако сейчас я застрял с этим. У кого-нибудь есть идея?
2 ответа
Это на самом деле ошибка в iPhone. Если вы удалили приложение и установите его позже, оно будет иметь тот же идентификатор приложения, поэтому при переустановке приложения все прошлые локальные уведомления были запущены, даже если вы не открывали приложение.
Согласно Apple, это не ошибка (я подал отчет об ошибке). Система сохраняет UILocalNotifications для удаленных приложений в течение 24 часов на случай, если пользователь удалил приложение случайно, и восстанавливает указанные UILocalNotifications, если приложение переустанавливается в течение этого периода времени.
Решением будет удаление всех UILocalNotifications при первом запуске, например, так:
- (BOOL) application: (UIApplication*) application
didFinishLaunchingWithOptions: (NSDictionary*) launchOptions
{
if (self.isFirstRun)
{
[[UIApplication sharedApplication] cancelAllLocalNotifications];
self.firstRun = NO;
}
/* Other code here */
...
}
конечно, реализовать свой собственный firstRun
установщик и получатель для извлечения / сохранения в постоянном хранилище, например NSUserDefaults
,