Archive for the 'web2.0-无线互联网' Category


通过ActiveSync同步Onenote Mobile 与Onenote 2007

    用了接近10年的Nokia的机器,说实话Nokia的质量真的不错,换了7、8台机器,Nokia的机器没有出现过太大的质量问题。只不过感觉在智能手机的发展上,围绕手机操作系统平台相关的产业链是最大的竞争点。在这一点上,感觉Symbian平台的开放性、功能完备性及开发效率上,还是比不上像Microsoft、Apple这些做操作系统起家的厂商。

    考虑到与日常PC办公软件的兼容性,同时为了提高个人GTD管理能力,提高工作效率,换机不愿意再继续Symbian平台的机器,打算改用Windows Mobile平台的机器,新买了一台HTC Touch Dimaond,操作系统是Windows Mobile 6.1,当然由于是水货版本,因此带了WI-FI。ROM是用中国移动的心机定制版本刷的,也即S900,此版本带的Office Mobile中已经带了Excel Mobile、Onenote Mobile、PowerPoint Mobile、Word Mobile。

    首先要做的事情的是能够保持Outlook及Onenote与手机的同步。因此安装了ActiveSync来做PC与手机的同步。

    PC的操作系统:Windows XP SP2

    ActiveSync:4.5

1、ActiveSync配置

   下载安装ActiveSync 4.5版本。

    PPC端:

      开始->设置->连接->由USB连接到PC->ActiveSync(与Outlook同步),取消“启用高级网络功能”,缺省为选中

     如果不配置成ActiveSync模式(磁盘驱动器模式),那么直接通过USB连接到计算机上时候只是作为一个USB盘符出现,并不会采用ActiveSync方式同步。

    PC端配置:

      image

    配置好后,同步ActiveSync同步Outlook的联系人、日历、任务等都没有问题,但同步Onenote没有成功。

2、Onenote安装

    Onenote要与Onenote Mobile同步,PC端的Onenote 应当是Onenote 2007版本,以前版本好像支持存在问题,Onenote 的安装程序在Office 2007  大企业版中有。

    在PC端启动Onenote 2007后,在Onenote 2007菜单的工具->选项 中应当有Onenote Mobile选项,如果Mobile端没有安装Onenote,可以通过此处安装Onenote到Mobile上,或者直接用Office 2007安装路径下的\Office12\2052\OneNoteMobile.CAB在Mobile上安装。由于买的机器的ROM版本中已经带了Onenote Mobile,因此不用安装。

3、Onenote配置

    将Mobile修改为ActiveSync模式后,通过数据线连接到PC上后,在ActiveSync PC客户端通过工具->设置,选中Microsoft Office OneNote选项。

image

  确定后,ActiveSync应当可以执行同步操作,然后会提示Onenote以前未与计算机同步,选定“将移动设备上的项目与此计算机上的项目合并”,然后ActiveSync会执行同步操作。

