Push Notification 정리 1. 2. APNS........................................................................................................................................................................................ 2 1.1. Apple Push Notification Service .................................................................................................................... 2 1.2. The Notification Payload .................................................................................................................................. 2 1.3. 참고 URL .................................................................................................................................................................. 3 1.4. iPhone 관련 ID ..................................................................................................................................................... 3 C2DM ...................................................................................................................................................................................... 3 2.1. Android Cloud to Device Messaging Framework ................................................................................ 3 2.2. 메시지 발송............................................................................................................................................................. 3 2.3. 참고 URL .................................................................................................................................................................. 5 2.4. Android 관련 ID ................................................................................................................................................... 5 2.5. Android에서의 UDID .......................................................................................................................................... 5 1. APNS 1.1. - Apple Push Notification Service Apple에서 제공하는 Push Notification 서비스로 아래 그림과 같이 Provider (서비스 서버) 가 Client App으로 메시지를 발송할 수 있는 서비스이다. - Client App은 APNS로부터 deviceToken을 얻어 Provider에 제공한다. 이후 Provider가 메 시지를 전송할 때 이 deviceToken을 함께 보내면, APNS가 deviceToken을 사용하여 Client App을 찾아 메시지를 전달한다. - deviceToken은 iOS를 재설치하거나 초기화하면 바뀔 수 있다. (http://stackoverflow.com/questions/2751481/are-push-notification-tokens-unique-acrossall-apps-for-a-single-device) 1.2. The Notification Payload - json format, 최대 256 byte - 'aps' namespace는 alert, badge (아이콘), sound 노드를 포함할 수 있다. { "aps" : { "alert" : "You got your emails.", "badge" : 9, "sound" : "bingbong.aiff" }, "acme1" : "bar", "acme2" : 42 } 1.3. - 참고 URL APNS - Local and Push Notification Programming Guide (http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/R emoteNotificationsPG/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008194CH1-SW1) 1.4. iPhone 관련 ID - Bundle ID: ex) com.kt.m2m.smartcar - UDID (Unique Device Identifier) : 디바이스 식별 ID (디바이스 SN과 관련, SIM과는 무관) [a-f0-9] * 40 character - DeviceToken (APNS) : App이 디바이스에 인스톨 될 때 APNS로부터 받음. Push Notification에 사용. 32 bytes 2. C2DM 2.1. Android Cloud to Device Messaging Framework - Google에서 제공하는 Push Notification 서비스로 Third-party Application Server (서비스 서버)가 Android Application으로 메시지를 보낼 수 있다. - Google은 C2DM을 통한 메시지 전달을 100% 보장하지는 않는다. - 메시지를 받기 위해 Android Application이 실행상태일 필요는 없다. - Android 2.2 (Froyo) 이상이고, Android Market이 설치되어 있어야 한다. - C2DM은 기존의 Google 서비스 커넥션을 이용하므로, 사용자는 Google 계정을 설정한 상태여야 한다. - 메세지는 최대 1024바이트까지 허용 (Payload 데이터가 아닌 전체 메세지 크기임) - Google은 Thrid-party 서버가 발송하는 전체 메시지 수와 특정 디바이스로 보내는 메시 지 수를 제한한다. (정확하게 얼마나 보내면 제한하는지는 알수 없음.) 2.2. 메시지 발송 - https://android.apis.google.com/c2dm/send 으로 POST방식으로 전송한다. - 보내야 하는 파라미터는 아래와 같다. Field Description registration_id The registration ID retrieved from the Android application on the phone. Required. - collapse_key An arbitrary string that is used to collapse a group of like messages when the device is offline, so that only the last message gets sent to the client. This is intended to avoid sending too many messages to the phone when it comes back online. Note that since there is no guarantee of the order in which messages get sent, the "last" message may not actually be the last message sent by the application server. Required. data.<key> Payload data, expressed as key-value pairs. If present, it will be included in the Intent as application data, with the <key>. There is no limit on the number of key/value pairs, though there is a limit on the total size of the message. Optional. delay_while_idle If included, indicates that the message should not be sent immediately if the device is idle. The server will wait for the device to become active, and then only the last message for each collapse_key value will be sent. Optional. Authorization: GoogleLogin auth=[AUTH_TOKEN] Header with a ClientLogin Auth token. The cookie must be associated with theac2dm service. R 리턴 값은 아래와 같다 Response Description Includes body containing: 200 id=[ID of sent message] Error=[error code] o QuotaExceeded — Too many messages sent by the sender. Retry after a while. o DeviceQuotaExceeded — Too many messages sent by the sender to a specific device. Retry after a while. o InvalidRegistration — Missing or bad registration_id. Sender should stop sending messages to this device. o NotRegistered — The registration_id is no longer valid, for example user has uninstalled the application or turned off notifications. Sender should stop sending messages to this device. o MessageTooBig — The payload of the message is too big, see the limitations. Reduce the size of the message. o MissingCollapseKey — Collapse key is required. Include collapse key in the request. 503 Indicates that the server is temporarily unavailable (i.e., because of timeouts, etc ). Sender must retry later, honoring any Retry-After header included in the response. Application servers must implement exponential back off. Senders that create problems risk being blacklisted. 401 Indicates that the ClientLogin AUTH_TOKEN used to validate the sender is invalid. 2.3. 참고 URL - Android Cloud to Device Messaging Framework (http://code.google.com/intl/ko-KR/android/c2dm/index.html) 2.4. Android 관련 ID - Application ID : ex) com.kt.m2m.smartcar - deviceID : 2.5절 참조 - Registration ID : C2DM서버가 Android application에게 발급해주는 ID. Thrid-party 서버가 C2DM을 통해 메세지를 보낼때 디바이스(device+application)를 식별하는데 사용. - Sender Auth Token : Thrid-party 서버가 Google 서비스에 접근할 때 사용하는 인증키. 2.5. Android에서의 UDID - Android에서 디바이스를 구별하기 위해 다음과 같은 값들을 사용한다. Telephony 서비스가 있어야 함. deviceID READ_PHONE_STATE 필요. IMEI for GSM, MEID or ESN for CDMA Telephony 서비스가 있어야 함. subscriberID READ_PHONE_STATE 필요. IMSI for GSM MAC Address Serial Number WiFi 를 지원 해야 함. WiFi 가 켜져 있어야 함. Android 2.3(Gingerbread)부터 가능. 제조사에서 지정한 Device Unique ID. Android 2.2(Froyo) 이전 ANDROID_ID 디바이스에서는 100% 신뢰 못함. Android <=2.1 or >=2.3. Only 2.2 has the problems mentioned in the post. UUID App 설치 후 처음 실행시 생성.