Developing and Testing Your Applications
下面是给开发和测试使用C2DM的程序的一些建议:
1. 要开发和测试C2DM程序。你需要在Android2.2的设备上运行和调试这个程序。这个设备包含基本的google服务。
2. 要在真机上面开发和调试,真机必须是Android2.2并且包含Market。
3. 要在模拟器上开发和调试,需要下载Android2.2 SDK和Google APIs by Google Inc,Android API 8。然后建模拟器的时候选择google api 8。
4. 如果C2DM对程序是一个至关重要的功能,必须在AndroidManifest.xml里设置android:minSdkVersion=”8”。确保程序装在能使程序正常运行的环境里。
Role of the Third-Party Application Server
在你写一个使用C2DM的程序之前,你必须有一个HTTPS 程序服务器并满足下面的要求:
1. 可以和客户端通信
2. 可以对C2DM服务器发起HTTP请求
3. 可以处理请求并可以按需要排列消息。比如,可以执行指数退避。
4. 可以存储ClientLogin Auth Token和registration IDs。ClientLogin Auth Token包含在发送消息的Post的header里。更多关于ClientLogin,看这里ClientLogin for Installed Applications。服务器端具有存储token的能力并可定期的刷新。
How the Application Server Sends Messages
这一节主要讲第三方程序服务器怎么发送消息到手机上的第三方程序。在第三方程序服务器可以发送消息给程序以前,它必须收到registration ID。
要发送消息,第三方程序服务器要发起一个post请求到https://android.apis.google.com/c2dm/send 并包含以下参数:
Field | Description |
registration_id | 必须参数。手机上的程序发过来的registration ID。 |
collapse_key | 必须参数。当手机离线的时候,一个任意的字符串用来处理一组消息,这样的话只有最后一条消息可以到客户端。这是为了避免发送大量的消息到客户端当手机重新在线的时候。不能保证消息的顺序,所以发送到客户端的消息不一定是第三方服务器发送的最后一条。 |
data.<key> | 可选参数。消息。用键值对表达。如果存在,会被作为数据包含在Intent中,对应key。 对于键值对的数目没有限制。但是对总的数据大小是有限制的。 |
delay_while_idle | 可选参数。如果使用,表示当手机闲置的时候,消息不需要立即发送。服务器会等手机重新在线,然后发送每一个collapse_key的最后一条消息。 |
Authorization: GoogleLogin auth=[AUTH_TOKEN] | 必须参数。ClientLogin Auth Token作为header. Cookie必须和ac2dm关联。 |
服务器响应:
Response | Description |
200 | Includes body containing: · id=[ID of sent message] · Error=[error code] o QuotaExceeded — sender发送了太多的消息。稍后重试。 o DeviceQuotaExceeded — 太多的消息发往某个手机. 稍后重试。 o InvalidRegistration — 缺少或者无效的registration_id. Sender应该停止发送消息到这个手机。 o NotRegistered —registration_id无效, 比如用户卸载了程序或者关闭了通知。Sender应该停止发送消息到这个手机。 o MessageTooBig — 消息太大,减少消息的大小。 MissingCollapseKey — 没有collapse key。在请求里包含collapse key。 |
503 | 表明服务器暂时不可连接. 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 | 表明用于验证sender的ClientLogin Auth Token无效。 |
Limitations
C2DM有下面的限制:
1. 消息大小的限制:1024bytes。
2. Google限制了sender发送消息的总数和sender发送消息到某个手机的总数。