#objective-c #ios #push-notification
#objective-c #iOS #push-уведомление
Вопрос:
С iOS 5 и центром уведомлений у вас могут быть ожидающие, накопленные уведомления, каждое со своими данными и сообщениями. Есть ли способ при регулярном запуске вашей программы (без нажатия на уведомление) обнаруживать ожидающие уведомления и, что более важно, связанные с ними данные?
Другой вопрос, связанный с этим, заключается в том, что когда приходят push-уведомления, а ваше приложение находится в фоновом режиме, все application:didReceiveLocalNotification:
равно вызывается или оно просто идет и ждет, пока приложение не будет запущено, а затем вы должны вручную обработать его с помощью данных запуска в application:didFinishLaunchingWithOptions:
Мой сценарий заключается в том, что мне нужно обновить некоторые модели основных данных с данными, прикрепленными к push-уведомлениям, поэтому я хочу, чтобы эти изменения отражались независимо от того, как они запускают приложение.
Ответ №1:
По моему опыту, нет другого способа узнать об уведомлениях, кроме как запустить приложение непосредственно через них (на iOS 5 это будет сразу после получения уведомления или из уведомлений в очереди, присутствующих в Центре уведомлений).).
Альтернативной стратегией было бы использование значков значков.
Если вы помечаете значок приложения при получении уведомлений, вы можете проверять наличие этого номера при каждом запуске приложения, а затем выполнять необходимые действия.
Ответ №2:
Когда появляется уведомление, вы можете либо просмотреть его, либо отменить. Если пользователь отменил уведомление, вы можете проверить их при следующем входе в приложение:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if( localNotif ) {
// Do some stuff
application.applicationIconBadgeNumber = 0; // Reset num of notifications on app icon
}
}
Этот метод запускается, если вы получаете уведомление, находясь в этом конкретном приложении, или вы выбираете подтверждение локального уведомления:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
BOOL inApp = [application applicationState] == UIApplicationStateActive;
if( inApp ) { // they got this in the app
//Do some stuff in the app
}
else {
// They acknowledged the notification out of the app and here they are
// Do some other stuff
}
application.applicationIconBadgeNumber = 0;
}
Это дает вам хорошее покрытие для всех сценариев с локальными уведомлениями, которые будут:
- Уведомление получено, пользователь отменяет. Проверьте позже в didFinishLaunchingWithOptions
- Уведомление подтверждено, приложение не открыто. Проверка в didFinishLaunchingWithOptions
- Уведомление подтверждено, приложение работает в фоновом режиме. didReceiveLocalNotification:
- Уведомление отображается, когда в приложении didReceiveLocalNotification: