androidpn的一次亲切接触(二)

androidpn的一次亲密接触(二)

简单看了一下源码的实现,这里贴一点个人觉得比叫重要的代码。

 

XmppManager.java

  • 构造方法:
public XmppManager(NotificationService notificationService)

 

 在这里主要是从共享引用中取得xmpp服务器地址和端口号、用户名和密码。

 

  • 内部类
private class ConnectTask implements Runnable

 

 这个内部类主要实现的是连接服务器的操作。通过connection.connect();实现连接服务器。通过如下语句实现发送连接消息。

ProviderManager.getInstance().addIQProvider("notification",
                            "androidpn:iq:notification",
                            new NotificationIQProvider());

 最后通过xmppManager.runTask();执行任务队列中的任务。

 

  • 内部类
 private class RegisterTask implements Runnable
  这个内部类主要实现的是在服务器上注册用户的操作。如果没有注册,随即生成用户名和密码注册到服务器上。同样通过connection.sendPacket(registration);发送消息实现注册功能。

  • 内部类
private class LoginTask implements Runnable
 这个内部类主要实现的是用户的登录操作。通过注册到服务器上的用户名和密码登录到服务器上。最后通过connection.addPacketListener(packetListener, packetFilter);实现消息的监听。最后一样通过xmppManager.runTask();在消息队列中执行任务(执行这个线程)。这个类就是实现服务器推动的主要类。

上述为客户端的实现。总的来说客户端仍然是通过xmpp协议实现消息的传输。值得注意的是在NotificationService这个类中(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);方法取得了系统的消息的相关服务。主要为类是取得设备的ID,但我在源码中没有看到使用这个设备ID的地方。很是不解,看来还是需要继续深入的研究。


哈哈。到现在为止,总共完成了对openfire开发环境、openfire插件的制作、smack和openfire通信、androidpn的部署方式以及androidpn的使用方法的研究调研工作。对这些方面都是停留在皮毛,希望以后可以通过实际应用可以学到更加深层次的东西。对了,听一位业内人士说,xmpp是很复杂的,希望以后我能更加了解一点。

明天研究写什么呢?明天可能要计划一下怎么把公司现有的工作流做到android上来。
未完待续...

 

1 楼 wearebug 2011-06-23  
Google的C2DM协议也是在XMPP基础上改造的。
2 楼 yangzc106 2011-06-23  
wearebug 写道
Google的C2DM协议也是在XMPP基础上改造的。

因为这个协议比较灵活,但google的c2dm强调的是云,只不过底层使用的xmpp协议罢了。这个协议可扩展性还是比较强的。
3 楼 chen5040 2011-07-21  
怎么没有继续往下写了呢,我现在也要做这一块的实现,希望可以讨论下。
不知博主对该项目的服务器端的实现是否了解。
4 楼 zsxsilence 2012-06-21  
问一下楼主,openfire 和androidpn是啥关系?有什么区别?