基于Android GCM服务的图书馆信息推送系统设计
李文江1, 陈诗琴2
1重庆文理学院机电工程学院 重庆 402160
2重庆文理学院图书馆 重庆 402160
摘要

针对现有图书馆手机信息推送成本高、数据流量大等问题,基于Google的云消息框架GCM,设计一种新的图书馆信息推送系统。从需求分析与技术思路、手机客户端实现、信息提供服务器端实现和系统运行效果等方面进行详细阐述。该系统能够实现低成本、低流量地实时推送图书馆信息,满足读者个性化的信息订阅需求。

关键词: GCM服务; 信息推送; Android
Design of Library Information Push System Based on Android GCM Service
Li Wenjiang1, Chen Shiqin2
1Faculty of Electromechanical Engineering, Chongqing University of Arts and Sciences, Chongqing 402160, China
2Library of Chongqing University of Arts and Sciences, Chongqing 402160, China
Abstract

The high cost of information push and large data flow are the main problems in the current mobile phone library information push systems. This paper introduces a proposal to design a new library information push system based on GCM. The requirements analysis and technical ideas, the mobile client implementation, the information providing server side implementation and the service operating results are elaborated. The system implements a low cost, low flow push library information in real time and meets readers’ demand for personalized information subscription.

Keyword: GCM service; Information push; Android
1 引 言

近年来,图书馆信息服务的实时性、主动性日益受到图书情报界重视,如何将信息及时地推送给各个读者成为亟需解决的问题。手机3G网络的发展和Android智能设备用户群的不断壮大,为信息推送搭建起一个良好的平台。

针对传统信息推送方式的不足,本文基于Google新推出的云推送消息服务(Google Cloud Messaging for Android, GCM)[ 1],设计并实现一种新的信息推送系统,以帮助图书馆准确且低成本地将信息推送给手机用户,便于用户快速获取信息详情。

2 需求分析与技术思路
2.1 手机信息推送现状分析

信息推送是通过一定的技术标准或协议,将用户需要的信息主动发送给用户,以减少信息过载现象和用户搜索信息时间的一类服务或者技术[ 2]。目前通过手机进行信息推送的方式主要有以下5种[ 3]:

(1)采用短信技术。需要与移动运营商协商,建立短信服务器。其建设、运行和维护成本较高。

(2)WAP推送技术。该技术主要基于特殊格式的短信息,手机通过识别特殊的标识来进行相应的处理,该方式对手机数据流量和电量消耗不大,但是需要移动运营商的介入,成本较高。

(3)POLL轮询方式。需要手机客户端不定时地询问服务器是否有更新,当服务器没有更新数据的时候,该方式会浪费大量的流量和消耗较多的电量。为了降低流量和电量消耗,通常是采用减低轮询频率来实现,这样又导致了消息的长延迟,因此仅适合对实时性要求不高的应用。

(4)保持 IP 长连接方式。即通过客户端与服务器之间维持一个持续的TCP/IP连接来实现推送。为此,客户端应用软件向服务器周期性发送“心跳包”,保持数据连接。对于普通的手机终端,这种方式消耗的流量和电量比较大,而且需要客户端软件始终运行。所以只适合执行单一任务的移动终端。

(5)基于手机厂商提供的信息推送服务。目前主流的智能手机操作系统厂商都为自己的系统提供了专门的信息推送服务,建立了专门的推送服务器,以帮助第三方应用服务器转发要推送给手机客户端的信息。比如Google的GCM[ 4],Apple的APNS[ 5]和Microsoft的MPNS[ 6]等。这种方式下,只需手机客户端与推送服务器保持固定IP连接,进行持续通信,并监听约定的端口即可。该方式的最大优点是在避免过多消耗数据流量和电量的情况下,可以实现多重任务;不足之处在于作为新技术还在不断完善之中。

图书馆需推送的主要内容有:新闻通知、新书通报、图书预约、图书借阅、超期预警和定制服务等。目前采用手机推送的方式主要涉及上述4种方式,比如文献[ 7, 8, 9]采用方式(1),文献[ 10]采用方式(3),文献[ 11]采用方式(4)。它们的不足之处较明显:成本高、耗流量或耗电量。若引入方式(5)进行信息推送,则不足之处会有所改善。

2.2 技术思路

经过比较研究,本文选择方式(5),采用Android手机系统,利用Google推出的GCM服务进行信息推送系统开发。该系统由图书馆信息提供服务器(简称信息服务器)、GCM服务器和Android手机客户端(简称客户端)组成。其推送思路[ 12, 13]图1 所示:

图1 GCM信息推送过程

客户端按照①至④的顺序分别在GCM服务器和信息服务器上注册,完成注册后,就启用了GCM服务。信息服务器准备好待发信息后,按照⑤至⑥的顺序完成信息推送。

3 应用设计

系统总体设计框架如图2所示:

图2 系统总体设计框架

整个推送过程分为以下5个部分:

(1)订阅推送项目

手机安装客户端程序后,自动显示从信息服务器的数据库中读取的可推送项目列表。读者从中选择自己感兴趣的项目作为订阅项目,同时填写读者号。

(2)注册信息发送

客户端程序通过Android系统向GCM服务器发送注册信息,然后获得GCM服务器返回的注册ID;同时将获得的注册ID、选择的订阅项目和读者号一并发送给信息服务器。

(3)注册信息接收

GCM服务向信息服务器注册时,采用POST方式发送数据,所以信息服务器端需要读取POST请求数据,将其中的注册ID、项目编号和读者号分别储存到对应的数据表中来完成整个GCM服务的注册。

(4)信息的提取

根据读者订阅的项目,在图书馆主页系统DB和管理系统DB中按项目定时自动提取每个项目产生的新数据,并储存在信息服务器的数据库中。

(5)信息的发送

信息服务器的发送程序按照GCM服务器接收信息的格式,将提取的信息连同目标手机注册ID一起发送给GCM服务器。余下的工作由GCM服务器去完成推送。

以上5个过程,前面两个过程在客户端实现,后面三个过程在信息服务器端实现。客户端直接使用Google提供的GCM示例源程序的注册和接收信息功能、增加订阅项目功能;而信息服务器端的三个过程需自行设计。

4 应用实现
4.1 客户端实现

开发环境工具包括JDK、Android SDK、Eclipse和ADT。在Eclipse中导入GCM示例源程序,并在此程序基础上进行修改、调试和打包生成APK安装文件。

(1)申请GCM服务

用一个Google账号,登录Google API的控制台页面,申请创建一个API项目,获取项目ID。再勾选开启Google Cloud Messaging服务,获取项目API Key[ 14]

(2)获取源程序并修改参数值

打开Android SDK Manager,安装Extras﹥Google Cloud Messaging for Android Library后,在\extras\google\gcm\samples\gcm-demo-client子目录里,产生gcm-demo-client源程序。

将CommonUtilities.java文件中SERVER_URL变量的值,设置为接收注册信息的Web应用程序地址;将SENDER_ID变量的值,设置为GCM项目ID。将strings.xml文件中的常量默认值修改为需要的值。

(3)增加订阅项目功能

新增一个Class类和XML布局文件。在布局文件中放置绑定项目列表的CheckBox、填写读者号的EditText、注册Button和注销Button视图组件;在类文件中设置连接数据库、获取项目数据、CheckBox数据绑定、获取读者选择项目、读取读者号、注册和注销的程序代码。将新增的Activity组件在AndroidManifest.xml配置文件中进行注册。

其中注册、注销是直接调用ServerUtilities.java文件中register和unregister方法,同时需要把选择的推送项目和读者号传递给这两个方法,所以必须修改原来的register和unregister方法以及相关的Post方法。

增加订阅推送项目后的注册流程[ 12, 15]图3 所示:

图3 客户端设备注册流程

4.2 信息服务器端实现

信息服务器端利用Visual Studio 2008开发工具,基于Microsoft.NET Framework 3.5框架,选择VB.NET作为开发语言,采用Microsoft SQL Server 2005作为后台数据库,选择LINQ to SQL[ 16]对数据库进行建模。其中采用Web应用程序方式实现注册信息接收,采用Windows Form应用程序方式实现信息提取和信息发送。

将“新闻通知、新书通报”两项叫做公共信息,将“图书预约、图书借阅、超期预警、定制服务”4项叫做专属信息。在信息提取和发送时对公共和专属信息分别进行操作。

(1)数据结构设计

数据库中每个表的功能如表1所示:

表1 各表的功能介绍
表与表之间的关系如图4所示:

图4 信息服务器端数据结构设计

由5个表及之间的关系生成公共信息视图和专属信息视图分别如表2表3所示:

表2 公共信息视图V_tb_push_ggxmxx
表3 专属信息视图V_tb_push_zsxmxx

(2)注册信息接收

利用ASP.NET的泛型处理常式(Handler)接收客户端以POST方式发送过来的注册ID、订阅项目编号和读者号。建立一个RegisID.ashx一般处理程序页,将程序代码放在 ProcessRequest 虚方法中,其主要执行过程如下:

①HttpContext.Request("RegisID")获取注册ID,HttpContext.Request("Lib_id")获取读者号,HttpContext.Request("xm_id")获取项目编号;

②将获取的注册ID和读者号储存到tb_RegisID表中,读者号和订阅项目编号储存到tb_select_push_xm 表中;

③利用HttpContext.Response.Write,将注册成功或失败的信息返回给客户。

(3)信息提取实现

针对每个项目建立对应的信息提取函数。所有提取函数实现思路都一样:外部输入读者号,项目编号参数;内部实现连接图书馆对应系统DB,并根据读者号提取所需的新信息;输出提取信息字符串和对应读者号。提取公共信息时则不需读者号进行信息查询筛选,直接提取新的信息即可。

在信息提取时,将公共和专属信息分开提取。不管公共信息有多少读者订阅,只需对其提取一次;而专属信息因订阅读者不同而提取信息不同,所以只能按照读者依次逐个提取。整个提取流程如图5所示。最后利用Timer控件定时执行整个提取流程,则可实现不断提取新的信息。

图5 信息提取流程

(4)信息发送实现

GCM服务器可向单一设备推送信息或同时向多个设备推送信息(也称“多播消息”),其接收信息的组织方式有两种:纯文本格式和JSON[ 17]格式。发送多播消息只能使用JSON格式,多个接收设备注册ID以数组形式组织,可包含1个和最多1 000个注册ID,因此向单个设备发送信息也可用JSON格式。本文公共信息向多个客户端发送,专属信息向一个客户端发送,两者都采用JSON格式组织,再发送给GCM服务器[ 18]

引用Newtonsoft.Json.dll组件[ 19],设计单条信息发送程序,并封装为HttpPostToGCM过程,输入注册ID数组(Reg_IDS)、GCM项目API Key(API_Key)和待发消息内容(Message),程序主要处理过程[ 20]如下:

①首先向GCM服务器发送一个POST请求:

Dim request As HttpWebRequest =

WebRequest.Create("https://android.googleapis.com/gcm/send")

②设置HTTP Header 和HTTP Body两部分内容:

request.Method = "POST"

request.ContentType = "application/json;charset=utf-8;"

request.Headers.Add(String.Format("Authorization: key={0}", API_Key))

Dim postData = New With {Key.data = New With {Key.message = message},Key.registration_ids = Reg_IDS}

′定义符合JSON格式的数据对象

Dim p As String = JsonConvert.SerializeObject(postData)

′将LINQ to JSON转换为字符串

Dim byteArray As Byte() = Encoding.UTF8.GetBytes(p)

′将字符串转换为字节

……

循环读取V_tb_push_ggxmxx和V_tb_push_zsxmxx视图中每条待发信息和注册ID,并送入HttpPostToGCM过程中执行发送,同时更新视图对应表中的push_flag标记。最后利用Timer控件定时执行发送程序,即可实现定时发送信息。

5 系统运行环境、测试及效果

