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

Молчаливое локальное уведомление IOS

Можем ли мы иметь тихое локальное уведомление в приложении IOS. Которая выполняет некоторую обработку данных в фоновом режиме, когда пользователь взаимодействует с ней.

То, что я хочу сделать, - создать тихое локальное уведомление, которое срабатывает каждые 8 ​​утра утром и после того, как пользователь получит его. Я хочу сделать некоторую обработку данных и воссоздать новую, которую пользователь может видеть с новыми обработанными мной данными после того, как я увидел первое тихое локальное уведомление.

Я стараюсь избегать использования push-уведомления столько, сколько я могу.

4b9b3361

Ответ 1

Вы можете получать тихие уведомления в фоновом режиме на iOS, но для отправки уведомлений вам понадобится сервер.

Для этого вы активируете фоновый режим Remote notifications на вкладке "Целевые возможности":

Screenshot of Background Modes settings

Затем вы регистрируетесь для push-уведомлений в application:didFinishLaunchingWithOptions: с помощью

UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeNone categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];

В ожидании пользователя, позволяющего вашему приложению отправлять push-уведомления, вы получите токен устройства:

 -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;

Если что-то пойдет не так, обработчик отказа будет вызван:

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:

Вы отправляете deviceToken на свой сервер и сообщаете ему отправлять молчаливое push-уведомление этому deviceToken в локальное время устройства 8AM.

Это устройство будет иметь следующий метод делегирования приложения:

         - (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
      fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler;

и вы сможете выполнять обработку данных.

Легко!

Не забудьте вызвать обработчик завершения, когда закончите!