image

    然后在PC端的Onenote中应当会出现Onenote Mobile笔记本选项夹(在Onenote 2007的默认笔记本位置的目录下也会生成一个OneNote Mobile的目录),在此笔记本下会有一个叫“来自S900的便签”的分区,在此分区下可以建新的页或分页,这样可以由ActiveSync来实现与Onenote Mobile的同步。

    要与Onenote同步的Onenote页面都必须放到ActiveSync生成的“来自S900的便签”的分区下,不然无法同步。开始以为是只要放到Onenote Mobile目录下的页面都能够实现自动同步,试验了很久才发现此规则。

    目前Onenote Mobile不能够指定Onenote笔记存放的目录(查找了注册表也无果),只能存放到“主存\Application Data\Microsoft\OneNote Mobile”下。

   在同步过程中如果出现无法识别设备或无法自动同步的问题,我自己在同步过程中就出现了一堆问题,下面是采用的一些方法:   

  • 注意Outlook与ActiveSync的安装顺序及版本

    应当先安装OUTLOOK再安装ActiveSync,而且应当是Outlook 2003以上版本,而不是Outlook Express

  • 采用“ActiveSync模式”,而不是“磁盘驱动器模式”

    在PPC端:开始->设置->连接->由USB连接到PC->ActiveSync(与Outlook同步)

  • 禁用防火墙

    刚开始时候将PPC通过USB连接上电脑,始终不能同步,后来发现是防火墙把端口禁用了。由于ActiveSync 采用TCP/IP栈来实现PC与PPC之间的通讯,所以会受到防火墙设置的限制,出了问题可以先禁用一下防火墙试试。

  • 禁用“启动高级网络功能”

    在PPC端:开始->设置->连接->由USB连接到PC->ActiveSync(与Outlook同步),取消“启动高级网络功能”选项(默认状态为启用),然后重新连上USB数据线,一般即可解决问题。

  • 删除Onenote的目录

    在PC端直接删除Onenote的默认笔记本位置的目录下的OneNote Mobile目录,然后重新进行Onenote的初始化同步过程

  • 解除PPC和PC之间的关联关系删除掉

    PC端:在PC端的ActiveSync管理界面上执行:文件->删除移动设备,重新进行整个设备的同步,只不过此种情况下,通信录会出现重复同步的现象。

    PPC端:开始->程序->ActiveSync->功能表->选项->选择要删除的PC,删除即可。

  • 禁止ActiveSync自动运行

    缺省情况下,PPC后台始终有ActiveSync进程在运行,不停执行同步操作,即使通过Task Manager这样的软件停止ActiveSync进程后,过上一会儿又会执行同样的同步操作,这样挺消耗系统资源及电源的,不希望ActiveSync不停地自动同步,当然通过USB连接上后还是希望能够自动执行同步操作,可以通过如下步骤来禁用ActiveSync自动同步。

   在PPC端:
   1、开始->程序->Activesync. 打开Activesync。

   2、点击ActiveSync最右下角的“菜单”。此时候在菜单中, “日程安排”选项是灰色的,不能更改。

   3、点击“添加源服务器”

   4、在后续的配置中,随意输入电子邮件地址、用户名、密码、域、服务器地址等信息后完成Exchange源服务器配置,回到ActiveSync主界面,多了一个Microsoft Exchange  ,停止Exchange的同步操作

   5、点击ActiveSync最右下角的“菜单”,此时侯在菜单中,“日程安排”选项可以点击了,点击“日程安排”

   6、在日程安排配置界面,把“高峰时段”和“非高峰时段”都改为手动,而不要使用缺省的“项目到达时”

   7、点击OK按钮,回到ActiveSync主界面  

   8、重启PPC(Reset),用的是psShutXP,用Touch Diamond红色的Reset按钮费劲

   9、点击ActiveSync最右下角的“菜单->选项->选中Microsoft Exchange->删除。

 

关于Onenote Mobile,有几个不错的插件:

Copy to Mobile Device:安装完成后,会在Onenote菜单上增加“Copy to Device”按钮,点击此按钮可以把当前编辑的页面(可以没有在Onenote Mobile笔记本中)自动拷贝为Onenote Mobile笔记本的页面,方便同步。

Use OneNote instead of Outlook Notes:http://blogs.msdn.com/johnguin/archive/2007/04/16/4-16.aspx

Export Outlook Notes to OneNote: http://blogs.msdn.com/descapa/archive/2007/02/14/export-your-outlook-notes-to-onenote.aspx

其他有用的插件,可以参考:http://blogs.msdn.com/johnguin/archive/2008/01/17/a-summary-of-the-onenote-powertoys-from-the-test-team-for-2007.aspx

“我们有难,但我们试着生存”-我的无线互联网信念

   今天偶然看到一则新闻《伊拉克选手穿旧T恤、二手鞋参战北京奥运会》,令人无比感动,或许这是奥运开赛以来最为让我感动的一则新闻,向这些伟大的伊拉克运动员致敬,为中国男足这样的垃圾球队和垃圾队员感到可耻。

   “我们有难,但我们试着生存”!

  “结果不是最重要的,重要的是我们参加了这个盛会,我们经历享受了这个过程,我们已经创造了纪录。”