(1)信息服务器端运行环境

Web应用程序是以Windows Server 2003服务器、Microsoft.NET Framework 3.5框架和IIS 6.0为运行环境。Windows Form应用程序安装在能访问图书馆数据库和外网的计算机上即可。

(2)客户端运行环境

GCM客户端要求手机必须运行Android 2.2及以上版本并且要求安装有GooglePlay Store,或者运行有Google API的Android 2.2及以上版本的虚拟机上。若在低于Android 4.0.4版本上运行,则需用户提供一个Google账号,在手机“账户与同步”里进行登录,才能使用GCM服务。

(3)客户端运行测试

在AVD Manager虚拟设备管理器中,新建“GCM”的模拟器设备,选择Google APIs(Google Inc.)-API Level 16版本,进行测试。安装好客户端程序后,登录注册窗口如图6所示:

图6 GCM注册窗口

选择需要推送的项目和输入自己的读者号,点击注册。注册成功则会显示如图7所示的前三行提示信息。当想更改订阅项目时,可以先注销,再重新选择项目并注册。

注册成功后,信息服务器端向GCM服务器发送信息,GCM服务器收到信息后,检查手机的状态。如果手机在线,就将信息直接推送给手机;反之,则临时存储信息,等待推送。当信息到达手机后,Android系统会通过广播Intent唤起相应的手机程序来处理信息。手机的GCM接收效果如图7所示:

图7 GCM信息接收窗口

(4)系统实现效果

从测试结果可以看出,该系统的应用较好地满足了图书馆和读者两大主体对信息的需求。对图书馆而言,系统可以降低信息推送的成本,使信息推送目标更准确、容量更大。系统借助互联网向读者直接推送信息,避免向移动运营商支付额外的通信费用。系统按需推送信息,既达到信息推送目的,又避免信息污染。信息推送容量大,不像手机短信受字符数限制。其一次性推送信息的容量足以满足实际应用需要,不会将信息分割成多条来推送。对读者而言,系统提高了信息接收的准确性,方便信息查阅,节省电量和数据流量。读者订阅信息,掌握信息选择的主动,达到信息过滤的效果。在信息接收时,读者只需点击Android系统的通知栏信息提示,即可看到最新接收的详细信息。系统无需长时间运行客户端软件,避免频繁的数据传输。

6 结 语

本文设计并实现了基于 Google 云消息框架GCM的图书馆信息推送系统,介绍了图书馆信息推送服务的需求分析、技术思路、整体设计框架和最终实现效果。为使其发挥更大的作用,图书馆可以将本系统与其现有的图书馆信息管理平台深度整合,将更多的信息推送到手机上,为读者提供更多便捷服务。

