google联系人自定义导入小工具开发过程及源码

一、起因

做这个小工具的起因是把黑莓8700g换成了Android系统的三星i5700。由于我的8700g是4.2版本的ROM,不支持google sync程序的安装,而我换了手机后又懒得再去鼓捣黑莓的刷机,因此就直接用黑莓的管理软件导出CSV文件,然后在gmail的通讯录管理界面中导入。

可是问题就接踵而来,gmail的通讯录导入程序不能识别黑莓导出的所有字段,因此只有部分字段被导入到gmail 通讯录中了,这显然不行。

接着我用gmail通讯录导出了一个csv文件,然后按照导出的CSV文件的格式来修改黑莓导出的CSV文件,并使排序完全一致。结果这样也不行,导入的通讯录更加不完整。

仔细查看了gmail的帮助,根据帮助提供的范例修改了CSV的字段名称,倒是可以导入。但gmail帮助提供的范例中的字段很少,并不能完整的支持我的通讯录。

我试验过的gmail通讯录导入支持的字段如下:

名,姓,公司(或者用“单位”也可以),职务,移动电话,住宅电话,电子邮件地址

如果联系人的信息并不多,那么用上面的字段就可以完成了,可是我的很多联系人,都有超过2个以上的电话,有十几个联系人有4个电话,因此就没办法用这个来导入。

这还不算,最大的问题,是gmail中的导入功能无法支持群组的导入。也就是说,原来在黑莓中对联系人进行的分组,都无法识别成gmail的群组。

要解决以上问题,就只能使用Google Contacts Data API来处理了。

二、分析与选择

Google Data API其实已经提供了很多客户端库,但是唯独没有基于ActionScript的。因此只能使用XML来处理。

1.AIR还是SWF

本来准备做两个版本,先做SWF版,然后转成AIR版,但后来发现SWF有很多限制,因此只能使用AIR来制作这个工具。

SWF的限制包括:

  1. 仅支持HTTP协议的POST和GET方法,不支持PUT和DELETE,Google Data API的某些操作是需要PUT和DELETE的。(对PUT、DELETE不清楚的可以看这里
  2. google的跨域文件的限制

2.选择何种google账户认证方式

google提供了三种账户认证的方式(注意:这个页面的ClientLogin的“了解详情”链接是错误的,要访问正确的地址,可猛击这里)、OAuth、AuthSub和ClientLogin,我对这三种都进行了测试。Google推荐使用的是OAuth,这种认证方式复杂但安全,它需要打开google的登录界面进行登录,登录后再返回软件界面。对于桌面程序来说,这就要判断用户的操作,怎样才算作登录成功了。比如判断浏览器的标题栏、或者判断cookie、或者使用时间轮询等等。对于一个小工具来说,这太复杂了。

AuthSub与OAuth类似,但流程要简单一些,还是要使用google的登录界面。

ClientLogin就简单多了,只需要提供google账户的用户名和密码就可以了。因此这个工具使用的是ClientLogin。

3.Google数据API(Google Data API)

这里是Google Data API的列表页面,其中,Goole 账户验证Google 数据 API是大部分API都要用到的规范,只要涉及到数据处理和账户验证,都要用到这两个API,而对应的产品也有自己的API,例如google通讯录的API就是Google Contacts Data API,联系人API中的很多细节,却是Google 数据 API提供的。

4.E4X

在没有客户端库的情况下,对XML的操作,是个挺麻烦的事情。这个小工具很简单,大部分的工作量其实都花在对XML的处理上。大量的XML操作让我感觉到E4X真的是却是非常方便和优雅。对于E4X操作,下面这两篇文章有很大的参考价值:

e4x - 对xml操作的一些示例

E4X用法简要

或许,我后面也会写一篇经验吧。

三、工具使用注意事项

  • CSV编码必须为UTF-8;
  • CSV字段名称不能重复;
  • CSV的换行符默认使用“\n”,可以在源码google::GoogleContact.CSV_LINE_BREAK中修改。“\n”是Linux系统的默认换行符,windows系统的默认换行符为“\r\n”。具体你的CSV是使用什么作为换行符,可以在CSV的编辑工具中指定。许多文本编辑器支持换行符的转换。
  • CSV中联系人群组字段的名称必须为“群组”(当然,可以在源码中自己改google::GoogleContact.CSV_GROUP_FIELD_NAME);
  • 每一次提交之后,不要重复操作,要等待google返回后再处理。

四、下载信息

1.下载AIR运行时并安装;
2.下载AIR包并双击安装:
1 文件

源码:http://googlecontactimporter.googlecode.com/svn/trunk/

项目地址:http://googlecontactimporter.googlecode.com