12353322

    对于初创性的无线互联网公司而言,并不是每一家公司都能够在市场、产品、技术或运营层面有核心的竞争优势。既没有核心产品创新能力去创造一种全新的商业模式,也无核心资源优势去搭建运营的竞争优势,更无核心的技术优势来构筑竞争壁垒,因此要在竞争激烈的无线互联网市场生存下去,挑战是蛮大的,可以说笑道最后的只能有不到1%的企业。

   无线互联网目前尚处于初级阶段,受限于客户使用习惯、网络带宽、客户端处理能力等因素,客户端目前所能够承载的功能相对也有限,在模式上并没有一种现成的商业模式可以参考。因此在发展上,肯定存在很多的困难和挑战。但正因为挑战,事业才有意义,成功才显得弥足珍贵。在这样残酷的境遇下,第一和唯一重要的对这项事业的热情,这是支撑我们自己能够坚持下去唯一核心的支柱。我相信这也是支撑伊拉克运动员克服各种困难参加奥运会的动力所在。一定要学会享受创业的过程中的各种痛苦和挫败。

   在创业初期,任何公司都面临像伊拉克运动员一样的窘境,各种创业条件都不具备,各种资源都无从争取。不要在初期就指望产品具有充分的创新性、拥有一个完美团队,万事俱备后才动手开做,这样而言,只会丧失掉各种市场机会,整个团队始终只是处于观望和理念阶段,整个团队也无机会去磨合和成长。对于初创性公司而言,肯定都有一个不断试错、不断自我否定并不断前行的过程,因此团队执行力是第一位的,只有在不断试错的过程中,才能够逐步在纷繁复杂的环境中理清自己的目标并强大自己。      

“结果不是最重要的,重要的是我们参加了这个盛会,我们经历享受了这个过程,我们已经创造了纪录。”

手机客户端IM技术实现思考2-我的IM2.0

我的IM2.0

 

无线互联网门户社区核心数据模型设计思考1

    根据典型的web2.0 sns门户社区,设计了无线互联网门户社区初步的核心数据模型。

    基本设计重点:

1、 以用户为中心,为用户提供综合性、一体化的社区体验

架构模型涵盖典型的web2.0社区的各种基本元素,包括:

  • 标签(tag)、标签云(tag cloud)
  • RSS(web订阅、邮件订阅、基于IM机器人的订阅)
  • IM
  • 用户群组
  • 微博客(twitter)、博客(Blog)
  • 点评(digg)、投票、话题、推荐、收藏夹
  • 用户点击行为分析(内容过滤、协同过滤)
  • 用户上传及分享
  • 社区搜索
  • Mashup(外部应用聚合)
  • 开放API

其中IM、用户关系链元素的设计在单独域模型中设计。

2、 基于真实关系链的无线互联网社区

    Facebook及国内诸如校内、海内这样SNS的无比风光,说明了基于相对真实关系链的价值。用户使用SNS的关注点大部分是希望维系和拓展现有的关系链,而不是重构关系链,因此SNS及IM不应当让用户抛弃现有的关系链去重新构造一个全新的关系链。要让用户导入现有的关系链到社区核心在于能够标识用户相对真实的身份及围绕此身份所形成的关系链。

    在互联网时代能够标识用户身份及用户关系链的东西包含如下一些:手机号码通信录、多IM通信录(QQ、MSN等联系人)、邮箱通信录。

    而号码同步+多IM协议集成及相关应用的结合,基本上涵盖了如上内容。

  • 手机号码通信录:客户端基于syncml协议的同步功能本身解决了此问题。
  • 多IM通信录:在用户使用客户端的多协议的IM功能登录QQ、MSN等IM时候,实际上无形之中就导入了其IM的联系人通信录
  • 邮箱通信录:通过Push Mail功能及RSS的邮件定于、绑定邮箱等功能就导入了邮箱通信录