参考文献
[1] eoeAndroid WIKI. GCM Advanced Topics [EB/OL]. [2013-06-25]. http://wiki.eoeandroid.com/index.php?title=GCM_Advanced_Topics&diff=7523&oldid=7517. [本文引用:1]
[2] 信息推送[EB/OL]. [2013-06-25]. http://baike.baidu.com/view/2499995.htm. (Information Push [EB/OL]. [2013-06-25]. http://baike.baidu.com/view/2499995.htm. ) [本文引用:1]
[3] 张长学, 张伟, 董智明. 移动推送技术面面观[J]. 移动通信, 2011, 355): 21-27. (Zhang Changxue, Zhang Wei, Dong Zhiming. Mobile Push Technology Panorama[J]. Mobile Communications, 2011, 355): 21-27. ) [本文引用:1] [CJCR: 0.3028]
[4] Android Developers. Google Cloud Messaging for Android [EB/OL]. [2013-06-25]. http://developer.android.com/google/gcm/index.html. [本文引用:1]
[5] Grails Plugin: Apple Push Notification Service Integration[EB/OL]. [2013-06-25]. http://grails.org/plugin/apns. [本文引用:1]
[6] Push Notifications for Windows Phone[EB/OL]. [2013-08-26]. http://msdn.microsoft.com/en-us/library/ff402558. [本文引用:1]
[7] 王泽贤. 手机短消息在图书馆的应用及其实现的关键技术[J]. 现代情报, 2004, 248): 198-200. (Wang Zexian. Mobile Phone Short Message in the Key Technology of the Application and Implementation of the Library[J]. Modern Information, 2004, 248): 198-200. ) [本文引用:1] [CJCR: 0.801]
[8] 宋姗姗. 手机短信平台在高校图书馆信息推送服务的应用及对我馆的启示[J]. 法律文献信息与研究, 20094): 53-56. (Song Shanshan. SMS Platform in the University Library Information Push Service Application and Inspiration for My Library[J]. Information and Research Legal Literature, 20094): 53-56. ) [本文引用:1]
[9] 崔宇红. 基于手机短信平台的图书馆信息推送服务[J]. 大学图书馆学报, 2004, 224): 67-68. (Cui Yuhong. Library Information Push Service Based on Mobile Short Message Platform[J]. Journal of Academic Libraries, 2004, 224): 67-68. ) [本文引用:1] [CJCR: 3.739]
[10] 栾冠楠. 基于手机的个性化推送服务模式的研究[D]. 西安: 第四军医大学, 2011. (Luan Guannan. New Push Service Based on Mobile Phone[D]. Xi’an: The Fourth Military Medical University, 2011. ) [本文引用:1]
[11] 郭文丽, 严潮斌, 吴旭. 基于Android客户端的图书馆微服务研究与实践[J]. 图书情报工作, 2013, 578): 22-26. (Guo Wenli, Yan Chaobin, Wu Xu. Research and Practice of Library Micro- services Based on Android[J]. Library and Information Service, 2013, 578): 22-26. ) [本文引用:1] [CJCR: 1.193]
[12] 沈洪洲, 宗乾进, 袁勤俭. 应用Google云消息框架C2DM实现商务信息推送服务[J]. 现代图书情报技术, 20126): 78-83. (Shen Hongzhou, Zong Qianjin, Yuan Qinjian. Implementation of Commerce Information Push Service Using Google C2DM [J]. New Technology of Library and Information Service, 20126): 78-83. ) [本文引用:2] [CJCR: 1.073]
[13] 邹海, 李强, 邱慧丽. 基于Android C2DM服务的云端推送研究与实现[J]. 计算机技术与发展, 2012, 227): 29-32. (Zou Hai, Li Qiang, Qiu Huili. Research and Implementation of Cloud Pushing Based on Android C2DM Service[J]. Computer Technology and Development, 2012, 227): 29-32. ) [本文引用:1] [CJCR: 0.74]
[14] Google Accounts[EB/OL]. [2013-07-16]. http://www.google.com/intl/en/landing/accounts/. [本文引用:1]
[15] 张京, 刘甫迎. 基于Android云计算消息框架(C2DM)的FoxNews-MID手持移动系统的研究[J]. 计算机科学, 2011, 3810A): 461-463. (Zhang Jing, Liu Fuying. Study and Implementation of FoxNews-MID Based on Android C2DM[J]. Computer Science, 2011, 3810A): 461-463. ) [本文引用:1] [CJCR: 0.61]
[16] 侯利军. 精通LINQ数据访问技术——基于C#[M]. 北京: 人民邮电出版社, 2008: 269-295. (Hou Lijun. Proficient in LINQ Data Access Technology——Based on C#[M]. Beijing: Posts & Telecom Press, 2008: 269-295. ) [本文引用:1]
[17] JSON [EB/OL]. [2013-06-25]. http://baike.baidu.com/view/136475.htm. [本文引用:1]
[18] GCM Architectural Overview[EB/OL]. [2013-08-29]. http://www.android-doc.com/guide/google/gcm/gcm.html. [本文引用:1]
[19] JSON. NET [EB/OL]. [2013-02-25]. http://json.codeplex.com/. [本文引用:1]
[20] Code Project. Android GCM Push Notification [EB/OL]. [2013-08-29]. http://www.codeproject.com/Tips/434338/Android-GCM-Push-Notification. [本文引用:1]