2017-01-24 5 views
5

채팅 클라이언트가 기능 중 하나 인 Android 애플리케이션이 있습니다. 채팅 클라이언트는 Android 용 Smack 라이브러리를 기반으로하고 백그라운드에서 XMPP 서버로 Openfire을 실행하는 XMPP를 사용합니다. 연결은 BOSH을 사용하여 설정됩니다. 전체 XMPP 연결 처리는 앱 활동이 포 그라운드에 있더라도 수신 메시지의 백그라운드에서 실행 및 수신 대기하는 서비스로 구현됩니다. 지금까지 모든 것이 완벽하게 작동합니다.Android/Smack : XMPP 연결을 절전 모드로 유지

유일한 문제는 휴면 모드 인 것 같습니다. 에뮬레이터 ("Stay Awake"로 설정된 경우) 또는 사용중인 휴대 전화에서 XMPP 연결이 유지되고 앱에서 메시지를 보내고받을 수 있습니다. 그러나 휴대 전화가 절전 모드로 전환되면 XMPP 연결이 끊어집니다. 사용자가 오프라인 상태 인 Openfire 서버의 관리 콘솔에서 확인할 수 있습니다. 직관적으로, 나는 WhatsApp와 같이 항상 메시지를 받기를 원합니다.

물론 Stackoverflow를 비롯한 온라인 검색도했지만 확실한 답을 얻을 수 없었습니다. 종종 유스 케이스는 작업이 매시간 한 번 주기적으로 수행되어야하는 것처럼 보입니다. 그러나 이것은 채팅 클라이언트의 경우 전나무처럼 보이지 않습니다. 내가 생각하기 때문에 이것은 일반적인 사용 사례입니다 - 결국, 채팅과 채팅 앱 또는 소위 많은 거기 밖으로 특징 -이 내 질문 있습니다 :

  • 내가 변경해야 할 방법 /를 연장 휴대 전화가 잠자는 동안 채팅 메시지를받을 수있는 앱입니까?

  • 나는 WakeLock을 우연히 발견했습니다. 이 방법이 있습니까? 아니면 사용 사례에 적합하지 않습니까?

  • Lollipop 이후 WakeLock을 사용하는 JobScheduler API도 있습니다. 더 좋아?

  • 예를 들어, WhatsApp는이 사건을 어떻게 처리합니까?

사이드 노트 : 디버깅을 위해 에뮬레이터를 사용하여 절전 모드에 문제가 있습니다. 에뮬레이터에서 "Stay Awake"를 끄면 화면이 1 분 이상 지나면 검정색으로 바뀌고 XMPP 연결이 끊어집니다. 하지만 어떻게 든 깨어 난/에뮬레이터를 다시 한 번 검은 색으로 전환하는 방법을 모릅니다. 안드로이드 스튜디오 실제로 어떤 시점에서 장치 또는 무언가가 사라 졌다고 말해, 나는 다시 에뮬레이터를 다시 시작해야합니다.

답변

2

이 문제를 해결하는 정확한 방법은 푸시 알림을 사용하는 것입니다.

지정된 유휴 간격 후, 즉 장치가 절전 모드로 전환 된 후 XMPP 연결이 끊어지는 것은 자연스러운 동작입니다.

WhatsApp의 경우와 마찬가지로 동일한 XMPP를 사용하며 교환되는 메시지에서 래퍼 클래스 역할을하는 서버를 유지 관리합니다. 이 서버는 배달 여부와 상관없이 메시지 상태를 확인합니다. 전달되지 않으면 밀어 넣기 알림을 보내고 메시지를 받으면 푸시 서비스의 장치 끝에서 연결이 활성화되어 있고 인증되었는지 확인합니다.

인증되지 않으면 연결이 다시 설정됩니다. 이러한 방식으로, 대부분의 채팅 응용 프로그램이이 시간 초과 예외를 관리합니다. 이 도움이

희망 :

+0

푸시 알림이 필요하지 않으며 "지정된 유휴 간격 후에 연결이 끊어 지도록 XMPP 연결의 자연스러운 동작"도 아닙니다. – Flow

2

당신은 당신이 WakeLock들 필요가 없습니다, 푸시 알림이 필요하지 않습니다.대신 단순히

  • 화이트리스트 당신의 도즈 모드
  • 사용 CONNECTIVY_CHANGED 의도에
  • 사용 헤로인의 ServerPingWithAlarmManager
  • 법은 안드로이드로 보내기 끈적 끈적한 (START_STICKY) 백그라운드 서비스에서 앱 및 XMPPTCPConnectioninstantShutdown() 점에서를 사용 케이스.
+0

배터리 수명에 어떤 영향을 미칩니 까? 내가 올바르게 이해하면 도즈 모드에서 앱을 허용 목록에 추가하려면 휴대 전화 사용자가 확인해야합니다. – Christian

+0

배터리 수명에 미치는 영향은 얼마나 많은 XMPP 스탠자가 전선을 통과하는지에 따라 다릅니다. 따라서 불필요한 트래픽을 피하십시오. – Flow

+0

@ 마지막 주제의 목적은 무엇입니까? 감사 – joao2fast4u

관련 문제