Подтвердить что ты не робот

Обработка уведомлений Push при завершении работы приложения

Когда мое приложение не запущено и получает уведомление Push, если я нажму на это уведомление, приложение запустится - но тогда он не запрашивает у пользователя настройку Alert-View I, спрашивая, хотят ли они для просмотра содержимого Уведомления или нет. Он просто запускается и сидит там.

Push-уведомления работают отлично, когда приложение запущено - либо в качестве активного приложения, либо в фоновом режиме, но ничего не работает правильно, когда приложение не работает.

Я попробовал вывести из приложения launchOptions NSDictionary в приложении: didFinishLaunchingWithOptions: посмотреть, какую нагрузку он приносит, но он появляется как "(null)". Таким образом, он в основном не содержит ничего, что не имеет смысла, не должно ли оно содержать нагрузку на уведомление?

У кого-нибудь есть идеи, как заставить Push Notifications работать, когда они приходят, когда приложение не работает?

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

4b9b3361

Ответ 1

В соответствии с вашим вопросом нет способа сохранить все уведомления при открытии приложения, лучше вы вызываете api, чтобы получить все уведомления в соответствии с меткой времени с вашего сервера/сервера, что делает Facebook.

Ответ 2

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.

Ответ 3

Приложение не обрабатывает push-уведомление в фоновом режиме, то, что действительно делает ОС, пробуждает приложение после нажатия в уведомлении. Вы можете поймать этот момент следующим образом:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    { 

        if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
      // Your app has been awoken by a notification...
        }
   }

Ответ 4

Невозможно обработать это на конце приложения. Вам нужно будет поддерживать непрочитанное количество значков на сервере. Когда приложение убито, значение значка обновляется с сервера.

Поэтому, когда вы открываете приложение в любое время, вам нужно будет вызвать веб-службу, чтобы получить необходимые уведомления и обновить значки на вкладке (если они используются).

Ответ 5

Вы можете получать уведомления, отправленные в ваше приложение, с помощью метода 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
    }
}