3、 投其所好的过滤引擎

    门户社区成功最为核心的是用户体验。

   用户体验涉及方方面面,但一个与技术相关的至关重要的是能够根据用户的喜好、点击行为及消费行为,向用户推荐较为准确内容及好友。在设计上考虑了两种过滤引擎的实现需求,包括:基于内容的过滤(Content Based Filtering)、基于相似用户群体的兴趣的协同过滤(Collaborative Filtering)引擎。

    在数据模型设计上提供了多维度的数据采集数据采集方法,如Tag标签、Digg数、推荐、用户打分等等。

    构建无线互联网社区所必须的其他元素的架构及数据模型设计逻辑,继续考虑中。

手软门户域数据模型设计

 

手机客户端IM技术实现思考

手软客户端技术预研说明

 

Jabber协议分析之Subscriptions运行机制-Presence subscription

    手机客户端需要实现即时通信功能,在通信协议上采用开放的Jabber(XMPP)协议,整个XMPP协议最为核心也是最为复杂的部分是Subscription的运行机制,抓取了一下相关的通信协议报文,供开发时候参考。

  

1. 测试环境

1.1. 测试软件环境:

    Jabber服务器:Openfire 3.5.2

    Jabber客户端:Spark 2.5.8

抓包:Wireshark

1.2. 服务器环境:

    Jabber服务器:192.168.1.12,安装Openfire,域为home1

    Jabber用户客户端:192.168.1.10,安装Spark客户端,Jabber用户为chuanliang。

    Jabber联系人客户端:192.168.1.11,安装Spark客户端,Jabber用户为liangchuan

1.3. 测试场景:

测试1:

    Jabber用户chuanliang和Jabber联系人liangchuan被彼此的presence订阅,且允许把彼此加入自己的Roster

测试2

    Jabber联系人liangchuan接受Jabber用户chuanliang的订阅,但是不允许chuanliang加入自己的Roster

测试3

    Jabber联系人liangchuan不接受Jabber用户chuanliang的订阅,同时不允许chuanliang加入自己的Roster

以测试用例“测试1”说明一下测试过程:

1、 chuanliang@home1在192.168.1.10客户端上新增联系人liangchuan@home1

2、 liangchuan@home1在192.168.1.11客户端上“准许chuanliang@home1新增liangchuan@home1到chuanlian的联系人名单中”,同时”Add user to liangchuan’s  roster”

clip_image002

3、 chuanliang@home1在192.168.1.10客户端上“准许liangchuan@home1新增chuanliang@home1到chuanlian的联系人名单中”,同时”Add user to chuanliang’s  roster”

clip_image004

2. 测试1- contact accept subscription and allow add user to it’s roster

2.1. Jabber用户客户端发送一个type=’set’ 的Roster Update请求给Jabber服务器端

Ø 192.168.1.10->192.168.1.12

Jabber用户客户端发送一个<iq/>包给Jabber服务器端,其jabber:iq:roster名字空间中包含一个type=’set’,用于更新自己的roster

<iq id="7SJ55-63" type="set">

    <query xmlns="jabber:iq:roster">

        <item jid="liangchuan@home1" name="liangchuan">

            <group>Friends</group>

        </item>

    </query>

</iq>

Ø 192.168.1.12->192.168.1.10

Jabber用户客户端从服务器接收到一个“roster push”,产生一个新的roster条目,其subscription状态置为“none”:

<iq type="set" id="308-51" to="chuanliang@home1/spark">

    <query xmlns="jabber:iq:roster">

        <item jid="liangchuan@home1" name="liangchuan" subscription="none">

            <group>Friends</group>

        </item>

    </query>

</iq>

Ø 192.168.1.12->192.168.1.10

Jabber用户客户端在成功的情况下,从服务器接收到一个<iq/>包,其type=’result’。

<iq type="result" id="7SJ55-63" to="chuanliang@home1/spark"/>

2.2. Jabber用户客户端发送一个type=’subscribe’的<presence/>的包给联系人客户端

Jabber用户客户端发送一个type=’subscribe’的<presence/>的包给联系人(发送给到Jabber服务器)

Ø 192.168.1.10->192.168.1.12

<presence id="7SJ55-64" to="liangchuan@home1" type="subscribe"/>

Ø 192.168.1.12->192.168.1.10

