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

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

У меня есть это:

@property(strong, nonatomic) PTPusherPresenceChannel *taxi_channel;

PTPusherPresenceChannel *taxi = [PusherController sharedApp].taxi_channel;

- (void)viewDidLoad

@weakify(self);

[taxi bindToEventNamed:@"client-driver-cancel-service" handleWithBlock:^(PTPusherEvent *event)
 {
     DDLogDebug(@"%@: %@", event.name, event.data);
     @strongify(self);

     [self cancelServiceAcepted];
 }];

Проблема в том, что я получаю одно событие, когда попадаю в фон, но после первого я их больше не получаю.

Я реализовал код на https://github.com/pusher/pusher-test-iOS/blob/master/Diagnostics/Code/ClientDisconnectionHandler.h

Если приложение выходит на передний план, оно работает нормально.


person mamcx    schedule 08.07.2014    source источник


Ответы (1)


Я автор libPusher. Я ответил на ваш вопрос на Github, но решил опубликовать его здесь, поскольку он может быть полезен другим.

К сожалению, на самом деле невозможно использовать Pusher в фоновом режиме, и это не совсем то, для чего он предназначен. Pusher отлично работает для получения событий в реальном времени во время работы вашего приложения, но для получения фоновых уведомлений вам действительно нужно использовать push-уведомления Apple ИЛИ периодическую выборку, в зависимости от того, предпочитаете ли вы push или pull.

Мое предложение было бы:

  • Используйте Pusher, пока ваше приложение находится на переднем плане, чтобы получать обновления в реальном времени.
  • Используйте push-уведомления для отправки значительных событий в ваше приложение, пока оно находится в фоновом режиме (это должно происходить реже) И/ИЛИ
  • Возможно, используйте фоновую загрузку для получения последних изменений/событий с вашего сервера.
  • Перезапустите прослушивание событий от Pusher, когда ваше приложение возобновит работу на переднем плане.
person Luke Redpath    schedule 10.07.2014
comment
Есть ли способ позволить пользователю оставаться «онлайн» в фоновом режиме? Должны ли мы пинговать наш сервер в течение определенного интервала времени, чтобы серверная часть знала, что мы в сети? Может быть, просто не стоит позволять пользователю оставаться в сети, когда он находится в фоновом режиме. - person igrek; 31.10.2014