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

Как сохранить приложение iPhone в фоновом режиме полностью работоспособным

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

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

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

Я не знаю, возможно ли это, но я прочитал несколько сообщений, которые так говорят, но, к сожалению, они не сказали, как: = (

ОБНОВЛЕНИЕ: В этот учебник я обнаружил, что Acrobits имеет два приложения в Apple Store, которые "могут заставить приложение оставаться в живых и бодрствовать на заднем фоне". Итак, есть ли способ сделать это?

4b9b3361

Ответ 1

Вы можете выполнять задачи в течение ограниченного времени после того, как ваше приложение направлено на переход в фоновый режим, но только на указанный период. Запуск дольше, чем это приведет к тому, что ваше приложение будет прекращено. См. Раздел "" Завершение долговременной задачи в фоновом режиме" в руководстве по программированию приложений iOS для того, как это сделать.

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

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

Ответ 2

Начиная с ioS 7, для приложений в фоновом режиме есть более новые способы. Apple теперь признает, что приложения должны постоянно загружать и обрабатывать данные постоянно.

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

  • Приложения, воспроизводящие звуковой контент для пользователя в фоновом режиме, например, приложение для музыкального проигрывателя.
  • Приложения, которые записывают аудиоконтент в фоновом режиме.
  • Приложения, которые постоянно информируют пользователей о своем местоположении, например навигационное приложение
  • Приложения, поддерживающие передачу голоса по интернет-протоколу (VoIP)
  • Приложения, которые необходимо регулярно скачивать и обрабатывать.
  • Приложения, регулярно получающие обновления от внешних аксессуаров

Вы можете объявлять фоновые задачи, поддерживаемые приложениями в Info.plist, с помощью X Code 5+. Напр. добавление ключа UIBackgroundModes в ваши файлы Info.plist и добавление значения "выборки" в массив позволяет вашему приложению регулярно загружать и обрабатывать небольшие объемы контента из сети. Вы можете сделать то же самое на вкладке "Возможности" свойств приложения в XCode 5 (привязка моментального снимка).

Capabilities tab in XCode 5 Вы можете найти об этом в документации Apple

Ответ 3

Если какая-либо фоновая задача выполняется более 10 минут, задача будет приостановлена, а код кода, указанный с помощью функции beginBackgroundTaskWithExpirationHandler, вызывается для очистки задачи. оставшееся время фона можно проверить с помощью [[UIApplication sharedApplication] backgroundTimeRemaining]. Первоначально, когда приложение находится на переднем плане, backgroundTimeRemaining устанавливается на большее значение. Когда приложение переходит на задний план, вы можете увидеть, что значение backgroundTimeRemaining уменьшается с 599.XXX(1 минута). как только backgroundTimeRemaining станет ZERO, фоновая задача будет приостановлена.

        //1)Creating iOS Background Task
        __block UIBackgroundTaskIdentifier background_task;
        background_task = [application beginBackgroundTaskWithExpirationHandler:^ {

               //This code block is execute when the application’s 
               //remaining background time reaches ZERO.
          }];


        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            //### background task starts

            //#### background task ends
        });

        //2)Making background task Asynchronous
        if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)])
        {
            NSLog(@"Multitasking Supported");

            __block UIBackgroundTaskIdentifier background_task;
            background_task = [application beginBackgroundTaskWithExpirationHandler:^ {

                //Clean up code. Tell the system that we are done.
                [application endBackgroundTask: background_task];
                background_task = UIBackgroundTaskInvalid;
            }];


        **//Putting All together**
            //To make the code block asynchronous
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

                //### background task starts
                NSLog(@"Running in the background\n");
                while(TRUE)
                {
                    NSLog(@"Background time Remaining: %f",[[UIApplication sharedApplication] backgroundTimeRemaining]);
                    [NSThread sleepForTimeInterval:1]; //wait for 1 sec
                }
                //#### background task ends

                //Clean up code. Tell the system that we are done.
                [application endBackgroundTask: background_task];
                background_task = UIBackgroundTaskInvalid; 
            });
        }
        else
        {
            NSLog(@"Multitasking Not Supported");
        }

Ответ 4

Для запуска на мобильных устройствах iOS сделайте свое приложение аудиоплеер/рекордер или приложение VOIP, законным для отправки в магазин приложений или поддельным, если только для вашего собственного использования.

Даже это не сделает приложение "полностью работоспособным", что бы оно ни было, но ограничено ограниченным API.

Ответ 5

Зависит от того, что он делает. Если ваше приложение занимает слишком много памяти или делает вызовы функций/классов, это не должно, SpringBoard может его прекратить. Тем не менее, он, скорее всего, будет отклонен Apple, поскольку он не следует за их использованием в фоновом режиме.

Ответ 6

Может быть ссылка будет помогать bcz u, возможно, придется реализовать код в Appdelegate при запуске приложения в фоновом методе. Также ознакомьтесь с сайтом developer.apple.com для класса приложения Здесь - ссылка для запуска приложения в фоновом режиме