Ответ 1
В соответствии с вашим вопросом нет способа сохранить все уведомления при открытии приложения, лучше вы вызываете api, чтобы получить все уведомления в соответствии с меткой времени с вашего сервера/сервера, что делает Facebook.
Когда мое приложение не запущено и получает уведомление Push, если я нажму на это уведомление, приложение запустится - но тогда он не запрашивает у пользователя настройку Alert-View I, спрашивая, хотят ли они для просмотра содержимого Уведомления или нет. Он просто запускается и сидит там.
Push-уведомления работают отлично, когда приложение запущено - либо в качестве активного приложения, либо в фоновом режиме, но ничего не работает правильно, когда приложение не работает.
Я попробовал вывести из приложения launchOptions NSDictionary в приложении: didFinishLaunchingWithOptions: посмотреть, какую нагрузку он приносит, но он появляется как "(null)". Таким образом, он в основном не содержит ничего, что не имеет смысла, не должно ли оно содержать нагрузку на уведомление?
У кого-нибудь есть идеи, как заставить Push Notifications работать, когда они приходят, когда приложение не работает?
Я имею в виду, как обрабатывать Push-уведомления, когда приложение не работает. Что делать, если, если вы получаете много уведомлений, и вы не открыли приложение, вы также не нажали панель уведомлений системы. Как вы сохраняете эти нажатия для последующего поиска.
В соответствии с вашим вопросом нет способа сохранить все уведомления при открытии приложения, лучше вы вызываете api, чтобы получить все уведомления в соответствии с меткой времени с вашего сервера/сервера, что делает Facebook.
1) Когда приложение работает в фоновом режиме и Когда приложение работает на переднем плане
application:didReceiveRemoteNotification:
будет вызываться как показано ниже.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
if (application.applicationState == UIApplicationStateInactive)
{
// opened from a push notification when the app was on background
NSLog(@"userInfo->%@", [userInfo objectForKey:@"aps"]);
}
else if(application.applicationState == UIApplicationStateActive)
{
// a push notification when the app is running. So that you can display an alert and push in any view
NSLog(@"userInfo->%@", [userInfo objectForKey:@"aps"]);
}
}
2) Когда приложение не запускается (закрывается), тогда вызывается метод application:didFinishedLaunchingWithOptions
.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (launchOptions != nil)
{
// opened from a push notification when the app is closed
NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (userInfo != nil)
{
NSLog(@"userInfo->%@", [userInfo objectForKey:@"aps"]);
}
}
else
{
// opened app without a push notification.
}
}
3) Невозможно удалить определенное уведомление. Способ удаления всех уведомлений из вашего приложения, чтобы они не показывались в Центре уведомлений, когда пользователь открывает приложение из одного из них, должен установить значок приложения на 0.
Приложение не обрабатывает push-уведомление в фоновом режиме, то, что действительно делает ОС, пробуждает приложение после нажатия в уведомлении. Вы можете поймать этот момент следующим образом:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
// Your app has been awoken by a notification...
}
}
Невозможно обработать это на конце приложения. Вам нужно будет поддерживать непрочитанное количество значков на сервере. Когда приложение убито, значение значка обновляется с сервера.
Поэтому, когда вы открываете приложение в любое время, вам нужно будет вызвать веб-службу, чтобы получить необходимые уведомления и обновить значки на вкладке (если они используются).
Вы можете получать уведомления, отправленные в ваше приложение, с помощью метода getDeliveredNotifications(completionHandler:)
. Обратите внимание, что это только возвращает уведомления, отображаемые в настоящее время в Центре уведомлений, а не те, которые были очищены пользователем вручную.
UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
// notifications: An array of UNNotification objects representing the local
// and remote notifications of your app that have been delivered and are still
// visible in Notification Center. If none of your app’s notifications are
// visible in Notification Center, the array is empty.
// As said in the documentation, this closure may be executed in a background
// thread, so if you want to update your UI you'll need to do the following:
DispatchQueue.main.sync { /* or .async {} */
// update UI
}
}