Mailcore2 на заднем плане

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

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

У кого-нибудь есть решение?

Я использую Xcode и iOS 8.

Спасибо.


person santomegonzalo    schedule 23.04.2015    source источник


Ответы (1)


Квант времени, предоставляемый iOS для фоновой загрузки, основан на алгоритме, неизвестном разработчикам. Если вы хотите использовать операцию IMAP IDLE, вам нужно будет начать с performFetchWithCompletionHandler: и убедиться, что вы закончили, прежде чем приложение снова перейдет в спящий режим, то есть от нескольких секунд до максимум 30 секунд.

Я бы предложил создать сеанс IMAP, как только вы войдете в фоновый режим, опросить IMAP на наличие новых изменений, обработать и перейти в спящий режим как можно скорее. Но опять же, iOS решает, когда и как долго вы получаете этот отрезок времени для фоновой выборки.

ОБНОВЛЕННЫЙ ОТВЕТ:

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

person shrishaster    schedule 25.04.2015
comment
Спасибо за ваш ответ! но как почтовые приложения действительно быстро получают уведомление? потому что они не ждут времени от iOS, чтобы получить новый материал. - person santomegonzalo; 01.05.2015
comment
@santomegonzalo отредактировал мой ответ. Это то, что вы искали? - person shrishaster; 01.05.2015
comment
еще раз спасибо, мне нравится ваша последняя идея, какой-то парень из MailCore уже сказал мне отправлять push-уведомления, но для этого мне нужно иметь учетные данные для каждого пользователя (возможно, я мог бы сохранить токены) ... но я не знаю, если это правильно, потому что пользователь может подумать, что это небезопасно. Что вы думаете? Потому что, если бы я использовал службу push-уведомлений, мне нужно было бы прослушивать каждое новое электронное письмо каждого пользователя, а у Google, например, было бы конечное количество слушателей его ящика. - person santomegonzalo; 02.05.2015
comment
Push-уведомления на iOS направляются через серверы Apple и защищаются всеми сертификатами, которые вы создаете для своего приложения. Так что я не думаю, что вам нужно беспокоиться о безопасности. Даже серверу нужен ключ для запуска push-уведомлений. Да, вы должны сохранить токен устройства для каждого устройства. Да, Google очень строго относится к управлению открытыми подключениями к IMAP, но это нормально, если вы хорошо ими управляете. Что вы можете сделать, так это управлять на вашем сервере только одним открытым соединением с IMAP и зарегистрироваться для работы IMAP IDLE. Когда он отвечает новыми электронными письмами, инициируйте push-уведомление на сервер Apple. - person shrishaster; 03.05.2015
comment
Отлично, большое спасибо @shrishaster за помощь! - person santomegonzalo; 03.05.2015