2016-12-01 15 views
1

я уже реализовали это:Trigger фон синхронизации с помощью уведомления, когда приложение не стереосистеме и обновите

  • включить удаленные уведомления в фоновом режиме
  • немого уведомления {"aps": {"content-available": 1}}

В компании Apple документы на Push-уведомления, они говоря:

Когда приходит тихое уведомление, iOS просыпает ваш ap p на фоне , чтобы вы могли получать новые данные с вашего сервера или делать обработку фоновой информации.

#

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

После приема бесшумного уведомления. В этом методе я загружаю некоторые данные с сервера, а затем синхронизацию данных.

ОЖИДАЕТСЯ:

Цель состоит в том, когда открыт пользователь/с помощью приложения, оно должно отражать последнюю позицию для пользователя.

АКТУАЛЬНО:

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

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

ВОПРОС:

Я молчала уведомление не работает, когда приложение не работает? (не может просыпаться приложение в фоновом режиме)

Есть ли недостающий код в моем коде, который необходимо реализовать?

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

ответ

0

Тихие уведомления могут принести свое приложение в фоновом режиме, чтобы делать какие-либо задачи, которые могут потребоваться, в соответствии с документацией Apple:

система будит приложение в фоновом режиме (или запускает его в фон)

метод вы используете, userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:, называется, чтобы ваше приложение знать, какие действия были выбраны пользователем для данного уведомления.

Правильный метод, который вы должны внедрить (даже в iOS10): application:didReceiveRemoteNotification:fetchCompletionHandler:. Это сообщает приложению, что получено удаленное уведомление, указывающее, что есть данные, которые нужно извлечь.

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

Update 1:

В соответствии с обновленным вопросом, я обновил свой ответ.

Чтобы уведомления не доставлялись в ваше приложение после того, как оно было , прекращено пользователем по дизайну. Согласно documentation:

Система автоматически запускает ваше приложение, если у пользователя есть принудительное отключение. В этой ситуации пользователь должен перезапустить приложение или перезапустить устройство до того, как система снова попытается запустить приложение автоматически.

Для борьбы с этим вы можете изучить Apple PushKit. Первоначально предназначенный для приложений VoIP, он также будет работать для вашего приложения. Однако, в отличие от обычных тихих уведомлений, эти действительно пробуждают ваше приложение, даже если оно было прервано пользователем.

Однако имейте в виду, что, как только пользователь прекратит приложение, он ожидает, что он прекратит его навсегда (или пока он не перезапустит его вручную). Отменить это было бы плохой дизайн. Может быть, это нормально с пользователем, если приложение тратит некоторое время на загрузку последних данных при запуске , если пользователь ранее прекратил приложение? В зависимости от точной причины, по которой вам нужно ваше приложение, чтобы иметь самую последнюю информацию перед запуском, возможно, вам не нужно учитывать этот сценарий.

+0

извините, мой неправильный вопрос. Я уже обновляю его. На самом деле, я уже реализую это приложение: didReceiveRemoteNotification: fetchCompletionHandler: '. но это не триггер, когда приложение не работает – Hezron

+0

Вы уверены, что разрешаете вашему приложению работать в фоновом режиме? Проверьте Settings-> General-> Background Refresh-> Your app. Переключатель должен быть зеленым. – Aleksander

+0

Да, переключатель зеленый – Hezron