출처 : "dale lane"님 블로그
<참고자료>
[android] 안드로이드 Push notification 방법
MQTT 란? ( MQ Telemetry Transport )
Android 에서 MQTT 이용하여 Push Notification 받기
Overview
- MQTT 를 이용해서 android 에서 어떻게 push notification 을 받는지 알아보자.
Services vs Activities
- Service 를 이용하라.
Make it sticky
- service 를 시작할 때 START_STICKY 를 return 하면, LMK 등의 상황에서 service 가 kill 되더라도, resource 가 다시 available 해지면 다시 service 가 가동된다.
A persistent connection
- MQTTClient object 를 만들면 이것은 long-running TCP/IP connection 을 만든다. 만약 메세지가 도착하면 publishArrived 함수가 호출된다. 폰이 sleep 중에도 작동한다.
Keeping the connection alive - in a bad way
- MQTT server 에 연결할 때 중요한 parameter 중 하나는 keepAlive period. 만약 서버가 client 로부터 keepAlive 를 받지 못한다면 서버는 client 가 종료되었다고 간주하고 connection 을 끊는다.
- MQTTClient 는 background thread 에서 주기적으로 서버에 살아있다는 것을 알리기 위한 ping message 를 보낸다.
- 단말이 sleep 상태에 빠져서 CPU 까지도 멈춘 상태가 된다면, ping 을 날릴 수 없고, connection 은 끊기게 된다.
- 이를 해결하기 위한 가장 쉬운 방법은 WakeLock 을 사용하는 방법이고, 이 때 PARTIAL_WAKE_LOCK 을 설정해주어 sleep 상태에 들어가도 CPU 가 돌도록 해야 한다.
- 이 partial wake lock 은 MQTT connect 를 할 때 적용해주어야 한다.
Testing what happens when you turn your phone off - a gotcha
- 현재 많은 앱들이 WakeLock을 써서 CPU 를 항상 돌도록 하고 있다. 그래서 꼭 WakeLock 을 해주지 않아도 그들의 수혜를 입을 수 있다. adb shell dumsys 를 입력하면 phone 에 대한 많은 정보를 볼 수 있는데, mLocks.size 쪽을 보면 얼마나 많은 앱들이 wake lock 을 가동시켜놨는지 볼 수 있다.
Keeping the connection alive - in a good way
- AlarmManager 를 사용하자.
- server 는 client 에게 grace period 를 주어야 한다. ( 예를 들어 20분이 keep alive interval 이라면 30분까지는 connection 을 끊어서는 안 된다. )
- grace period 를 주게 되면, 20분정도에 급박하게 ping 을 주는 일에 대해 큰 걱정을 하지 않아도 된다.
Don't rely on connectionLost
- MQTTClient library 는 connectionLost callback 이 있다.
Respect the user's requests
- "Accounts and sync" setting 에서 user는 background data 를 사용하지 않도록 설정할 수 있다. 하지만 app 은 이를 무시하고 진행할 수 있는데, 이는 좋은 방법이 아니다. user 의 choice 를 존중하기 위해 이 값들을 읽어서 적용시켜야 한다.
Create a unique client ID
- MQTT specification 은 unique client ID 를 요구한다.
Assuming that you will spend time without a connection
- network 가 가능하지 않은 경우에는 모든 것을 해제하고, network 가 가능해졌을 때 다시 모든 것을 설정하는 것이 좋다.
Reminding the user that you're running
- notification 에 계속 상태를 나타내도록 하는 방법도 괜찮다. ( optional 로 설정 )
Keeping the received data safe
Choosing a keep-alive value
- 20분 정도의 keep alive interval 이 괜찮다.
Passing config values
Rebroadcasting received messages for interested UIs
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] Custom Attribute 를 style 정의하는 방법 (0) | 2012.11.14 |
---|---|
XMPP ( eXtensible Messaging and Presence Protocol ) (0) | 2012.11.13 |
[android] 안드로이드 Push notification 방법 (0) | 2012.11.13 |
[android] EditText inputType="textPassword" coding 으로 만들기 (2) | 2012.11.12 |
[android] custom attribute format ( type ) (0) | 2012.11.12 |
댓글