Jabber用户客户端接着从服务器收到包含联系人待定子状态的’none’订阅状态的“roster push”;这个待定子状态在其联系人名单中包含一个ask=’subscribe’属性:

<iq type="set" id="132-52" to="chuanliang@home1/spark">

<query xmlns="jabber:iq:roster">

<item jid="liangchuan@home1" name="liangchuan" ask="subscribe" subscription="none">

<group>Friends</group>

</item>

</query>

</iq>

2.3. Jabber服务器发送一个type=’subscribe’的<presence/>的Roster push包给联系人客户端

Ø 192.168.1.12->192.168.1.11

Jabber服务器在接收到192.168.1.10发送的type=’subscribe’的<presence/>的包后,然后发送一个type=’subscribe’的<presence/>的包给联系人客户端

<presence id="7SJ55-64" to="liangchuan@home1" type="subscribe" from="chuanliang@home1"/>

Ø 192.168.1.11->192.168.1.12

Jabber联系人客户端发送一个<iq/>包给Jabber服务器,其jabber:iq:roster名字空间中包含一个type=’set’,用于更新自己的roster:

<iq id="8SAVC-26" type="set">

<query xmlns="jabber:iq:roster">

<item jid="chuanliang@home1" name="chuanliang">

<group>Friends</group>

</item>

</query>

</iq>

Ø 192.168.1.12->192.168.1.11

Jabber联系人客户端从服务器接收到一个<iq/>包,其type=’result’

<iq type="result" id="8SAVC-26" to="liangchuan@home1/spark"/>

2.4. Jabber联系人客户端发送一个type=’subscribe’的<presence/>的包给用户客户端

此部分请求发生在联系人客户端“准许chuanliang@home1新增liangchuan@home1到chuanlian的联系人名单中”时候同时选择了:“Add user to liangchuan’s  roster”选项。如果没有选择,则无此部分请求。

Ø 192.168.1.11->192.168.1.12

<presence id="8SAVC-27" to="chuanliang@home1" type="subscribe"/>

Ø 192.168.1.12->192.168.1.10

服务器传递请求给Jabber用户端

<presence id="8SAVC-27" to="chuanliang@home1" type="subscribe" from="liangchuan@home1"/>

Ø 192.168.1.12->192.168.1.10

<iq type="set" id="867-55" to="chuanliang@home1/spark">

<query xmlns="jabber:iq:roster">

<item jid="liangchuan@home1" name="liangchuan" subscription="to">

<group>Friends</group>

</item>

</query>

</iq>

2.5. Jabber联系人客户端接收订阅请求,发送一个type=’subscribed’的<presence/>的包给用户客户端

联系人下一步要做的就是决定是否接受订阅请求。我们假定联系人接受订阅请求

Ø 192.168.1.11->192.168.1.12

联系人的Jabber客户端发送一个type=’subscribed’的<presence/>的包给Jabber用户(通过服务器端)

<presence id="8SAVC-28" to="chuanliang@home1" type="subscribed"/>

Ø 192.168.1.12->192.168.1.10

<presence id="8SAVC-28" to="chuanliang@home1" type="subscribed" from="liangchuan@home1"/>

<presence id="8SAVC-6" from="liangchuan@home1/spark" to="chuanliang@home1/spark">

<status/>

<priority>1</priority>

</presence>

Ø 192.168.1.12->192.168.1.11

联系人的Jabber客户端从服务器接收一个“roster push”包含Jabber用户的条目,其中subscription状态置为“from”

<iq type="set" id="14-54" to="liangchuan@home1/spark">

<query xmlns="jabber:iq:roster">

<item jid="chuanliang@home1" name="chuanliang" ask="subscribe" subscription="from">

<group>Friends</group>

</item>

</query>

</iq>

2.6. Jabber用户客户端接收订阅请求,发送一个type=’subscribed’的<presence/>的包给联系人客户端

Ø 192.168.1.10->192.168.1.12

<presence id="7SJ55-65" to="liangchuan@home1" type="subscribed"/>

Ø 192.168.1.12->192.168.1.10

<iq type="set" id="382-56" to="chuanliang@home1/spark">

