푸시 알림 기술은 Android에서 어떻게 작동합니까? 다른 방식으로 실행되는 서비스에 의해 수행

Google은 푸시 알림 기능을 어떻게 구현 했습니까? 백그라운드에서 또는 다른 방식으로 실행되는 서비스에 의해 수행 된 폴링을 통해 작동합니까?



답변

이스라엘에서 안드로이드 개발자 컨퍼런스에서 들었던 내용에서 :

클라우드 Google 서버 에는 수락 모드 에서 대기중인 TCP 소켓이 있습니다 . Google Play 애플리케이션에서 TCP 연결을 시작했습니다. 그렇기 때문에 Google Cloud Messaging (GCM) (이전의 Android Cloud to Device Messaging Service- C2DM )을 작동 시키려면 Google Play가 기기에 설치되어 있어야합니다 .

이 TCP 클라이언트 소켓이 일부 메시지를 수신하면, 메시지에는 주소를 지정해야하는 응용 프로그램의 패키지 이름과 데이터 자체와 같은 정보가 포함됩니다. 이 데이터는 분석되어 브로드 캐스트되어 결국 응용 프로그램에서 수신되는 인 텐트 로 파싱 됩니다.

장치의 무선 상태가 “유휴”모드로 바뀌더라도 TCP 소켓은 열린 상태로 유지됩니다. 인 텐트를 받기 위해 응용 프로그램을 실행할 필요는 없습니다.

http://developer.android.com/google/gcm/gcm.html 에서 추가 정보


답변

Android는 Google 서버에 하나의 활성 연결을 유지하지만 휴대 전화의 앱에 Google 클라우드 메시징 (GCM) 메시지를 보낼 때까지 트래픽이 전송되지 않기 때문에 많은 전력이나 데이터를 사용하지 않습니다. 휴대 전화에는 모든 앱에서 사용하는 연결이 하나뿐입니다. GCM을 사용하는 새 앱을 설치해도 추가로드가 발생하지 않습니다.

GCM의 첫 단계는 이메일 서버와 같은 타사 서버가 Google GCM 서버에 요청을 보내는 것입니다. 그런 다음이 서버는 열린 연결을 통해 장치로 메시지를 보냅니다. Android 시스템은 메시지를보고 어떤 앱인지 확인하고 해당 앱을 시작합니다. GCM을 사용하려면 앱이 Android에 등록되어 있어야하며 관련 권한이 있어야합니다. 앱이 시작되면 메시지의 데이터로 바로 알림을 생성 할 수 있습니다. GCM 메시지의 크기는 매우 제한적이므로 앱에서 타사 서버에 대한 일반 연결을 열어서 추가 정보를 얻을 수 있습니다 (예 : 새 이메일 헤더 다운로드).

푸시 알림을 사용하면 새로운 데이터를 확인하기 위해 앱을 정기적으로 실행할 필요가 없으므로 전력과 데이터가 모두 절약됩니다. GCM과 같은 중앙 집중식 메커니즘의 이점은 기기에 하나의 개방형 네트워크 연결 만 필요하며 Android GCM 시스템은 자체 네트워크를 유지하기 위해 백그라운드에서 실행중인 각 앱이 아니라 계속 실행해야하는 유일한 것입니다 자체 서버에 연결합니다.

이것을 다음에서 얻었습니다. 출처 여기를
참조 하십시오 .


답변

긴 폴링 TCP 연결로 Android에서 푸시 알림을 직접 구현할 수 있습니다. 그러나 여분의 소켓 => 배터리 소모를 유지하는 것이 필요합니다. 또는 알람 관리자를 사용하여 정기적으로 연결을 열 수 있습니다.

구글은 아마도 모든 C2DM 푸시 알림을 위해 하나의 소켓을 열었으므로 배터리 효율이 더 높다.


답변

2018 년 4 월 10 일부터 Google은 GCM을 더 이상 사용하지 않습니다. GCM 서버 및 클라이언트 API는 더 이상 사용되지 않으며 2019 년 4 월 11 일부터 제거 될 예정입니다. GCM 앱을 FCM (Firebase Cloud Messaging)으로 마이그레이션하면 안정적이고 확장 가능한 GCM 인프라와 많은 새로운 기능이 상속됩니다.

https://firebase.google.com/docs/cloud-messaging/


답변

네 말이 맞아. Google에 서비스 (GTalk 서비스)가 있었으며이 서비스는 일정 기간 동안 Google 서버에 요청했습니다.


답변

Android 장치에서 푸시 알림을 받으면 발신자 응용 프로그램의 이미지와 메시지가 상태 표시 줄에 나타납니다. 정확히 클라이언트가 알림을 탭하면 응용 프로그램을 시작합니다.


답변