Как приложение в фоновом режиме может проверить подключение к интернету, IOS?
У моего приложения Iphone есть 2 режима, онлайн и автономный режим. если пользователь использует приложение в онлайн-режиме, запрос немедленно отправляется на сервер. если пользователь использует приложение в автономном режиме, я буду хранить запрос локально, чтобы я мог загрузить его, когда будет доступен интернет. Я использую класс доступности для проверки доступности интернета. Достижимость работает нормально с приложением. Я не могу добиться следующего сценария. Я сохранил запрос, так как пользователь работает в автономном режиме, то есть пока пользователь нажимает кнопку приложения в фоновом режиме, нажимая кнопку "Домой" на iPhone через некоторое время пользователь активирует Wi-Fi или сотовую связь на своем устройстве. когда пользователь включает интернет-соединение, мое приложение, которое находится в фоновом режиме, должно получать уведомление и должно начинать отправку запроса на сервер. Как я могу достичь этой функциональности? Многие приложения IOS могут иметь такое же требование. как они это делают? любая идея?
Я попытался сделать следующий шаг, чтобы добиться этого, но не смог. Что я делаю не так, помогите мне.
1) Я добавил наблюдателя для kReachabilityChangedNotification внутри метода делегата applicationDidEnterBackground. но мое приложение не может прослушивать Kreachabiliychagednotification, в этом методе.
2) Если я добавлю наблюдателя для kReachabilityChangedNotification внутри приложения didbecomeActive, то мое приложение сможет прослушивать Kreachabiliychagednotification.
Почему IOS не позволяет прослушивать Kreachabiliychagednotification, когда приложение находится в фоновом режиме?
2 ответа
Ответ заключается в том, что вы не можете, если ваше приложение не будет использовать один из этих конкретных целей (цитируя Apple doc):
Поддержка некоторых типов фонового выполнения должна быть заранее объявлена приложением, которое их использует. Приложение заявляет о поддержке службы, используя свой файл Info.plist. Добавьте ключ UIBackgroundModes в файл Info.plist и установите его значение в массив, содержащий одну или несколько из следующих строк:
* audio - приложение воспроизводит слышимый контент для пользователя в фоновом режиме. (Этот контент включает потоковое аудио или видео с использованием AirPlay.)
* location - приложение информирует пользователей об их местонахождении, даже когда оно работает в фоновом режиме.
* voip - приложение предоставляет возможность пользователю совершать телефонные звонки, используя подключение к Интернету.
* newsstand-content - приложение представляет собой приложение Newsstand, которое загружает и обрабатывает содержимое журнала или газеты в фоновом режиме.
* external-accessory - приложение работает с аппаратным аксессуаром, который должен регулярно доставлять обновления через платформу External Accessory.
* bluetooth-central - приложение работает с аксессуаром Bluetooth, который должен регулярно доставлять обновления через базовую инфраструктуру Bluetooth.
* bluetooth-Периферийное устройство - приложение поддерживает связь Bluetooth в периферийном режиме через базовую структуру Bluetooth.
Вы можете только проверить на достижимость, снова входя на передний план.
Я пришел к тому же сценарию, когда был в проекте, но я узнал, что по умолчанию приложение в фоновом режиме остается только на короткое время, большинство приложений переходят в приостановленное состояние вскоре после этого. Это означает, что приложение находится в фоновом режиме, но не выполняет код. Так что ваши пользовательские уведомления не работают. Необходимо запросить NetworkReachability во время пробуждения в методах делегата приложения:
applicationWillEnterForeground:
applicationDidBecomeActive
это было лучшее, что я сделал для решения этой проблемы, надеюсь, это поможет