Как обрабатывать тихие push-уведомления, когда приложение находится в состоянии InActive в ios 9?

Я реализовал тихое push-уведомление. Поэтому метод didReceiveRemoteNotification вызывается, когда приложение находится в неактивном состоянии в ios 9.

Бывают случаи, когда приложение неактивно.

1. При вкладке пользователя на конкретное уведомление.

2. При получении звонка или сообщения.

3. Когда центр уведомлений и центр управления открыты.

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
 {
     if(application.applicationState == UIApplicationStateInactive)  //Inactive state
     {
         [self RedirectScreenBasedOnNotification:self.userInfoDic];//Screen Redirection code 
     }
 }

Так, как я могу обработать тихое уведомление, когда приложение неактивно?

У меня проблема с лицом, когда в это время открывается центр уведомлений, если приходит какое-либо уведомление, тогда будет происходить перенаправление, но я хочу остановить это.

Полезная нагрузка уведомления:-

aps =     {
    alert = "Test Dev 5 startd following you ";
    "content-available" = 1;
    "link_url" = "https://raywenderlich.com";
    message =         {
        friend =             {
            email = "abc@gmail.com";
            name = "Test Dev 5";
            photo = "";
            "user_id" = 27;
        };
        id = 3;
        "is_business_sent" = 0;
        message = "Test Dev 5 startd following you ";
    };
    sound = default;
}

заранее спасибо

2 ответа

Тихие push-уведомления не запускают взаимодействие с пользователем. Когда полезная нагрузка молчаливого уведомления включает в себя ключи для взаимодействия с пользователем, что-то идет не так - iOS не может понять, намерено ли что-то представить пользователю, или чтобы уведомление оставалось без внимания и обрабатывалось без взаимодействия с пользователем. Иногда тихое уведомление может работать, в других случаях оно может быть представлено как обычное уведомление с взаимодействием с пользователем. Это может быть один или другой, а не оба.

Если тихая кнопка content-available присутствует в aps полезная нагрузка ключей alert, sound, или же badge не должно быть.

Вы можете использовать мой инструмент проверки полезной нагрузки Push Notification, чтобы проверить содержание вашего уведомления. Полезная нагрузка, которую вы разместили в своем вопросе, имеет несколько проблем - aps ключ должен содержать только ключи Apple, определенные в разделе "Создание push-уведомлений". Все ваши пользовательские ключи и значения должны быть за пределами aps объект.

application:didReceiveRemoteNotification:fetchCompletionHandler: будет вызываться только для тихих push-уведомлений. Если полезная нагрузка уведомления содержит оба content-available и один или несколько из alert, sound, или же badge iOS не будет знать, какой метод вызывать, и вы можете увидеть противоречивое поведение.

Если вы просто пытаетесь показать не молчаливое уведомление, вам не нужно реализовывать application:didReceiveRemoteNotification:fetchCompletionHandler:, Вместо этого реализуйте application:didReceiveRemoteNotification: для iOS 9 и userNotificationCenter:willPresentNotification:withCompletionHandler: для iOS 10 и позже.

Что касается молчаливых уведомлений и неактивного состояния приложения, здесь делать нечего особенного. Тихие уведомления предназначены для того, чтобы "намекнуть" приложению, что оно должно обновлять контент. При получении уведомления в режиме без вывода сообщений приложение должно обработать обновление содержимого в течение 30 секунд, а затем вызвать обработчик завершения выборки. Когда iOS выполняет обработчик завершения выборки, она делает новый снимок восстановления обновленного пользовательского интерфейса. Это происходит даже тогда, когда приложение неактивно.

Вы можете добавить свой код в этом условии If.

if (UIApplication.sharedApplication.applicationState != UIApplicationStateInactive) {
   //Write your code her, this will get executed when your app is not in Inactive state.
}
Другие вопросы по тегам