2012-02-07 3 views
6

앱이 개발되어 앱이 현재 "위치 기반"으로 설정되어 있기 때문에 백그라운드에서 실행할 수 있습니다. 그것은 사용자가 이동할 때 물건을하는 데 필요한 트릭이 아닙니다. 일부 검색 후이 앱은 위치 변경 이벤트에 대해서만 코드를 실행한다는 것을 알았습니다. 10 분 후에도 어떤 코드도 실행할 수 없습니다.XMPP 프레임 워크 - 위치 기반 앱이 백그라운드에서 연결됨

내 앱은 백그라운드에서 XMPP에 50 분 이상 연결된 상태로 연결을 끊습니다. 응용 프로그램을 절대 연결 해제하지 않으려면 프레임 워크를 살펴 보았지만이 동작을 해결할 수있는 위치를 찾을 수 없습니다. "indefinetly"접속 상태를 유지할 수 있는지 알고 있습니까? 그렇다면 xmppframework에서 어떤 설정을 변경해야합니다.

감사

[EDIT] 50 분 사용자가 여전히 XMPP에 연결되어 있지만 그것이 conected입니다 된 XMPPRooms 끊어있어 후. 다른 실행에서는 3 시간 동안 연결되었지만 iPhone이 연결되어있는 시간은 일관성이없는 것처럼 보입니다.

+0

XMPPRooms에서만 연결이 끊어지면 50 분 동안 지속되는 백엔드에서 유지 관리되는 세션과 관련 될 수 있습니다. – tipycalFlow

+0

내 서버를 다음과 같이 설정했습니다. _ 유휴 상태 인 클라이언트의 연결을 끊지 마십시오. _ 무슨 의미입니까? – subharb

+0

나는 그들이 사용자 세션과 다른 경우, 회의실을 의미했습니다. 편집에서 사용자 세션이 유지되지만 XMPPRooms의 연결이 끊어 졌음을 언급했습니다. – tipycalFlow

답변

0

응용 프로그램이 keep-alive 메시지를 보내고받을 수 있는지 확인하려면 voip 앱이어야하며 VoIP 소켓을 사용해야합니다. Apple's Documentation에서 :

  1. 는 앱의 Info.plist 파일에 UIBackgroundModes 키를 추가합니다. 이 키의 값을 voip 값이 포함 된 배열로 설정하십시오.
  2. VoIP 용도로 앱 소켓 중 하나를 구성합니다.
  3. 백그라운드로 이동하기 전에 setKeepAliveTimeout : handler : 메소드를 호출하여 주기적으로 실행될 핸들러를 설치하십시오. 앱은이 핸들러를 사용하여 서비스 연결을 유지 관리 할 수 ​​있습니다. 소켓에 관해서는

:

NSInputStream 및 NSOutputStream : 스트림에 NSStreamNetworkServiceType 속성을 추가하는 방법 : forKey : 코코아 스트림의 경우, setProperty는을 사용합니다. 이 속성의 값은 NSStreamNetworkServiceTypeVoIP로 설정해야합니다.

관련 문제