Android는 거의 실시간 푸시 알림을 지원합니까?


343

나는 최근에 거의 즉시받을 수있는 아이폰 애플 리케이션의 능력에 대해 알게 애플리케이션에 알림을 애플 리케이션에게 알림 .

이것은 푸시 알림의 형태로 제공되며 맞춤형 프로토콜로 iPhone에 항상 데이터 연결을 유지하고 이진 패킷을 앱에 메시지로 전송하여 서버 앱에서 전화 앱으로 0.5 초에서 5 초 사이에 매우 빠르게 경고 를 표시합니다. 응답 시간. 이것은 메시지가 아닌 데이터 계획의 일부로 청구되는 매우 작은 패킷으로 SMS가 아닌 데이터로 전송됩니다.

Android를 사용하는 경우 비슷한 기능이 있는지 또는 Android API를 사용하여 이와 비슷한 것을 구현할 수 있는지 알고 싶습니다. 명확히하기 위해 다음과 같이 정의합니다.

  • SMS 메시지는 아니지만 일부 데이터 기반 솔루션
  • 가능한 한 실시간
  • 확장 가능합니다. 예를 들어 모바일 앱의 서버 부분으로 몇 초 만에 수천 개의 앱 인스턴스에 알릴 수 있습니다

나는 응용 프로그램이 풀 기반, HTTP 요청 / 응답 스타일 일 수 있음을 높이 평가하지만 이상적으로는 알림을 확인하기 위해 크게 폴링하고 싶지 않습니다. 게다가 데이터 계획을 비우는 것과 같습니다.


3
gmail 및 gchat 알림은 일반적으로 해당 임계 값 내에 있습니다. 자신의 앱에서이를 복제 할 수있는 방법이 있어야합니다.
Dana the Sane

예, 푸시 메시지를 매우 간단하게 만드는 Android 라이브러리가 있습니다. 앱에 Jigy의 Droid 알림 라이브러리를 포함 하면 약 10 줄의 코드 만 있습니다 ... 도움이 되길 바랍니다 :)
Corey Harden

신뢰성 향상을 위해 후드 아래에서 MQTT를 사용하는 실시간 푸시 알림 게이트웨이에 대해 Pushy ( pushy.me )를 확인하십시오 . 전체 공개-Pushy를 설립했습니다.
Elad Nava

답변:


215

Firebase Cloud Messaging FCM FAQ 는 새로운 버전의 GCM입니다. GCM의 핵심 인프라를 상속하여 Android, iOS 및 Chrome에서 안정적으로 메시지를 전달합니다. 그러나 오늘날 많은 개발자들이 GCM SDK를 사용하여 알림을 처리하고 클라이언트 앱 업그레이드에 시간이 걸리기 때문에 계속해서 GCM을 지원할 것입니다.

2012 년 6 월 26 일부터 Google 클라우드 메시징 은 기기에서 실행되는 애플리케이션에 메시지를 보내는 기본 방법입니다.

이전 (현재는 더 이상 사용되지 않음)의 서비스를 Cloud To Device Messaging 이라고했습니다 .


14
Google은 code.google.com/android/c2dm의 Java로 Android 앱에이를 구현하기위한 자세한 문서를 제공 하지만 C2DM의 서버 측 측면과 통신하기위한 샘플 코드가 부족합니다. 이 부분에 대한 자습서를 여기에 작성했습니다. blog.boxedice.com/2010/10/07/…
DavidM

2
Android 2.2 사용자에게 푸시 알림을 제공 할 수 있지만 푸시 알림없이 이전 배포에서 동일한 앱을 실행할 수있게 만들 수 있습니까?
OneWorld

3
@OneWorld : 예. 다른 Android 이전 버전과의 호환성 기술과 마찬가지로 C2DM을 사용할 수없는 경우 리플렉션을 사용하여 대체 전략을 선택하십시오. 자세한 내용은 developer.android.com/resources/articles/…
Lie Ryan

1
developer.android.com/videos/index.html#v=PLM4LajwDVc 푸시 알림에 대한 Google I / O 2010 프레젠테이션
vokilam

6
C2DM은 공식적으로 2012 년 6 월 26 일부터 더 이상 사용되지 않습니다. 대신 [Google Cloud Messaging for Android] ( developer.android.com/guide/google/gcm/index.html)
Mithun Sreedharan

47

