Уведомление не запускается, когда приложение находится на переднем плане — iOS

Я использую firebase для реализации push-уведомлений в iOS с целью c. У меня есть метод application:didReceiveRemoteNotification:fetchCompletionHandler, который должен запускаться, когда приложение находится в фоновом режиме, а пользователь нажимает на уведомление, а также когда приложение находится на переднем плане, согласно его описанию. Дело в том, что он работает только в фоновом режиме (или когда приложение не запущено). Я что-то забыл?

Спасибо за помощь.


person Jaime Alcántara Arnela    schedule 30.06.2017    source источник
comment
Несмотря на то, что его повторяется вопрос, здесь решение stackoverflow.com/a/40756206/3632832   -  person byJeevan    schedule 30.06.2017
comment
да, он не сработает, когда вы находитесь на переднем плане, вы должны справиться с этим самостоятельно, например, показать его в предупреждении в iOS менее 10 и выше 10, у вас есть собственный метод делегата для обработки этого.   -  person Praveen Kumar    schedule 30.06.2017


Ответы (3)


Для iOS 10 и выше метод ниже вызывается, когда приложение находится на переднем плане:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler

Поэтому вам нужно соблюдать этот метод для обработки уведомлений, пока приложение находится на переднем плане.

person vivek bhoraniya    schedule 30.06.2017
comment
Я знаю, что он закрыт, но есть ли способ получить информацию об уведомлении? Я имею в виду, что в didReceiveRemoteNotification:fetchCompletionHandler у вас есть nsdictionary (userinfo) с параметрами уведомления. - person Jaime Alcántara Arnela; 11.07.2017
comment
@JaimeAlcántaraArnela да, вы можете получить тот же словарь с помощью уведомления. :) - person vivek bhoraniya; 11.07.2017
comment
Спасибо @vivek, это то, что мне было нужно. - person Jaime Alcántara Arnela; 12.07.2017
comment
если мои ответы помогут вам, не забудьте проголосовать за мой ответ @JaimeAlcántaraArnela - person vivek bhoraniya; 12.07.2017

Вы можете использовать этот код ниже:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
        UIApplicationState state = [application applicationState];
        if (state == UIApplicationStateActive)
            {
                //app is in foreground
                //the push is in your control
                UILocalNotification *localNotification = 
               [[UILocalNotification alloc] init];
               localNotification.userInfo = userInfo;
               localNotification.soundName = 
               UILocalNotificationDefaultSoundName;
               localNotification.alertBody = message;
               localNotification.fireDate = [NSDate date];
                [[UIApplication sharedApplication] 
               scheduleLocalNotification:localNotification];
            }
            else
            {
               //app is in background:
               //iOS is responsible for displaying push alerts, banner etc..
            }
        }
person Arpit Javerya    schedule 30.06.2017
comment
сообщение не определено. где ты это взял? - person Alp Altunel; 09.07.2020

Стандартный пример для iOS Firebase Notifications реализован в AppDelegate, например completionHandler(UIBackgroundFetchResultNewData);

Если вам нравится на переднем плане, вы должны его реализовать.

person Tobias Alt    schedule 30.06.2017
comment
Поскольку стандартная настройка заключается в том, что уведомление ссылается на ваше приложение. - person Tobias Alt; 30.06.2017
comment
хороший совет, но как? не могли бы вы объяснить больше? - person Alp Altunel; 09.07.2020