<query xmlns="jabber:iq:roster">

<item jid="liangchuan@home1" name="liangchuan" subscription="both">

<group>Friends</group>

</item>

</query>

</iq>

Ø 192.168.1.12->192.168.1.11

<iq type="set" id="697-57" to="liangchuan@home1/spark">

<query xmlns="jabber:iq:roster">

<item jid="chuanliang@home1" name="chuanliang" subscription="both">

<group>Friends</group>

</item>

</query>

</iq>

Ø 192.168.1.12->192.168.1.11

<presence id="7SJ55-65" to="liangchuan@home1" type="subscribed" from="chuanliang@home1"/>

<presence id="7SJ55-51" from="chuanliang@home1/spark" to="liangchuan@home1/spark">

<status/>

<priority>1</priority>

</presence>

3. 测试2- contact accept subscribption and not allow add user to it’s roster

3.1. Jabber用户客户端发送一个type=’set’ 的Roster Update请求给Jabber服务器端

Ø 192.168.1.10->192.168.1.12

Jabber用户客户端发送一个<iq/>包给Jabber服务器端,其jabber:iq:roster名字空间中包含一个type=’set’,用于更新自己的roster

<iq id="xHk99-51" type="set">

<query xmlns="jabber:iq:roster">

<item jid="liangchuan@home1" name="liangchuan">

<group>Friends</group>

</item>

</query>

</iq>

Ø 192.168.1.12->192.168.1.10

Jabber用户客户端从服务器接收到一个“roster push”,产生一个新的roster条目,其subscription状态置为“none”:

<iq type="set" id="133-130" to="chuanliang@home1/spark">

<query xmlns="jabber:iq:roster">

<item jid="liangchuan@home1" name="liangchuan" subscription="none">

<group>Friends</group>

</item>

</query>

</iq>

Ø 192.168.1.12->192.168.1.10

Jabber用户客户端在成功的情况下,从服务器接收到一个<iq/>包,其type=’result’。

<iq type="result" id="xHk99-51" to="chuanliang@home1/spark"/>

3.2. Jabber用户客户端发送一个type=’subscribe’的<presence/>的包给联系人客户端

Jabber用户客户端发送一个type=’subscribe’的<presence/>的包给联系人(发送给到Jabber服务器)

Ø 192.168.1.10->192.168.1.12

<presence id="xHk99-52" to="liangchuan@home1" type="subscribe"></presence>

Ø 192.168.1.12->192.168.1.10

Jabber用户客户端接着从服务器收到包含联系人待定子状态的’none’订阅状态的“roster push”;这个待定子状态在其联系人名单中包含一个ask=’subscribe’属性:

<iq type="set" id="35-132" to="chuanliang@home1/spark">

<query xmlns="jabber:iq:roster">

<item jid="liangchuan@home1" name="liangchuan" ask="subscribe" subscription="none">

<group>Friends</group>

</item>

</query>

</iq>

3.3. Jabber服务器发送一个type=’subscribe’的<presence/>的Roster push包给联系人客户端

Ø 192.168.1.12->192.168.1.11

Jabber服务器在接收到192.168.1.10发送的type=’subscribe’的<presence/>的包后,然后发送一个type=’subscribe’的<presence/>的包给联系人客户端

<presence id="xHk99-52" to="liangchuan@home1" type="subscribe" from="chuanliang@home1"/>

3.4. Jabber联系人客户端接收订阅请求,发送一个type=’subscribed’的<presence/>的包给用户客户端

联系人下一步要做的就是决定是否接受订阅请求。我们这里联系人接受订阅请求,但是取消”Add user to chuanliang’s  roster”操作。

Ø 192.168.1.11->192.168.1.12

联系人的Jabber客户端发送一个type=’subscribed’的<presence/>的包给Jabber用户(通过服务器端)

<presence id="8SAVC-90" to="chuanliang@home1" type="subscribed"></presence>

Ø 192.168.1.12->192.168.1.10

<presence id="8SAVC-90" to="chuanliang@home1" type="subscribed" from="liangchuan@home1"/>