XMPP 는 좋은 솔루션입니다. 푸시 지원 실시간 Android 애플리케이션에 사용했습니다. XMPP는 강력하고 확장 성이 뛰어나며 통합 및 사용하기 쉽습니다.

많은 무료 XMPP 서버가 있으며 (예의를 지키지 않아도 남용해서는 안 됨) 자신의 상자 중 하나에서 실행할 수있는 오픈 소스 서버가 있습니다. OpenFire 는 탁월한 선택입니다.

원하는 라이브러리 는 위에서 언급 한 것처럼 Smack 이 아니며 aSmack 입니다. 그러나 이것은 빌드 환경이므로 라이브러리를 빌드해야합니다.

이것은 XMPP 솔루션의 배터리 수명 영향에 대한 계산입니다.

Android 클라이언트는 XMPP 서버로 하트 비트를 보내려면 주기적으로 깨어나 지속적인 TCP 연결을 유지해야합니다.
이것은 전력 사용량 측면에서 비용을 분명히 부과합니다. 이 비용의 추정치는 다음과 같습니다.

  • 1400mAh 배터리 사용 (Nexus One 및 HTC Desire에서 제공)
  • 3G 네트워크에 연결된 유휴 장치는 약 5mA를 사용합니다.
  • 깨우기, 하트 비트, 절전주기는 5 분마다 발생하며 완료하는 데 3 초가 걸리고 300mA를 사용합니다.
  • 따라서 시간당 배터리 사용 비용은 다음과 같습니다.
    • 36 초 300mA = 3mAh 전송 하트 비트
    • 유휴 상태에서 3600 초 5mA = 5mAh
    • 4:95 + 3 = 7 : 95mAh 결합
  • 1400mAh 배터리는 유휴시 약 11.6 일, 애플리케이션 실행시 7.3 일 지속되며, 이는 배터리 수명이 약 37 % 감소한 것을 나타냅니다.
  • 그러나 배터리 수명이 37 % 감소하면 실제로 장치가 거의 유휴 상태가되지 않는 경우 최악의 경우가됩니다.

2
그러나 실제로는 전화가 깨어나거나 스위치가 켜지거나 네트워크 상태가 변경 될 때 수백 개의 의도가 실행되기 때문에 앱은이 작업을 수행 할 때 3 시간 동안 지속됩니다.
Monstieur

33

나는 최근에 당신이 요구하는 것을 수행하는 방법으로 안드로이드 용 MQTT http://mqtt.org 를 가지고 놀기 시작 했다 (즉, SMS가 아니라 데이터 기반, 거의 즉각적인 메시지 전달, 확장 가능, 폴링 등)

도움이되는 경우를 대비하여 배경 정보가있는 블로그 게시물이 있습니다. http://dalelane.co.uk/blog/?p=938

(참고 : MQTT는 IBM 기술이므로 IBM에서 일하고 있음을 지적해야합니다.)


mqtt는 이것을 어떻게하고 있습니까? 어딘가에 관련된 투표가 있어야합니까? 사과조차도 폴링을해야하지만 한 번에 하나의 연결 만하고 있으므로 배터리를 많이 소모하지는 않습니다.
Janusz

3
TCP / IP 연결을 열고 열어두면됩니다. 연결을 유지하기 위해 때때로 작은 핑 메시지를 연결로 보내야하지만 폴링하지는 않습니다.
dalelane

Google을 통해 푸시 메시지를 보내는 것이 불편한 경우 MQTT를 사용하는 것이 좋습니다. 또한 데이터 교환을 위해 클라우드 서비스 사용을 금지하는 고객과의 비공개 계약이 있습니다.
VH-NZZ

14

Xtify 플랫폼을 살펴보십시오 . 이것이 그들이하고있는 것처럼 보입니다.



8

대상 시장에 Google 라이브러리를 사용할 수 있다면 GTalk 기능 (기존 사용자 이름에 대한 리소스 등록 -BroadcastReceiver 와 함께 제공되는 메시지를 가로채는 것)을 피할 수 있습니다.

그렇지 않다면, 당신이 할 수 없다고 기대 한다면 , 당신은 자신의 XMPP 버전묶을 것 입니다. 이것은 고통 스럽지만 XMPP가 독립형 라이브러리로 별도로 번들로 제공되는 경우 더 쉬워 질 수 있습니다.

