setKeepAliveTimeout поведение на iOS, надвишава 15 събуждания за 300 сек

Пиша VOIP приложение на iOS 5 и се опитвам да разбера как действителната комуникация може да остане жива, докато е във фонов режим.

Разбирам, че има максимален брой събуждания, които сокетът може да получи за период от време. Проблемът ми е, че връзката ми със сокет получава твърде много съобщения за събуждане, поради което приложението се прекратява със съобщение за срив:

надхвърли 15 събуждания за 300 сек

Това, което наистина не разбирам, е как се предполага, че сокетът може постоянно да изпраща и получава данни през него (за нуждите на VOIP), ако има ограничение за количеството данни, които може да получи за период от време?

Да приемем, че сокетът получава гласови данни за гласов разговор, който се случва във фонов режим. Не е ли, че гласовите данни трябва да минават през връзката на сокета? Ако е така, как може да работи, ако има ограничение за активността, която сокетът може да има за период от време?


person zumzum    schedule 05.01.2012    source източник


Отговори (2)


VOIP app behavior at background (iOS 4.0+):

  • Having a single socket that remains open, flagged as Voip
  • This VOIP socket is maintained by the system, while app suspended at BG
  • You may schedule a keep-alive block, and the OS will wake your app every X time
  • X >= 10min (See [[UIApplication sharedApplication] setKeepAliveTimeout: handler:)
  • this socket is NOT the media socket, it uses only to receive invitations for incoming calls
  • App wake up on every incoming data on the socket (iOS 5.0+ limit is 15 times in 300 seconds)
  • Once you've received an incoming call, your app will wake up, and you may open an Audio Session for this call.

    VOIP приложенията трябва да бъдат маркирани в info.plist, под „Необходими фонови режими“, като „voip“ и „аудио“.

    След като отворите аудио сесия (за активно повикване), приложението ви може да работи напълно на заден план и вече не е спряно, докато тази аудио сесия не бъде затворена.

    Както и да е, другата алтернатива е да използвате Push известия като тригери за входящи повиквания.
    Освен това, това ще ви спести проблемите с поддръжката на контакт 24/7, ще спести малко батерия
    и ще работи дори ако потребителят е затворил приложението (което не е случаят с първата алтернатива).

    person avishic    schedule 14.03.2012

  • Каква версия на IOS, устройство, което използвате?

    Това е известна „функция“/проблем, въведен от Apple в IOS5 за намаляване на използването на батерията на Voip приложенията...

    person Michael    schedule 01.02.2012
    comment
    Можете ли да добавите препратка към това? - person Johan Karlsson; 06.02.2012
    comment
    Това също не ми причини край на проблемите с iOS 5. Имало ли е разговори за разрешаване на това или предоставяне на заобикаляне/предложено внедряване за тези, които използват, които имат основателни причини да бъдат активни? - person MobileVet; 15.02.2012
    comment
    Моля, добавете повече информация. В момента имаме проблеми и с тях. - person IBG; 01.03.2012