<presence id="8SAVC-30" from="liangchuan@home1/spark" to="chuanliang@home1/spark">

<status/>

<priority>1</priority>

</presence>

Ø 192.168.1.12->192.168.1.11

联系人的Jabber客户端从服务器接收一个“roster push”包含Jabber用户的条目,其中subscription状态置为“from”

<iq type="set" id="585-135" to="liangchuan@home1/spark">

<query xmlns="jabber:iq:roster">

<item jid="chuanliang@home1" subscription="from"/>

</query>

</iq>

4. 测试3- contact not accept subscription and  not allow add user to it’s roster

4.1. Jabber用户客户端发送一个type=’set’ 的Roster Update请求给Jabber服务器端

Ø 192.168.1.10->192.168.1.12

Jabber用户客户端发送一个<iq/>包给Jabber服务器端,其jabber:iq:roster名字空间中包含一个type=’set’,用于更新自己的roster

<iq id="n7NDl-39" type="set">

<query xmlns="jabber:iq:roster">

<item jid="liangchuan@home1" name="liangchuan">

<group>Friends</group>

</item>

</query>

</iq>

Ø 192.168.1.12->192.168.1.10

Jabber用户客户端从服务器接收到一个“roster push”,产生一个新的roster条目,其subscription状态置为“none”:

<iq type="set" id="321-250" to="chuanliang@home1/spark">

<query xmlns="jabber:iq:roster">

<item jid="liangchuan@home1" name="liangchuan" subscription="none">

<group>Friends</group>

</item>

</query>

</iq>

Ø 192.168.1.12->192.168.1.10

Jabber用户客户端在成功的情况下,从服务器接收到一个<iq/>包,其type=’result’。

<iq type="result" id="n7NDl-39" to="chuanliang@home1/spark"/>

4.2. Jabber用户客户端发送一个type=’subscribe’的<presence/>的包给联系人客户端

Jabber用户客户端发送一个type=’subscribe’的<presence/>的包给联系人(发送给到Jabber服务器)

Ø 192.168.1.10->192.168.1.12

<presence id="n7NDl-40" to="liangchuan@home1" type="subscribe"/>

Ø 192.168.1.12->192.168.1.10

Jabber用户客户端接着从服务器收到包含联系人待定子状态的’none’订阅状态的“roster push”;这个待定子状态在其联系人名单中包含一个ask=’subscribe’属性:

<iq type="set" id="942-252" to="chuanliang@home1/spark">

<query xmlns="jabber:iq:roster">

<item jid="liangchuan@home1" name="liangchuan" ask="subscribe" subscription="none">

<group>Friends</group>

</item>

</query>

</iq>

4.3. Jabber服务器发送一个type=’subscribe’的<presence/>的Roster push包给联系人客户端

Ø 192.168.1.12->192.168.1.11

Jabber服务器在接收到192.168.1.10发送的type=’subscribe’的<presence/>的包后,然后发送一个type=’subscribe’的<presence/>的包给联系人客户端

<presence id="n7NDl-40" to="liangchuan@home1" type="subscribe" from="chuanliang@home1"/>

4.4. Jabber联系人客户端接收订阅请求,发送一个type=’ unsubscribe’的<presence/>的包给用户客户端

联系人下一步要做的就是决定是否接受订阅请求。我们这里联系人接受订阅请求,但是取消”Add user to chuanliang’s  roster”操作。

Ø 192.168.1.11->192.168.1.12

联系人的Jabber客户端发送一个type=’ unsubscribe的<presence/>的包给Jabber用户(通过服务器端)

<presence id="8SAVC-116" to="chuanliang@home1" type="unsubscribe"/>

Ø 192.168.1.12->192.168.1.10

<presence id="8SAVC-116" to="chuanliang@home1" type="unsubscribe" from="liangchuan@home1"/>

Ø 192.168.1.12->192.168.1.11

联系人的Jabber客户端从服务器接收一个“roster push”包含Jabber用户的条目,其中subscription状态置为“remove”

<iq type="set" id="190-258" to="liangchuan@home1/spark">

<query xmlns="jabber:iq:roster">