당신은 또한 고려할 수 있습니다 PubSubHubub 있지만 네트워크 사용법을 . 나는 그것이 XMPP 꼭대기에 지어 졌다고 생각합니다.


gtalk 라이브러리가 장치에있는 한 피기 백 기능을 항상 사용할 수 있다고 기사에 기록되어 있습니다. 실제로 어떻게 할 수 있는지에 대한 예제가있는 자료가 있습니까?
Janusz

GTalk는 1.0 (iirc) 이후 SDK에서 제거되었습니다.
MrSnowflake

8

나는 이것을 조사해 왔으며 jamesh가 권장하는 PubSubHubBub는 옵션이 아닙니다. PubSubHubBub는 서버 간 통신을위한 것입니다

"NAT 뒤에 있습니다. 허브에 가입 할 수 있습니까? 허브가 나에게 연결할 수 없습니다."

/ 익명

아니요, PSHB는 서버 간 프로토콜입니다. NAT 뒤에 있다면 실제로 서버가 아닙니다. PSHB 확장 (선택 사항)을 사용하여 매달리는 작업 ( "긴 폴링") 및 / 또는 이러한 클라이언트에 대한 메시지 상자 폴링에 대한 아이디어를 살펴 보았지만 핵심 사양은 아닙니다. 핵심 사양은 서버 간입니다.

/ 브래드 피츠 패트릭, 샌프란시스코, CA

출처 : http://moderator.appspot.com/#15/e=43e1a&t=426ac&f=b0c2d (직접 링크 불가)

가장 간단한 방법은 Comet HTTP 푸시를 사용한다는 결론에 도달했습니다. 이 솔루션은 간단하고 이해하기 쉬운 솔루션이지만 웹 응용 프로그램에도 재사용 할 수 있습니다.


8

Meteor 혜성 서버를 백엔드로 사용하여 Android에서 푸시 알림 용 Java 라이브러리를 개발하려는 새로운 오픈 소스 노력이 있습니다. 집사 프로젝트 블로그 에서 확인할 수 있습니다 . 우리는 개발자가 필요하므로 단어를 전파하십시오!


7

최근 구글 (2016 년 5 18 일) Firebase 가 거의 실시간 푸시 알림을 포함한 모바일 개발자를위한 통합 플랫폼이라고 발표 했다 .

이 회사는 이제 모든 Firebase 사용자에게 iOS, Android 및 웹을 지원하는 무료 및 무제한 알림을 제공합니다.

출처


6

어디서 읽었는지 찾을 수 없지만 Gmail은 열린 TCP 연결을 사용하여 전자 메일 푸시를 수행한다고 생각합니다.


joelapenna.com/blog/2009/07/android-foursquare-and-push 에는이 를 지원하는 것으로 보이는 Android 앱 개발자의 블로그 게시물 이 있습니다.
dalelane

이것들은 나에게 보이고, 그들은 또한 설문 조사를하고 있습니다. 모바일 장치는 서버에 연결하여 업데이트 대기중인 서버에 알립니다. 실제 푸시는 서버에 의해 시작되며 모바일 장치에서는 매우 어렵고 대부분의 경우 네트워크 공급자 지원 (sms / wap push)이 필요합니다.
MrSnowflake

1
"C2DM을 사용하면 타사 개발자가 Google 앱과 동일한 서비스를 사용할 수 있습니다." 안드로이드 클라우드에서 장치 메시징으로
colithium

6

으로 GTalk는 SDK에서 사라지고, '표준'푸시 메시징 시스템을 만들 수있는 좋은 아이디어가 될 수 있습니다. 이렇게하면 하나의 서비스 만 실행하면되며 하나의 추가 TCP 연결 만 열면됩니다. 응용 프로그램은이 서비스를 사용하여이 서비스 Intents와 대화 해야하며 먼저 서비스에서 알림을 보내고받을 수있는 권한을 요청해야합니다. 그런 다음 서비스는 새 응용 프로그램에서 메시지를주고 받으려는 사용자에게 알려야합니다. 그런 다음 사용자는 권한을 부여하거나 거부하므로 제어 권한을 유지합니다. 그런 다음 응용 프로그램은 작업 + 범주를 서비스에 등록하므로 푸시 된 메시지를 전달하는 방법을 서비스가 알 수 있습니다.

좋은 생각일까요?


6

