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

IOS push services: возможно ли невидимое push-уведомление?

Я создаю приложение для iPhone, которое зависит от данных из онлайн-базы данных.

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

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

Есть ли стандартный способ сделать это или я могу использовать службы push push-уведомлений для этой цели?

Другими словами: теперь я использую pull для получения обновлений, есть ли способ, позволяющий серверу моего приложения знать, что пришло время для обновления?

Изменить: И если это невозможно, что будет хорошим временным интервалом для обновления (0.03 kb, если обновлений нет). Много ли нужно проверять каждые 30 секунд?

4b9b3361

Ответ 1

В Apple Online Library есть хорошо объясненная документация.

С Apple Push Notification Service (APNS) вы можете получить ЛЮБОЕ сочетание:

  • Предупреждающее сообщение для отображения пользователю
  • Номер, чтобы значок значка приложения с
  • Звук для воспроизведения

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

Если вы хотите использовать APNS, вам нужно

  • веб-сервер (будет генерировать push)
  • CSR с веб-сервера
  • сертификат Apple, доверяющий вашему серверу (это причина CSR)
  • приложение iOS с идентификатором приложения, настроенным для уведомлений

Все, что связано с CSR и доверяет вашему серверу, подробно описано в портале инициализации iOS, разделе "Идентификатор приложения", вкладке "Как войти". Попробуйте эту ссылку.

На вашем веб-сервере должен быть размещен провайдер APNS, который будет выполнять следующие два действия:

  • Зарегистрируйте маркер, идентифицирующий конкретную установку на конкретном устройстве iOS. Этот токен создается для Apple APNS и будет отправлен поставщику вашим приложением. enter image description here

  • Генерирование push-уведомлений: будет отправлено от вашего провайдера до Apple APNS, Apple APNS будет поставляться в ваше приложение (с предупреждением и/или значком и/или звуком и/или тишиной) enter image description here

Уведомление APNS будет доставлено в ваше приложение с помощью системы удаленных уведомлений.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

Вы можете посмотреть Простой делегат приложений APNS

Как поставщик вы можете использовать свой собственный разработанный или вы можете использовать/изменять любого уже загружаемого, например

Итак, ответ ДА, это возможно. Используя Easy APNS esamples, генератор push должен выглядеть следующим образом:

$apns->newMessage(1);
$apns->addMessageCustom('acme2', array('bang', 'whiz'));
$apns->queueMessage();

Ответ 2

Да, это возможно с iOS 7 +

Вы можете получать "фоновые" push-уведомления, если вы переопределите этот метод UIApplicationDelegate: приложение (_: didReceiveRemoteNotification: fetchCompletionHandler:)

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void)
{
    // do what you need i.e. download fresh content (max. 30 seconds)

    completionHandler(UIBackgroundFetchResult.NoData)
}

Как документация этого метода метода говорит:

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

Не забудьте включить "Фоновая выборка" и "Удаленные уведомления" в фоновых режимах.

введите описание изображения здесь

Подробнее о выполнении фона здесь.

Ответ 3

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

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

Ответ 4

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

Итак, почему в вашем случае, описанном в предыдущем сообщении, лучше проверить с сервером, когда вы пришли из фона или когда приложение запускается, если есть какая-либо загрузка.

Другой вариант - отправить видимое уведомление, чтобы пользователь запустил приложение, а затем обновление (как описано в предыдущем абзаце) произойдет

Ответ 5

Используйте методы делегирования applicationDidRecieveRemoteNotification, чтобы сообщить приложению, чтобы он заходил в службу обновлений. Или вы можете опросить приложение в службе обновлений durin applicationwillEnterForgound, которую вы не хотите настраивать push-уведомлениями.

Ответ 6

Я не думаю, что ваш подход правильный. Рассмотрите все материалы, которые вы будете строить для простой задачи: 1) сервер для push 2) регистрация для уведомления 3) переход на задний план и возобновление (большой и сложный сервер для push-уведомления)

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

Таким образом, чистым решением может быть: 1) запросить сервер, используя обычный HTTP (используя запрос async NSURL..), например: http://...... & lastupdate = '2012: 05: 01 18 00' прохождение последней даты обновления мы получили успешную загрузку (Вы также можете использовать отметку времени unicx...)

2) сервер будет сравнивать эту дату со своей внутренней последней датой обновления: если у нее более новая дата, она ответит XML или plist (я предпочитаю plist...)

3) приложение загружает новые данные и обновляет дату/время.

4), если нет данных, ответ - это просто пустая строка или, например, та же самая дата, которую мы отправили.

Ответ 7

Короткий ответ на ваш первый вопрос: Вы должны опросить.

Почему: - Когда ваше приложение находится в фоновом режиме, оно не может знать никаких push-уведомлений, если нет предупреждений, а пользователь нажимает View или Launch, что не гарантируется (и вы не хотите предупреждение тоже).

Вы также можете избежать использования APNS (если это только для этой цели) из-за дополнительных накладных расходов на настройку сервера с сертификатами Apple и всем этим джазом.

Чтобы ответить на второй вопрос: насколько часто вы хотите, чтобы ваши обновления действительно зависели от того, что делает ваше приложение. Например, если вы показываете значения "Stock", вы можете обновлять данные каждые несколько секунд. Для погоды это может быть несколько часов. Для других это могут быть дни или даже дольше. Это зависит от того, насколько важны обновления для пользователя.