<item jid="chuanliang@home1" subscription="remove"/>

</query>

</iq>

4.5. Jabber用户客户端发送取消订阅请求,发送一个subscription =’ remove’的<iq/>的包给服务器端

Ø 192.168.1.10->192.168.1.12

用户的Jabber客户端发送一个subscription="remove"的包给服务器,取消订阅

<iq id="n7NDl-41" type="set">

<query xmlns="jabber:iq:roster">

<item jid="liangchuan@home1" name="liangchuan" subscription="remove" ask="subscribe">

<group>Friends</group>

</item>

</query>

</iq>

Ø 192.168.1.12->192.168.1.10

<iq type="set" id="872-256" to="chuanliang@home1/spark">

<query xmlns="jabber:iq:roster">

<item jid="liangchuan@home1" subscription="remove"/>

</query>

</iq>

Ø 192.168.1.12->192.168.1.10

<iq type="result" id="n7NDl-41" to="chuanliang@home1/spark"/>

5. 参考文档

http://www.xmpp.org/extensions/xep-0162.html

http://tools.ietf.org/html/rfc3921

http://www.xmpp.org/extensions/xep-0144.html

 

无线互联网技术平台战略思考提纲

    梳理一下无线互联网门户技术平台战略的规划思路,先罗列一下思考的要点:

1、技术平台战略定位:开放式平台架构

    封闭内部系统 .VS. 开放式技术平台(Facebook)

    自主运营平台. VS. 协作生态系统 (WIKI、UGC)

    单一功能平台. VS. 产品整合营销平台(Facebook、QQ)

    功能性平台 . VS. 在线生活方式(Facebook、赛我、QQ)

 

2、技术平台价值最大化

    在搭建技术平台的同时,需要充分发挥技术平台的优势,使其价值最大化,包括:

    开发资源、开发成果的最大化:最大化复用平台架构、开发资源

    平台功能价值最大化:运营平台、营销平台、支付平台、社区平台

    价值链价值最大化:以开放式平台来整合整个无线互联网增值业务价值链,让价值链合作伙伴完全依赖平台

    用户价值最大化:为用户提供一体化的在线生活平台,成为最佳的整合营销平台

 

3、电信重组后的3G时代的三大运营商战略

    电信重组对于无线互联网公司、增值业务公司都属于利好。作为落后者的中国电信及中国联通要在数据业务、语音业务等3G业务上迅速赶上,需要更加关注与价值链上合作伙伴分享价值、实现共赢。

    在电信重组后的3G时代,能否理解、把握、踩准运营商的战略节拍对于我们这样的公司至关重要;同时必须有自己的核心的忠实用户群才能够游走于三大运营商之间,做到持续的运营。因此需要深刻理解运营商的需求及客户的需求。

    近期电信和联通核心的任务应该是发展用户,因此对于我们这样的公司而言,我们对他们的价值在于:

    业务通路价值:3G时代,增值业务肯定是各运营商的战略重点,这些业务的落地需要依赖价值链上具备通路价值的公司来协同完成。

    发展用户价值:对于电信及联通,固网竞争态势已经基本明朗,怎样快速扩大自己的忠实手机用户群是其战略重点,因此对于运营商而言,这些无线互联网公司及增值业务公司的价值是谁能够帮助其发展用户,尤其是帮助其策反竞争对手的高价值用户。通过基于口碑营销模式或关系链的策反是比较有效的手段。

    长期而言,必须积累我们自己核心的用户群,让用户粘在我们的社区平台上。

  

4、近期技术平台核心技术

    Syncml同步引擎:包括基于Syncml协议的客户端及服务器端同步引擎,另外wbxml这样的数据压缩技术还是很重要的

    VOIP:通信需求始终是手机用户最大的业务需求,3G时代IP、VOIP化更是趋势

    客户端:初期重点为Symbian、Windows Mobile、MTK、J2ME;Android、Linux、BlackBerry、IPhone

    多客户端协议整合:电信、联通、移动的客户端的整合,同时包括诸如QQ、MSN等传统IM客户端的整合。

 

« 上一页下一页 »