왜 XMPP 구현을 사용하지 않습니까? 현재 gtalk, jabber, citadel 등 많은 공용 서버가 있습니다. Android의 경우 SMACK이라는 하나의 SDK도 사용할 수 있습니다. 이것은 푸시 알림을 말할 수 없지만 XMPP를 사용하면 클라이언트와 서버 사이에 연결을 유지하여 양방향 통신을 허용 할 수 있습니다. Android 클라이언트와 서버가 서로 통신 할 수 있음을 의미합니다. 현재 이것은 안드로이드에서 푸시의 필요성을 충족시킬 것입니다. 샘플 코드를 구현했으며 실제로 훌륭하게 작동합니다.


샘플 코드에 대한 링크를 제공 하시겠습니까? 배터리 수명에 관한 테스트를 마쳤습니까?
Alex

배터리 수명에 대한 테스트를 완료했습니다. 6 분마다 전송해야하는 하트 비트는 최악의 경우 배터리 수명을 30 % 줄입니다 (즉, 장치가 깨어 하트 비트를 보내기 위해 깨어납니다). 가장 좋은 경우 (사용자가 브라우징, 전화 등을 위해 장치를 사용하는 경우) 배터리 수명에 미치는 영향은 무시할 수 있습니다.
육체

6

나는 최근에 구글이 2.2에서 구현 한 것처럼 1.5에 작동하고 의도를 통해 방송되는 것처럼 http://pushdroid.org를 휴대 전화에 설치 해야하는 단일 응용 프로그램을 개발 했습니다.


4

GCM의 문제점은 프로세스와 관련된 많은 구성이 있다는 것입니다.

  • Android 앱에 상용구를 많이 추가해야합니다
  • GCM 서버와 통신하기 위해 외부 서버를 구성해야합니다.
  • 당신은 테스트를 작성해야합니다

간단한 것들 (나 같은)을 좋아한다면 UrbanAirship 을 시도해야합니다 . 많은 구성을 수행하지 않고 앱에서 GCM을 사용하는 가장 쉬운 방법은 (IMHO)입니다. 또한 GCM 메시지가 올바르게 전달되는지 테스트 할 수있는 예쁜 GUI를 제공합니다.

  • 여기 에서 문서 및 시작 안내서를 찾을 수 있습니다.
  • 여기 에서 샘플 응용 프로그램을 찾을 수 있습니다

참고 : 어쨌든 UrbanAirship과 관련이 없습니다.



2

코드에 라이브러리 클래스를 사용하여 사용자가 사용해야하는 리스너가 있습니다. 푸시에 대해 걱정할 필요가 없습니다. 서버 서버에 메시지를 보내야 메시지를 장치에 푸시합니다. 그들은 OAuth를 사용합니다. 프로토콜과 관련하여 CCS와 XMPP를 사용하는 두 가지 방법이 있습니다. CCS는 XMPP를 인증 된 전송 계층으로 사용하기 때문에 대부분의 XMPP 라이브러리를 사용하여 연결을 관리 할 수 ​​있습니다. 장치에 알림을 보내려면 Android 앱에서 코드를 작성하여 서버 코드를 보낼 수 있습니다. 메시지 전송은 코드에서만 수행됩니다. GCM의 경우 Google 서버에서 휴식을 취합니다. 이 링크에서 세부 사항을 확인할 수 있습니다

http://developer.android.com/google/gcm/server.html

또한 보안 문제

Google 클라우드 메시징 보안 https://groups.google.com/forum/#!topic/android-gcm/M-EevBitbhQ

앱이 실행되고 있지 않은 경우 브로드 캐스트 리스너에 대한 코드를 작성해야하기 때문에 장치가 알림을받을 수도 있습니다. 백그라운드에서 서버를 청취하고 메시지 패킷이있을 때마다 메시지를 알림으로받습니다. 안드로이드에는 신경 쓰지 않아도되는 서비스가 있습니다. 라이브러리 클래스를 사용하여 리소스를 사용하면 작업이 쉬워지고 앱이 실행 중이 아닌 경우 알림을 받도록 작성할 수 있습니다. 분명히, 앱이 수신하도록하는 리스너가있을 수 있습니다.이 링크에서 "메시지 수신"섹션을 확인하십시오.

http://developer.android.com/google/gcm/client.html

사용자의 요청도 받아들입니다. GCM의 경우 그렇게 할 것입니다. "메시지 보내기"를 확인하십시오

http://developer.android.com/google/gcm/client.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.